前段時間看了一些關於LSTM方面的論文,一直準備記錄一下學習過程的,由於其餘事兒,一直拖到了如今,記憶又快模糊了。如今趕忙補上,本文的組織安排是這樣的:先介紹rnn的BPTT所存在的問題,而後介紹最初的LSTM結構,在介紹加了遺忘控制門的,而後是加了peephole connections結構的LSTM,都是按照真實提出的時間順序來寫的。本文至關於把各個論文核心部分簡要聚集一下而作的筆記,已提供快速的瞭解。算法
先看一下比較典型的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中很常見。在原論文中還有更詳細的數學分析,可是瞭解到此我的覺的已經足夠理解問題所在了。
爲了克服偏差消失的問題,須要作一些限制,先假設僅僅只有一個神經元與本身鏈接,簡圖以下:
根據上面的,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