解決梯度消失梯度爆炸強力推薦的一個算法-----LSTM(長短時記憶神經網絡)

LSTM(長短時記憶)

應爲在簡單的RNN(vanilla RNN結構)中存在時序過長時會導致梯度消散,梯度爆炸的問題,而長短時記憶LSTM就是解決vanilla RNN中的不足,可以有效的減少梯度消散問題。

LSTM 中引⼊了3個⻔,即遺忘⻔(input gate)、輸入⻔(forget gate)和輸出⻔(output gate),以及與隱藏狀態形狀相同的記憶細胞(某些⽂獻把記憶細胞當成⼀種特殊的隱藏狀態),從而記錄額外的信息。

在這裏插入圖片描述
LSTM關鍵:「細胞狀態」

細胞狀態 類似於傳送帶。直接在整個鏈上運行,只有一些少量的線性交互。信息在上面流 傳保持不變很容易。

在這裏插入圖片描述

第一個「門」——「遺忘門」

第一個「門」==>「遺忘門」:決定從「細胞狀態」中丟棄什麼信息;比如在語言模型中,細胞狀態可能 包含了性別信息(「他」或者「她」),當我們看到新的代名詞的時候,可以考慮忘記舊的數據

因爲是通過sigmoid**,接近0的值就遺忘了,接近1的值就記住並繼續傳遞。

狀態 h(t-1)和本次的輸入(問題) x(t) 結合(concat)起來的,concat, 就是把二者直接拼起來,比如 x是 28位的向量,h(t-1)是128位的,那麼拼起來就是156位的向量。

在這裏插入圖片描述

第二個「門」——「輸入門」:

第二個「門」==>「輸入門」:決定放什麼新信息到「細胞狀態」中;

在這裏插入圖片描述

第三個「門」——「輸出門」:

經過第一個和第二個「門」後,可以確定傳遞信息的刪除和增加,即可以進行 「細胞狀態」的更新

首先運行一個sigmoid層來確定細胞狀態的那個部分將輸出
使用tanh處理細胞狀態得到一個-1到1之間的值,再將它和sigmoid門的輸出相乘,輸出程序確定輸出
在這裏插入圖片描述
LSTM動態圖展示

在這裏插入圖片描述

學習拓展

LSTM可以使用別的**函數嗎?
關於**函數的選取,在LSTM中,遺忘門、輸入門和輸出門使用Sigmoid函數作爲**函數;在生成候選記憶時,使用雙曲正切函數Tanh作爲**函數。

值得注意的是,這兩個**函數都是飽和的,也就是說在輸入達到一定值的情況下,輸出就不會發生明顯變化了。如果是用非飽和的**函數,例如ReLU,那麼將難以實現門控的效果。

Sigmoid函數的輸出在0~1之間,符合門控的物理定義。且當輸入較大或較小時,其輸出會非常接近1或0,從而保證該門開或關。

在生成候選記憶時,使用Tanh函數,是因爲其輸出在−1~1之間,這與大多數場景下特徵分佈是0中心的吻合。此外,Tanh函數在輸入爲0附近相比Sigmoid函數有更大的梯度,通常使模型收斂更快。

**函數的選擇也不是一成不變的,但要選擇合理的**函數。

LSTM-總結

LSTM的隱層神經元不僅包含隱狀態h_tht​,還專門開闢了一個 cell來保存過去的「記憶」c_tct​,LSTM希望用c_tct​來傳遞很久以前的信息,以達到長 距離依賴的目的。所以LSTM隱層神經元的輸入是上一時刻的隱狀態h_{t−1}ht−1​和記憶c_{t−1}ct−1​,輸出是當前時刻的隱狀態h_tht​和希望傳遞給下一個時刻的記憶c_tct​。