深入理解LSTM神經網路
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),同時也合併了隱藏狀態
當然,變種有很多,是列不過來的。有人專門比較總結過LSTM的變種,並比較了其效果,結果顯示這些變種表現差不多,具體參見Greff, et al. (2015)及Jozefowicz, et al. (2015)。