深度學習(四)RNN & Word2Vec


RNN(Recurrent Netural Network)循環神經網絡,用來處理和預測序列數據,在語音識別,語言描述,翻譯等領域有很好的運用。

傳統神經網絡結構如CNN是假設所有的input之間是相互獨立的,output之間也相互獨立,但實際中會存在由前面幾個字去推測后面的詞,這個時候CNN的假設就不能成立了。

而RNN可以通過時序結構來關聯input,記住input之間的關系。

RNN的典型結構如下:

展開之后為:

 

可以看到隱藏層的輸入有兩個:隱藏層的輸入(前一個隱藏層的輸出 h)以及原始輸入(指某個詞的vector x)

具體例子如下:

RNN模型中有個time step的概念,表示記憶的長度,例子中的記憶長度就是4.

但是RNN無法解決長時間依賴的問題,也就是記憶長度不能特別長(容易出現梯度彌散的問題),因此出現了一些改進版的RNN,如LSTM(Long short term memory)

兩者的結構對比圖如下:

從對比圖上可以看出,所有RNN都具有一個重復模塊,標准RNN重復模板是比較簡單的tanh,而LSTM則是由通過精心設計的稱作“門”的結構來去除或者增加信息。

(1)清除無用信息 (遺忘門 forget gate)

(2)添加新的信息

(3)更新細胞狀態

(4)輸出信息

以上便展示了LSTM的幾個重要計算邏輯。

在現實中,我們用的訓練數據往往是句子或者詞組,因此需要先做一些處理,下面介紹幾個句子處理中的常見概念

(1)詞向量(把一個詞轉換成一個向量)

  a. one hot representation

  用一個很長向量表示一個詞,向量長度是詞典長度,向量中只有元素0和1,1的位置對應詞在詞典中的位置

  這種方法在NLP中運用的比較多,但也有明顯的問題:維度災難和無法刻畫近義詞之間的相似性

  b. distributed representation

  以普通向量表示一個詞,一般是50維或者100維 (??? how),可以認為是Word embedding(詞嵌入)??

 (2)Word2Vec (google提出的基於word embedding的工具或者算法集合)

本質上是構造多層神經網絡,input是one-hot vector,通過hidden layer(lookup table)找到對應的vector,在訓練過程中不斷修正參數,具體圖如下:

計算過程如下:

這樣一個one hot vector被轉換成dense vector,而且維度降低

Word2Vec的主要模式:

  a. CBOW(Continuous Bag of Words), 從當前詞的上下文推測當前詞語,對小型數據庫比較適合

      b. Skip-gram 從當前詞語推測詞語的上下文

舉例如下:

There is a little dog.

CBOW: [There, a] -> [is], [is, little] -> [a], [a, dog] -> [little]

Skip-gram:(skip1) [is] -> [There], [is] -> a, [a] -> [is], [a] -> [little] ....

  c. 復雜度分析 (未完待續)

Word2Vec的主要步驟(未完待續) 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM