LSTM網絡實現
問題描述
影片評價問題:
輸入一個英文句子,輸出好/壞的二元評價,比如
The movie is very bad -> 0
Wonderful -> 1
算法思路
本圖中的數字僅爲示例,並非真實數據
Embedding層
在上一篇卷積神經網絡的實現中,我們將類別直接映射爲{0,0…1,…0}這樣的向量,但對於單詞而言,這個向量維度太大了(500個單詞就是500維…),結合後面的時間序列展開會變成非常龐大,因此,我們需要新的方式。
新的方式就是引入一個Embedding Layer:
1、統計所有互不相同的單詞個數,記爲n。
2、先將單詞轉換爲數字序號{0,1,2……,n-1}。
3、初始化一個 (n,m) 的係數矩陣。
4、讀取序號所對應的行,這個m維向量即爲轉換結果
這個係數矩陣及這個映射即 Embedding Layer,係數矩陣通過後向傳播算法訓練。
毫無疑問,這個層的係數矩陣非常的大,訓練它也是比較麻煩的,也可以用word2vec等現有的庫去把單詞轉化爲向量。
時間序列的處理
在情感分析這個問題中,每條句子的長短不一,而每個單詞被映射爲相同長度的向量,句子中的單詞存在先後關係,因此構成了一個時間序列。
在實際計算中,時間序列按固定的迭代次數,展開處理。比如取定迭代次數爲50,單詞轉化成的向量長度爲10(m=10),則展開的向量爲50*10=500。
句子的長短不一,有的比50大,那就截斷,只取最後50個單詞;有的比50小,就需要引入mask,標誌這個展開向量後面若干是無效的。
LSTM公式
LSTM 層的輸入是一個 t*m 的向量,輸出也是一個 t*m 的向量,在運算時,分成 t 個 m 長度的向量逐個計算:
參考 http://deeplearning.net/tutorial/lstm.html
這篇文檔講得非常清楚,就是如下一系列的核心公式:
反向傳播
Embedding 層的反向傳播
Embedding 層的反向傳播僅對係數有效。
在正向傳播時記錄下所選取的index,把相應的差分加到相應的行上去即可。
(詳細待補)
LSTM 層的反向傳播
LSTM層的反向傳播需要分別計算
輸入差:
以及係數差:
爲了計算,需要分別對
需要注意的是:
LSTM的反向傳播是相當麻煩的,如果實現了自動求導,會輕鬆不少。
代碼工程
待補