LSTM
長短時記憶網絡(Long Short Term Memory Network, LSTM),是一種改進之后的循環神經網絡,可以解決RNN無法處理長距離的依賴的問題,目前比較流行。
長短時記憶網絡的思路:
原始 RNN 的隱藏層只有一個狀態,即h,它對於短期的輸入非常敏感。
再增加一個狀態,即c,讓它來保存長期的狀態,稱為單元狀態(cell state)。
把上圖按照時間維度展開:
在 t 時刻,LSTM 的輸入有三個:當前時刻網絡的輸入值 x_t
、上一時刻 LSTM 的輸出值 h_t-1
、以及上一時刻的單元狀態 c_t-1
;
LSTM 的輸出有兩個:當前時刻 LSTM 輸出值 h_t
、和當前時刻的單元狀態 c_t
.
關鍵問題是:怎樣控制長期狀態 c ?
方法是:使用三個控制開關
第一個開關,負責控制繼續保存長期狀態c;
第二個開關,負責控制把即時狀態輸入到長期狀態c;
第三個開關,負責控制是否把長期狀態c作為當前的LSTM的輸出。
如何在算法中實現這三個開關?
方法:用 門(gate)
定義:gate 實際上就是一層全連接層,輸入是一個向量,輸出是一個 0到1 之間的實數向量。
公式為:
回憶一下它的樣子:
gate 如何進行控制?
方法:用門的輸出向量按元素乘以我們需要控制的那個向量
原理:門的輸出是 0到1 之間的實數向量,
當門輸出為 0 時,任何向量與之相乘都會得到 0 向量,這就相當於什么都不能通過;
輸出為 1 時,任何向量與之相乘都不會有任何改變,這就相當於什么都可以通過。
LSTM 的前向計算:
遺忘門(forget gate)
它決定了上一時刻的單元狀態 c_t-1
有多少保留到當前時刻 c_t
輸入門(input gate)
它決定了當前時刻網絡的輸入 x_t
有多少保存到單元狀態 c_t
輸出門(output gate)
控制單元狀態 c_t
有多少輸出到 LSTM 的當前輸出值 h_t
(1)遺忘門(forget gate):
它決定了上一時刻的單元狀態 c_t-1
有多少保留到當前時刻 c_t
(2)輸入門(input gate):
它決定了當前時刻網絡的輸入 x_t
有多少保存到單元狀態 c_t
(3)輸出門(output gate):
控制單元狀態 c_t
有多少輸出到 LSTM 的當前輸出值 h_t
LSTM 的反向傳播訓練算法
主要有三步:
1. 前向計算每個神經元的輸出值,一共有 5 個變量,計算方法就是前一部分:
2. 反向計算每個神經元的誤差項值。與 RNN 一樣,LSTM 誤差項的反向傳播也是包括兩個方向:
一個是沿時間的反向傳播,即從當前 t 時刻開始,計算每個時刻的誤差項;
一個是將誤差項向上一層傳播。
3. 根據相應的誤差項,計算每個權重的梯度。
目標是要學習 8 組參數,如下圖所示:
又權重矩陣 W 都是由兩個矩陣拼接而成,這兩部分在反向傳播中使用不同的公式,因此在后續的推導中,權重矩陣也要被寫為分開的兩個矩陣。
接着就來求兩個方向的誤差,和一個梯度計算。
1.誤差項沿時間的反向傳遞:
定義 t 時刻的誤差項:
目的是要計算出 t-1 時刻的誤差項:
2.利用 h_t c_t 的定義,和全導數公式,可以得到 將誤差項向前傳遞到任意k時刻的公式:
3. 權重梯度的計算:
參考:https://zybuluo.com/hanbingtao/note/581764
https://www.jianshu.com/p/dcec3f07d3b5
以上就是 LSTM 的訓練算法的全部公式。