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的主要步驟(未完待續)