深入理解LSTM神经网络
本文內容及圖片主要參考:Understanding LSTM Networks
LSTM核心思想
LSTM最早由 Hochreiter & Schmidhuber 在1997年提出,設計初衷是希望能夠解決神經網絡中的長期依賴問題,讓記住長期信息成為神經網絡的默認行為,而不是需要很大力氣才能學會。
LSTM記憶單元
下面是對LSTM單元內各部分的理解:
LSTM的關鍵是單元狀態(cell state),即圖中LSTM單元上方從左貫穿到右的水平線,它像是傳送帶一樣,將信息從上一個單元傳遞到下一個單元,和其他部分只有很少的線性的相互作用。
LSTM通過“門”(gate)來控制丟棄或者增加信息,從而實現遺忘或記憶的功能。“門”是一種使信息選擇性通過的結構,由一個sigmoid函數和一個點乘操作組成。sigmoid函數的輸出值在[0,1]區間,0代表完全丟棄,1代表完全通過。一個LSTM單元有三個這樣的門,分別是遺忘門(forget gate)、輸入門(input gate)、輸出門(output gate)。
- 遺忘門(forget gate):遺忘門是以上一單元的輸出ht?1和本單元的輸入xt為輸入的sigmoid函數,為Ct?1中的每一項產生一個在[0,1]內的值,來控制上一單元狀態被遺忘的程度。
- 輸入門(input gate):輸入門和一個tanh函數配合控制有哪些新信息被加入。tanh函數產生一個新的候選向量Ct~,輸入門為Ct~中的每一項產生一個在[0,1]內的值,控制新信息被加入的多少。至此,我們已經有了遺忘門的輸出ft,用來控制上一單元被遺忘的程度,也有了輸入門的輸出it,用來控制新信息被加入的多少,我們就可以更新本記憶單元的單元狀態了,Ct=ft?Ct?1+it?Ct~。
- 輸出門(output gate):輸出門用來控制當前的單元狀態有多少被過濾掉。先將單元狀態激活,輸出門為其中每一項產生一個在[0,1]內的值,控制單元狀態被過濾的程度。
LSTM變種
上面描述的LSTM是一種標準版本,并不是所有LSTM都和上面描述的一模一樣。事實上,似乎每篇論文用到的LSTM都有一點細微的不同。
一種比較流行的LSTM變種如下圖所示,最早由Gers & Schmidhuber在2000年提出。這種方法增加了“peephole connections”,即每個門都可以“窺探”到單元狀態。這里,遺忘門和輸入門是與上一單元狀態建立連接,而輸出門是與當前單元狀態建立連接。
有一個變種取消了輸入門,將新信息加入的多少與舊狀態保留的多少設為互補的兩個值(和為1),即:只有當需要加入新信息時,我們才會去遺忘;只有當需要遺忘時,我們才會加入新信息。
另外一個值得關注的變種看起來很好玩,叫做Gated Recurrent Unit(GRU),最早由Cho, et al.在2014年提出。這種方法將遺忘門和輸入門連入了一個“更新門”(update gate),同時也合并了隱藏狀態ht和單元狀態Ct,最終的結果比標準LSTM簡單一些。
當然,變種有很多,是列不過來的。有人專門比較總結過LSTM的變種,并比較了其效果,結果顯示這些變種表現差不多,具體參見Greff, et al. (2015)及Jozefowicz, et al. (2015)。
總結
以上是生活随笔為你收集整理的深入理解LSTM神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java web开发之 spring单元
- 下一篇: 谷粒商城--API--三级分类--拖拽判