引入LSTM
儘管RNN被設計成可以利用歷史的信息來輔助當前的決策,但是由於在上節提到的梯度消失或者梯度爆炸問題,RNN主要還是學習短期的依賴關係。所以RNN新的技術挑戰就是-長期依賴。
長短時記憶網絡(Long Short Term Memory Network, LSTM),是一種改進之後的循環神經網絡,可以解決RNN無法處理長距離的依賴的問題.
LSTM在一個整體的循環網絡結構中除了外部的RNN大循環,還要考慮自身單元“細胞”的自循環。
傳統RNN每個模塊內只是一個簡單的tanh層,LSTM每個循環的模塊內又有4層結構:3個sigmoid層,1個tanh層其中圖標
粉色的圓圈表示一個二目運算。兩個箭頭匯合成一個箭頭表示2個向量首尾相連拼接在一起。一個箭頭分叉成2個箭頭表示一個數據被複製成2份,分發到不同的地方去。
LSTM內部結構
LSTM的關鍵是細胞狀態,一條水平線貫穿於圖形的上方,這條線上只有些少量的線性操作,信息在上面流傳很容易保持。如下圖
控制參數,決定什麼樣的信息要保留,什麼樣的信息需要遺忘。–
需要一直維護更新 怎麼樣進行決策呢,就需要用到門:Gate
門:Gate:是一個使用sigmoid激活函數對輸入信息進行控制的結構。使用門可以對通過這個結構的輸入信息進行控制,使用激活函數後,全連神經網絡輸出一個0-1之間的數值。當sigmoid激活函數輸出為1時,門完全打開,全部信息可以通過;sigmoid激活函數輸出為0時,門完全閉合,任何信息無法通過。
第一層:遺忘門
根據當前的輸入、上一時刻的輸出和門的偏置項共同決定哪一部分記憶需要被遺忘。
第二層:記憶門
為了使循環神經網絡更有效的保存長期記憶,除了遺忘門,輸入門也發揮至關重要的作用。不僅需要忘記部分之前的記憶,還需要補充新的記憶,就需要輸入門來控制。
一個tanh層用來產生更新值的候選項,tanh的輸出在[-1,1]上,説明細胞狀態在某些維度上需要加強,在某些維度上需要減弱;還有一個sigmoid層(輸入門層),它的輸出值要乘到tanh層的輸出上,起到一個縮放的作用,極端情況下sigmoid輸出0説明相應維度上的細胞狀態不需要更新。
生成新的細胞狀態
讓舊的細胞狀態(f是forget忘記門的意思)相乘來丟棄一部分信息,然後再加個需要更新的部分
(i是input輸入門的意思),這就生成了新的細胞狀態
。
輸出層
輸出值跟細胞狀態有關,把輸給一個tanh函數得到輸出值的候選項。候選項中的哪些部分最終會被輸出由一個sigmoid層來決定
總結
輸入門:
遺忘門:
輸出門:
新記憶參數:
最後記憶參數:
最終輸出狀態:
梯度消失問題
RNN 通過來保存和傳遞信息,之前分析瞭如果時間間隔較大容易產生梯度消失的問題。
LSTM 則通過記憶單元 來傳遞信息,通過
和
的調控,
可以在 t 時刻捕捉到某個關鍵信息,並有能力將此關鍵信息保存一定的時間間隔。
如果沒有遺忘門,,這樣的話
恆為1,這樣
會不斷增大,容易飽和,從而降低模型的性能。引入遺忘門後,
,當然如果多個
連乘同樣會導致梯度消失(
)。但是LSTM的技巧就是將遺忘門的bias設置為正數,(例如 1 或者 5,如 tensorflow 中的默認值就是 1.0),這樣一來模型剛開始訓練時 forget gate 的值都接近 1,不會發生梯度消失 (反之若 forget gate 的初始值過小則意味着前一時刻的大部分信息都丟失了,這樣很難捕捉到長距離依賴關係)。 隨着訓練過程的進行,forget gate 就不再恆為 1 了。不過,一個訓好的模型裏各個 gate 值往往不是在 [0, 1] 這個區間裏,而是要麼 0 要麼 1,很少有類似 0.5 這樣的中間值,其實相當於一個二元的開關。
假如在某個序列裏,forget gate 全是 1,那麼梯度不會消失;某一個 forget gate 是 0,模型選擇遺忘上一時刻的信息。