LSTM簡介以及數學推導(FULL BPTT)

前段時間看了一些關於LSTM方面的論文,一直準備記錄一下學習過程的,由於其餘事兒,一直拖到了如今,記憶又快模糊了。如今趕忙補上,本文的組織安排是這樣的:先介紹rnn的BPTT所存在的問題,而後介紹最初的LSTM結構,在介紹加了遺忘控制門的,而後是加了peephole connections結構的LSTM,都是按照真實提出的時間順序來寫的。本文至關於把各個論文核心部分簡要聚集一下而作的筆記,已提供快速的瞭解。算法


一.rnn結構的BPTT學習算法存在的問題

先看一下比較典型的BPTT一個展開的結構,以下圖,這裏只考慮了部分圖,由於其餘部分不是這裏要討論的內容。網絡


對於t時刻的偏差信號計算以下:函數


這樣權值的更新方式以下:學習


上面的公式在BPTT中是很是常見的了,那麼若是這個偏差信號一直往過去傳呢,假設任意兩個節點u, v他們的關係是下面這樣的:spa


那麼偏差傳遞信號的關係能夠寫成以下的遞歸式:3d


n表示圖中一層神經元的個數,這個遞歸式的大概含義不難理解,要求t-q時刻偏差信號對t時刻偏差信號的偏導,就先求出t-q+1時刻對t時刻的,而後把求出來的結果傳到t-q時刻,遞歸中止條件是q = 1時,就是剛開始寫的那部分計算公式了。將上面的遞歸式展開後能夠獲得:blog


論文裏面說的是能夠經過概括來證實,我沒仔細推敲這裏了,把裏面連乘展開看容易明白一點:遞歸


整個結果式對T求和的次數是n^(q-1), 即T有n^(q-1)項,那麼下面看問題出在哪兒。get

若是|T| > 1, 偏差就會隨着q的增大而呈指數增加,那麼網絡的參數更新會引發很是大的震盪。input

若是|T| < 1, 偏差就會消失,致使學習無效,通常激活函數用simoid函數,它的倒數最大值是0.25, 權值最大值要小於4才能保證不會小於1。

偏差呈指數增加的現象比較少,偏差消失在BPTT中很常見。在原論文中還有更詳細的數學分析,可是瞭解到此我的覺的已經足夠理解問題所在了。



二.最初的LSTM結構

爲了克服偏差消失的問題,須要作一些限制,先假設僅僅只有一個神經元與本身鏈接,簡圖以下:


根據上面的,t時刻的偏差信號計算以下:


爲了使偏差不產生變化,能夠強制令下式爲1:


根據這個式子,能夠獲得:


這表示激活函數是線性的,經常的令fj(x) = x, wjj = 1.0,這樣就得到常數偏差流了,也叫作CEC。

可是光是這樣是不行的,由於存在輸入輸出處權值更新的衝突(這裏原論文裏面的解釋我不是很明白),因此加上了兩道控制門,分別是input gate, output gate,來解決這個矛盾,圖以下:



圖中增長了兩個控制門,所謂控制的意思就是計算cec的輸入以前,乘以input gate的輸出,計算cec的輸出時,將其結果乘以output gate的輸出,整個方框叫作block, 中間的小圓圈是CEC, 裏面是一條y = x的直線表示該神經元的激活函數是線性的,自鏈接的權重爲1.0


三.增長forget gate


最初lstm結構的一個缺點就是cec的狀態值可能會一直增大下去,增長forget gate後,能夠對cec的狀態進行控制,它的結構以下圖:


這裏的至關於自鏈接權重再也不是1.0,而是一個動態的值,這個動態值是forget gate的輸出值,它能夠控制cec的狀態值,在必要時使之爲0,即忘記做用,爲1時和原來的結構同樣。

四.增長Peephole的LSTM結構


上面增長遺忘門一個缺點是當前CEC的狀態不能影響到input gate, forget gate在下一時刻的輸出,因此增長了Peephole connections。結構以下:

這裏的gate的輸入部分就多加了一個來源了,forget gate, input gate的輸入來源增長了cec前一時刻的輸出,output gate的輸入來源增長了cec當前時刻的輸出,另外計算的順序也必須保證以下:
  1. input gate, forget gate的輸入輸出
  2. cell的輸入
  3. output gate的輸入輸出
  4. cell的輸出(這裏也是block的輸出)

五.一個LSTM的FULL BPTT推導(用偏差信號)

我記得當時看論文公式推導的時候不少地方比較難理解,最後隨便谷歌了幾下,找到一個寫的不錯的相似課件的PDF,可是已經不知道出處了,很容易就看懂LSTM的前向計算,偏差反傳更新了。把其中關於LSTM的部分放上來,首先網絡的完整結構圖以下:


這個結構也是rwthlm源碼包中LSTM的結構,下面看一下公式的記號:
  • wij表示從神經元i到j的鏈接權重(注意這和不少論文的表示是反着的)
  • 神經元的輸入用a表示,輸出用b表示
  • 下標 ι, φ 和 ω分別表示input gate, forget gate,output gate 
  • c下標表示cell,從cell到 input, forget和output gatepeephole權重分別記作  wcι , wcφ and wcω
  • Sc表示cell c的狀態
  • 控制門的激活函數用f表示,g,h分別表示cell的輸入輸出激活函數
  • I表示輸入層的神經元的個數,K是輸出層的神經元個數,H是隱層cell的個數
前向的計算:

偏差反傳更新: