LSTM原理理解


參考博客

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算法

主要有下面三個步驟:

  1. 前向計算每個神經元的輸出值,對於LSTM來說,即五個向量(分別是遺忘門、輸入門、單元狀態、輸出門、輸出)的值。
  2. 反向計算每個神經元的誤差項值。與循環神經網絡一樣,LSTM誤差項的反向傳播也是包括兩個方向:一個是沿時間的反向傳播,即從當前t時刻開始,計算每個時刻的誤差項;一個是將誤差項向上一層(輸入層或其他)傳播。
  3. 根據相應的誤差項,計算每個權重的梯度。

推導過程如下:

LSTM需要學習的參數共有8組,分別是:遺忘門的權重矩陣和偏置項、輸入門的權重矩陣和偏置項、輸出門的權重矩陣和偏置項,以及計算單元狀態的權重矩陣和偏置項。因為權重矩陣的兩部分在反向傳播中使用不同的公式,因此在后續的推導中,權重矩陣都將被寫為分開的兩個矩陣:

分別的推導過程見:https://zybuluo.com/hanbingtao/note/581764

LSTM的python實現也見:https://zybuluo.com/hanbingtao/note/581764

雙向LSTM

類似於雙向RNN,結構圖如下:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM