長短時記憶網(wǎng)絡
循環(huán)神經(jīng)網(wǎng)絡很難訓練的原因?qū)е滤膶嶋H應用中很處理長距離的依賴。本文將介紹改進后的循環(huán)神經(jīng)網(wǎng)絡:長短時記憶網(wǎng)絡(Long Short Term Memory Network, LSTM),
原始RNN的隱藏層只有一個狀態(tài),即h,它對于短期的輸入非常敏感。那么如果我們再增加一個狀態(tài),即c,讓它來保存長期的狀態(tài),這就是長短時記憶網(wǎng)絡。
新增加的狀態(tài)c,稱為單元狀態(tài)。我們把上圖按照時間維度展開:
可以看到在 t 時刻,LSTM的輸入有三個:當前時刻網(wǎng)絡的輸出值 xt 、上一時刻LSTM的輸出值 ht?1、以及上一時刻的單元狀態(tài) ct?1;LSTM的輸出有兩個:當前時刻LSTM輸出值 ht 、和當前時刻的單元狀態(tài) xt 。注意 x、h、c 都是向量。
LSTM的關(guān)鍵,就是怎樣控制長期狀態(tài)c。在這里,LSTM的思路是使用三個控制開關(guān)。第一個開關(guān),負責控制繼續(xù)保存長期狀態(tài)c;第二個開關(guān),負責控制把即時狀態(tài)輸入到長期狀態(tài)c;第三個開關(guān),負責控制是否把長期狀態(tài)c作為當前的LSTM的輸出。三個開關(guān)的作用如下圖所示:
接下來我們要描述一下,輸出h和單元狀態(tài)c的具體計算方法。
長短時記憶網(wǎng)絡的前向計算
我們引入“門(gate)”的概念。門實際上就是一層全連接層,它的輸入是一個向量,輸出是一個0到1之間的實數(shù)向量。假設W是門的權(quán)重向量,b是偏置項,那么門可以表示為:
門的輸出是0到1之間的實數(shù)向量,用門向量的輸出向量按元素乘以我們需要控制的那個向量,當門輸出為0時,任何向量與之相乘都會得到0向量,這就相當于啥都不能通過;輸出為1時,任何向量與之相乘都不會有任何改變,這就相當于啥都可以通過。因為σ(也就是sigmoid函數(shù))的值域是(0,1),所以門的狀態(tài)都是半開半閉的。
LSTM用兩個門來控制單元狀態(tài) c 的內(nèi)容,一個是遺忘門,它決定了上一時刻的單元狀態(tài) t?1 有多少保留到當前時刻 ct ;另外一個是輸出門,他決定了當前時刻網(wǎng)絡的輸入 xt 有多少保存到單元狀態(tài) ct 。LSTM用輸出門來控制單元狀態(tài) ct 有多少輸出到LSTM的當前輸出值 ht 。LSTM用輸出門來控制單元狀態(tài) ct 有多少輸出到LSTM的當前輸出值ht。
遺忘門的表達式是:
上式中,Wf 是遺忘門的權(quán)重矩陣,ht?1 , xt 表示把兩個向量連接成一個更長的向量,bf 是遺忘門的偏置項,σ是sigmoid函數(shù)。如果輸入的維度是dx,隱藏層的維度是 dh,單元狀態(tài)的維度是 dc( d_c = d_h ),則遺忘門的權(quán)重矩陣 Wf維度是 dcx(dh + dx ) 。事實上,權(quán)重矩陣 Wf 都是兩個矩陣拼接而成的:一個是Wfh,它對應著輸入項 ht?1 ,其維度為 dcxdh;一個是Wfx,它對應著輸入項 xt ,其維度為dcxdx。Wf 可以寫為:
下圖顯示了遺忘門的計算:
接下來看看輸入門:
上式中,Wi 是輸入門的權(quán)重矩陣,$b_i$是輸入門的偏置項。下圖表示了輸入門的計算:
接下來,我們計算用于描述當前輸入的單元狀態(tài),它是根據(jù)上一次的輸出和本次輸入來計算的:
下圖是的計算:
現(xiàn)在,我們計算當前時刻的單元狀態(tài) ct。它是由上一次的單元狀態(tài) ct?1 按元素乘以遺忘門 ft ,再用當前輸入的單元狀態(tài)按元素乘以輸入門 it ,再將兩個積加和產(chǎn)生的:
符號O表示按元素乘。下圖是 ct 的計算:
這樣,我們就把LSTM關(guān)于當前的記憶和長期的記憶 ct?1 組合在一起,形成了新的單元狀態(tài) ct 。由于遺忘門的控制,它可以保存很久很久之前的信息,由于輸入門的控制,它又可以避免當前無關(guān)緊要的內(nèi)容進入記憶。下面,我們要看看輸出門,它控制了長期記憶對當前輸出的影響:
下面表示輸出門的計算:
LSTM最終的輸出,是由輸出門和單元狀態(tài)共同確定的:
下圖表示LSTM最終輸出的計算:
式1到式6就是LSTM前向計算的全部公式。至此,我們就把LSTM前向計算講完了。
長短時記憶網(wǎng)絡的訓練
LSTM訓練算法框架
LSTM的訓練算法仍然是反向傳播算法,對于這個算法,我們已經(jīng)非常熟悉了。主要有下面三個步驟:
1、前向計算每個神經(jīng)元的輸出值,對于LSTM來說,即 ft、it、ct、ot、ht 五個向量的值。計算方法已經(jīng)在上一節(jié)中描述過了。
2、反向計算每個神經(jīng)元的誤差項δ值。與循環(huán)神經(jīng)網(wǎng)絡一樣,LSTM誤差項的反向傳播也是包括兩個方向:一個是沿時間的反向傳播,即從當前t時刻開始,計算每個時刻的誤差項;一個是將誤差項向上一層傳播。
3、根據(jù)相應的誤差項,計算每個權(quán)重的梯度。
作者:凌逆戰(zhàn)
來源:博客園
原文鏈接:https://www.cnblogs.com/LXP-Never/p/10398531.html
審核編輯:何安
-
神經(jīng)網(wǎng)絡
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100712 -
循環(huán)神經(jīng)網(wǎng)絡
+關(guān)注
關(guān)注
0文章
38瀏覽量
2967 -
LSTM
+關(guān)注
關(guān)注
0文章
59瀏覽量
3748
發(fā)布評論請先 登錄
相關(guān)推薦
評論