李宏毅機器學習課程筆記-9.5詳解基於LSTM的RNN

1層LSTM神經元的架構

根據上述內容,你可能看不出LSTM與RNN有什麼關係,接下來具體介紹LSTM在RNN中的應用。

假設我們現在有一些LSTM(下圖中白色部分)作爲神經元,每個LSTM的memory cell裏都存了一個scalar值(下圖中紅框中內容),把這些scalar連接起來就組成了1個vector \(c^{t-1}\),即關於上個input(時間點爲t-1)的memory。

img

在時間點t,輸入爲1個vector \(x^t\),它會經過4個線性的transform得到\(z^f,z^i,z,z^o\)\(z^f,z^i,z,z^o\)這4個vector的dimension數量和LSTM神經元的數量相等,這4個vector的1個dimension即爲1個LSTM神經元的輸入(4個vector的第1個dimension爲第1個LSTM神經元的輸入)。

1個LSTM神經元的運算方法

下圖是單個LSTM神經元的運算方法,其4個input分別是\(z\)\(z^i\)\(z^f\)\(z^o\)的其中1維(1維爲1個神經元的輸入)。每個LSTM神經元的input是各不相同的,但它們可以共同運算。

1個LSTM神經元的運算方法如下圖所示。

img

\(f(z^f)\)與上一個時間點的memory \(c^{t-1}\)對應的cell值相乘,加上\(g(z)\)\(f(z^i)\)的乘積,得到該時刻該cell中的值\(c^t\),最終再乘以output gate的信號\(f(z^o)\),得到輸出\(y^t\)

1個LSTM神經元在相鄰時刻時的運算方法

img

上圖是同1個LSTM神經元在2個相鄰時刻的運算方法,其中與前文描述略有不同的是,這裏還需要把當前時刻該神經元的輸出\(y^t\)以及該神經元中cell保存的值\(c^t\)(peephole)都連接到下一時刻的輸入上。因此在\(t+1\)時刻,神經元不只是考慮當前的輸入\(x^{t+1}\),還要看前一時刻該神經元的輸出\(h^t\)和cell保存值\(c^t\)

如何考慮結合\(t+1\)時刻的輸入\(x^{t+1}\)和上一時刻該神經元的信息\(h^t,c^t\)呢?====>\(x^{t+1}\)\(h^t\)\(c^t\)這3個vector並在一起,乘上4個不同的轉換矩陣,得到該神經元\(t+1\)時刻的4個輸入\(z\)\(z^i\)\(z^f\)\(z^o\)

多層LSTM在相鄰時刻的運算方法

img

上圖中左邊一列的2個LSTM代表2層LSTM,右邊一列的2個LSTM則代表它們在下一時刻的狀態。即橫向是時間軸,縱向是層軸。

雖然看起來很複雜,感覺不一定work,但LSTM在RNN中已成爲了標準做法。


Github(github.com):@chouxianyu

Github Pages(github.io):@臭鹹魚

知乎(zhihu.com):@臭鹹魚

博客園(cnblogs.com):@臭鹹魚

B站(bilibili.com):@絕版臭鹹魚

微信公衆號:@臭鹹魚

轉載請註明出處,歡迎討論和交流!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章