1. 程式人生 > >深入理解LSTM神經網路

深入理解LSTM神經網路

LSTM核心思想

LSTM最早由 Hochreiter & Schmidhuber 在1997年提出,設計初衷是希望能夠解決神經網路中的長期依賴問題,讓記住長期資訊成為神經網路的預設行為,而不是需要很大力氣才能學會。

LSTM記憶單元

LSTM-RNN展開圖

圖例

下面是對LSTM單元內各部分的理解:

LSTM的關鍵是單元狀態(cell state),即圖中LSTM單元上方從左貫穿到右的水平線,它像是傳送帶一樣,將資訊從上一個單元傳遞到下一個單元,和其他部分只有很少的線性的相互作用。
這裡寫圖片描述

LSTM通過“門”(gate)來控制丟棄或者增加資訊,從而實現遺忘或記憶的功能。“門”是一種使資訊選擇性通過的結構,由一個sigmoid函式和一個點乘操作組成。sigmoid函式的輸出值在[0,1]區間,0代表完全丟棄,1代表完全通過。一個LSTM單元有三個這樣的門,分別是遺忘門(forget gate)、輸入門(input gate)、輸出門(output gate)

門(gate)

  • 遺忘門(forget gate):遺忘門是以上一單元的輸出ht1和本單元的輸入xt為輸入的sigmoid函式,為Ct1中的每一項產生一個在[0,1]內的值,來控制上一單元狀態被遺忘的程度。
    遺忘門(forget gate)
  • 輸入門(input gate):輸入門和一個tanh函式配合控制有哪些新資訊被加入。tanh函式產生一個新的候選向量Ct~,輸入門為Ct~中的每一項產生一個在[0,1]內的值,控制新資訊被加入的多少。至此,我們已經有了遺忘門的輸出ft,用來控制上一單元被遺忘的程度,也有了輸入門的輸出it,用來控制新資訊被加入的多少,我們就可以更新本記憶單元的單元狀態了,Ct=ftCt1+itCt~
    輸入門(input gate)
  • 輸出門(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)