參考博客
https://zybuluo.com/hanbingtao/note/581764,LSTM的超詳細解釋
https://blog.csdn.net/qq_36696494/article/details/89028956,RNN、LSTM一起的詳解,例子很詳細。
長短時記憶網絡(LSTM)
長短時記憶網絡(Long Short Term Memory Network, LSTM),是RNN的一種,結構比較復雜,但是可以解決RNN的許多缺陷。
長短時記憶網絡的思路比較簡單。原始RNN的隱藏層只有一個狀態,即h,它對於短期的輸入非常敏感。那么,假如我們再增加一個狀態,即c,讓它來保存長期的狀態,那么問題不就解決了么?如下圖所示:
新增加的狀態c,稱為單元狀態(cell state)。把上面的圖按照時間維度展開:
在每個時刻t,LSTM的輸入有三個:當前的輸入值xt,前一時刻LSTM的輸出值ht-1,前一時刻的單元狀態ct-1。LSTM的輸出有兩個,當前時刻LSTM的輸出值ht,當前時刻的單元狀態ct。
LSTM的關鍵,就是怎樣控制長期狀態c。在這里,LSTM的思路是使用三個控制開關。第一個開關,負責控制繼續保存長期狀態c;第二個開關,負責控制把即時狀態輸入到長期狀態c;第三個開關,負責控制是否把長期狀態c作為當前的LSTM的輸出。三個開關的作用如下圖所示:
LSTM的前向計算
開關在算法中用門來實現。
門實際上就是一層全連接層,它的輸入是一個向量,輸出是一個0到1之間的實數向量。假設W是門的權重向量,b是偏置項,那么門可以表示為:
門的使用,就是用門的輸出向量按元素乘以我們需要控制的那個向量。因為門的輸出是0到1之間的實數向量,那么,當門輸出為0時,任何向量與之相乘都會得到0向量,這就相當於啥都不能通過;輸出為1時,任何向量與之相乘都不會有任何改變,這就相當於啥都可以通過。因為σ(也就是sigmoid函數)的值域是(0,1),所以門的狀態都是半開半閉的。
LSTM一共有三個門,LSTM用兩個門來控制單元狀態c的內容,一個是遺忘門(forget gate),它決定了上一時刻的單元狀態ct-1有多少保留到當前時刻ct;另一個是輸入門(input gate),它決定了當前時刻網絡的輸入xt有多少保存到單元狀態ct。LSTM用輸出門(output gate)來控制單元狀態ct有多少輸出到LSTM的當前輸出值ht。
遺忘門:控制上一時刻的單元狀態
遺忘門是由前一個時刻的輸出h和這個時刻的輸入x決定的,遺忘門的計算傳播如下圖:
輸入門:控制當前時刻的輸入
輸入門也是由上一時刻的輸出h和這個時刻的輸入t決定的,計算傳播如下圖:
除了遺忘門、輸入門,還有當前時刻的單元狀態c(這只是一個臨時值,描述當前輸入,由輸入門控制)也是由前一時刻的輸出h和這個時刻的輸入x決定的,計算公式如下:
計算傳播如下:
最終的要傳到下一層的當前時刻的單元狀態c,由遺忘門、輸入門、描述輸入的單元狀態臨時值、前一個時刻的最終單元狀態共同決定。
圓圈表示按元素乘,計算規則如下圖:
作用於一個向量和一個矩陣時廣播。
前一個時刻的最終單元狀態由遺忘門決定,當前單元狀態的臨時值由輸入門決定,通過遺忘門和輸入門將當前的記憶和長期的記憶組合在一起,形成最終的當前時刻的單元狀態。
由於遺忘門的控制,它可以保存很久很久之前的信息,由於輸入門的控制,它又可以避免當前無關緊要的內容進入記憶。
輸出門:控制當前時刻的單元狀態
當前時刻LSTM的輸出由輸出門控制,輸出門控制了長期記憶對當前輸出的影響,與當前時刻的輸入x和前一時刻的輸出h有關,計算公式如下:
輸出門的計算傳播如下:
最終輸出的計算由當前時刻的最終單元狀態c和輸出門共同決定,最終單元狀態不僅包括此時的記憶,還包括之前的記憶。計算公式如下:
LSTM的最終計算如下圖:
LSTM的訓練
訓練算法仍然是反向傳播BP算法
主要有下面三個步驟:
- 前向計算每個神經元的輸出值,對於LSTM來說,即、、、、五個向量(分別是遺忘門、輸入門、單元狀態、輸出門、輸出)的值。
- 反向計算每個神經元的誤差項值。與循環神經網絡一樣,LSTM誤差項的反向傳播也是包括兩個方向:一個是沿時間的反向傳播,即從當前t時刻開始,計算每個時刻的誤差項;一個是將誤差項向上一層(輸入層或其他)傳播。
- 根據相應的誤差項,計算每個權重的梯度。
推導過程如下:
LSTM需要學習的參數共有8組,分別是:遺忘門的權重矩陣和偏置項、輸入門的權重矩陣和偏置項、輸出門的權重矩陣和偏置項,以及計算單元狀態的權重矩陣和偏置項。因為權重矩陣的兩部分在反向傳播中使用不同的公式,因此在后續的推導中,權重矩陣、、、都將被寫為分開的兩個矩陣:、、、、、、、。
分別的推導過程見:https://zybuluo.com/hanbingtao/note/581764
LSTM的python實現也見:https://zybuluo.com/hanbingtao/note/581764
雙向LSTM
類似於雙向RNN,結構圖如下: