LSTM(Long Short Term Memory networks)被稱爲長短期記憶模型,是一種比較特殊的循環神經網絡,其基本結構和基本思路與RNN一樣。關於模型,我們都知道LSTM有解決長依賴問題的能力,這是區別於普通RNN的地方。本篇將總結LSTM及其相關變體。
循環神經網絡RNN 1—— 基本模型及其變體
循環神經網絡RNN 2—— attention注意力機制(附代碼)
循環神經網絡RNN 3——LSTM及其變體
目錄
1,LSTM概述
所有循環神經網絡都具有神經網絡的重複模塊鏈的形式。 在標準的RNN中,該重複模塊將具有非常簡單的結構,例如單個tanh層。標準的RNN網絡如下圖所示:
LSTMs也具有這種鏈式結構,但是它的重複單元不同於標準RNN網絡裏的單元只有一個網絡層,它的內部有四個網絡層。LSTMs的結構如下圖所示:
很多人問,爲什麼開發者知道這種結構就能有這樣的效果呢?其實,很多時候是有了這種效果然後解釋這種結構,能達到這種效果的結構有很多,不止一種,當然LSTM的效果是經得住考驗的,但是現在逐漸發展的transform結構已經逐漸有替代LSTM的趨勢。
2,剖析LSTM
2.1 細胞狀態
LSTMs的核心是細胞狀態,用貫穿細胞的水平線表示。細胞狀態像傳送帶一樣。它貫穿整個細胞卻只有很少的分支,這樣能保證信息不變的流過整個RNNs。細胞狀態如下圖所示:
LSTM網絡能通過一種被稱爲門的結構對細胞狀態進行刪除或者添加信息,總的來說還是比較好理解的,以細胞狀態爲軸,將每個time-step的信息進行過濾處理,添加到細胞狀態中,過濾就包括刪除和添加,由三個門來控制,這三個門分別稱爲忘記門、輸入門和輸出門。
2.2 忘記信息
LSTM的第一步就是決定細胞狀態需要丟棄哪些信息。這部分操作是通過一個稱爲忘記門的sigmoid單元來處理的。它通過查看和信息來輸出一個0-1之間的向量,該向量裏面的0-1值表示細胞狀態中的哪些信息保留或丟棄多少,0表示不保留,1表示都保留。
2.3 添加信息
下一步是決定給細胞狀態添加哪些新的信息。這一步又分爲兩個步驟,首先,利用和通過一個稱爲輸入門的操作來決定更新哪些信息。然後利用和通過一個tanh層得到新的候選細胞信息,這些信息可能會被更新到細胞信息中。這兩步描述如下圖所示 。
2.4 更新細胞狀態
下面將更新舊的細胞信息,變爲新的細胞信息。更新的規則就是通過忘記門選擇忘記舊細胞信息的一部分,通過輸入門選擇添加候選細胞信息的一部分得到新的細胞信息。更新操作如下圖所示:
2.5 輸出細胞狀態
更新完細胞狀態後需要根據輸入的和來判斷輸出細胞的哪些狀態特徵,這裏需要將輸入經過一個稱爲輸出門的sigmoid層得到判斷條件,然後將細胞狀態經過tanh層得到一個-1~1之間值的向量,該向量與輸出門得到的判斷條件相乘就得到了最終該RNN單元的輸出。該步驟如下圖所示
3, LSTM反向傳播
與RNN一樣,我們通過隱藏狀態的梯度一步步向前反向傳播,只不過LSTM有兩個隱藏狀態,,LSTM中所有的參數要經過這兩個狀態,只要這兩個隱藏狀態的導數計算出來,相應的等參數就很好計算了。這裏我們以h爲例做簡單推導。
爲了方便表示,我們將損失函數表示爲兩部分,一部分是位置t的損失函數,另一部分是位置t+1的損失函數。
對於序列結尾的位置:
其他時間位置要多加一項:
至於C的求導要更加複雜一些,有興趣的可以參考文末的資料。有了兩個隱藏變量的導數,就可以根據前向公式進行參數求導了。
4, LSTM注意事項
1)首先需要明確的是,RNN 中的梯度消失/梯度爆炸和普通的 MLP 或者深層 CNN 中梯度消失/梯度爆炸的含義不一樣。MLP/CNN 中不同的層有不同的參數,各是各的梯度;而 RNN 中同樣的權重在各個時間步共享,最終的梯度 .
2)由 1 中所述的原因,RNN 中總的梯度是不會消失的。即便梯度越傳越弱,那也只是遠距離的梯度消失,由於近距離的梯度不會消失,所有梯度之和便不會消失。RNN 所謂梯度消失的真正含義是,梯度被近距離梯度主導,導致模型難以學到遠距離的依賴關係。
3)LSTM 中梯度的傳播有很多條路徑,細胞狀態C 這條路徑上只有逐元素相乘和相加的操作,梯度流最穩定;但是其他路徑(上梯度流與普通 RNN 類似,照樣會發生相同的權重矩陣反覆連乘。
4)LSTM 剛提出時沒有遺忘門,或者說相當於 ,這時候在直接相連的短路路徑上,從而這條路徑上的梯度暢通無阻,不會消失。類似於 ResNet 中的殘差連接。
5)同樣,因爲總的遠距離梯度 = 各條路徑的遠距離梯度之和,高速公路上梯度流比較穩定,但其他路徑上梯度有可能爆炸,此時總的遠距離梯度 = 正常梯度 + 爆炸梯度 = 爆炸梯度,因此 LSTM 仍然有可能發生梯度爆炸。不過,由於 LSTM 的其他路徑非常崎嶇,和普通 RNN 相比多經過了很多次激活函數(導數都小於 1),因此 LSTM 發生梯度爆炸的頻率要低得多。實踐中梯度爆炸一般通過梯度裁剪來解決。
5, LSTM變體
5.1 peephole connections
Peephole是窺視的意思,意圖也很明顯,就是將細胞狀態信息傳遞給各個門,讓其能窺視到細胞狀態。
5.2 引入耦合(GRU)
我們熟知的就是GRU,將忘記門和輸入門合併成一個新的門,稱爲更新門。GRU還有一個門稱爲重置門,上圖中前面那個門,決定了如何將新的輸入信息與前面的記憶相結合。
6, biLSTM
爲什麼會有雙向LSTM?原因很簡單,單項LSTM信息量不夠,例如:
“我今天不舒服,我打算____一天。”
只根據‘不舒服‘,可能推出我打算‘去醫院‘,‘睡覺‘,‘請假‘等等,但如果加上後面的‘一天‘,能選擇的範圍就變小了,‘去醫院‘這種就不能選了,而‘請假‘‘休息‘之類的被選擇概率就會更大。
而雙向計算的思路也很簡單,從前往後計算一遍,然後從後往前再計算一遍,得到的特徵維度要比lstm多一倍
7, LSTM總結
回顧一下,LSTM的過程,LSTM與RNN一樣是重複模塊鏈式結構,我們把每個模塊看做細胞,其中貫穿所有細胞的爲細胞狀態,起到保留有效信息的左右,對於每個細胞狀態,根據當前輸入和前一時刻的輸入,分別計算需要忘記和保留的細胞信息,並把這些信息添加到細胞狀態中,然後再根據當前輸入計算細胞狀態輸出。
LSTM 之所以能夠實現長時記憶而不會形成遠距離梯度衰減,是因爲有細胞狀態這條高速通道。
參考文獻
https://www.cnblogs.com/pinard/p/6519110.html
https://www.zhihu.com/question/34878706