1. 什么是LSTM
在你閱讀這篇文章時候,你都是基于自己已經(jīng)擁有的對先前所見詞的理解來推斷當前詞的真實含義。我們不會將所有的東西都全部丟棄,然后用空白的大腦進行思考。我們的思想擁有持久性。LSTM就是具備了這一特性。
這篇將介紹另?種常?的?控循環(huán)神經(jīng)?絡(luò):?短期記憶(long short-term memory,LSTM)[1]。它??控循環(huán)單元的結(jié)構(gòu)稍微復雜?點,也是為了解決在RNN網(wǎng)絡(luò)中梯度衰減的問題,是GRU的一種擴展。
長時間的短期記憶網(wǎng)絡(luò)(Long Short-Term Memory Networks),很多地方翻譯為長短期記憶網(wǎng)絡(luò),給人一種歧義,以為是網(wǎng)絡(luò)一會兒能記很長的內(nèi)容,一會兒能記很短的內(nèi)容,但其實正確的翻譯應該是長時間的短期記憶網(wǎng)絡(luò)。它的本質(zhì)就是能夠記住很長時期內(nèi)的信息。

可以先理解GRU的過程,在來理解LSTM會容易許多,鏈接地址:三步理解--門控循環(huán)單元(GRU)
LSTM 中引?了3個?,即輸??(input gate)、遺忘?(forget gate)和輸出?(output gate),以及與隱藏狀態(tài)形狀相同的記憶細胞(某些?獻把記憶細胞當成?種特殊的隱藏狀態(tài)),從而記錄額外的信息。
2. 輸入門、遺忘門和輸出門
與?控循環(huán)單元中的重置?和更新??樣,?短期記憶的?的輸?均為當前時間步輸?與上?時間步隱藏狀態(tài)
,輸出由激活函數(shù)為sigmoid函數(shù)的全連接層計算得到。如此?來,這3個?元素的值域均為[0, 1]。如下圖所示:

具體來說,假設(shè)隱藏單元個數(shù)為,給定時間步
的小批量輸入
(樣本數(shù)為n,輸入個數(shù)為d)和上一時間步隱藏狀態(tài)
。三個門的公式如下:

3. 候選記憶細胞
接下來,長短期記憶需要計算候選記憶細胞,它的計算與上面三個門類似,但使用了值域在[-1,1]的tanh函數(shù)作為激活函數(shù),如下圖所示:

具體來說,時間步t的候選記憶細胞計算如下:
4.記憶細胞
我們可以通過元素值域在[0, 1]的輸??、遺忘?和輸出?來控制隱藏狀態(tài)中信息的流動,這?般也是通過使?按元素乘法(符號為)來實現(xiàn)的。當前時間步記憶細胞
的計算組合了上?時間步記憶細胞和當前時間步候選記憶細胞的信息,并通過遺忘?和輸??來控制信息的流動:
如下圖所?,遺忘?控制上?時間步的記憶細胞中的信息是否傳遞到當前時間步,而輸??則控制當前時間步的輸?
通過候選記憶細胞
如何流?當前時間步的記憶細胞。如果遺忘??直近似1且輸???直近似0,過去的記憶細胞將?直通過時間保存并傳遞?當前時間步。這個設(shè)計可以應對循環(huán)神經(jīng)?絡(luò)中的梯度衰減問題,并更好地捕捉時間序列中時間步距離較?的依賴關(guān)系。

5.隱藏狀態(tài)
有了記憶細胞以后,接下來我們還可以通過輸出?來控制從記憶細胞到隱藏狀態(tài)Ht的信
息的流動:
這?的tanh函數(shù)確保隱藏狀態(tài)元素值在-1到1之間。需要注意的是,當輸出?近似1時,記憶細胞信息將傳遞到隱藏狀態(tài)供輸出層使?;當輸出?近似0時,記憶細胞信息只??保留。下圖展?了?短期記憶中隱藏狀態(tài)的全部計算:

6. LSTM與GRU的區(qū)別
LSTM與GRU二者結(jié)構(gòu)十分相似,不同在于:
- 新的記憶都是根據(jù)之前狀態(tài)及輸入進行計算,但是GRU中有一個重置門控制之前狀態(tài)的進入量,而在LSTM里沒有類似門(其實輸入門也有這個意思);
- 產(chǎn)生新的狀態(tài)方式不同,LSTM有兩個不同的門,分別是遺忘門(forget gate)和輸入門(input gate),而GRU只有一種更新門(update gate);
- LSTM對新產(chǎn)生的狀態(tài)可以通過輸出門(output gate)進行調(diào)節(jié),而GRU對輸出無任何調(diào)節(jié)。
- GRU的優(yōu)點是這是個更加簡單的模型,所以更容易創(chuàng)建一個更大的網(wǎng)絡(luò),而且它只有兩個門,在計算性能上也運行得更快,然后它可以擴大模型的規(guī)模。
- LSTM更加強大和靈活,因為它有三個門而不是兩個。
7. LSTM可以使用別的激活函數(shù)嗎?
關(guān)于激活函數(shù)的選取,在LSTM中,遺忘門、輸入門和輸出門使用Sigmoid函數(shù)作為激活函數(shù);在生成候選記憶時,使用雙曲正切函數(shù)Tanh作為激活函數(shù)。
值得注意的是,這兩個激活函數(shù)都是飽和的,也就是說在輸入達到一定值的情況下,輸出就不會發(fā)生明顯變化了。如果是用非飽和的激活函數(shù),例如ReLU,那么將難以實現(xiàn)門控的效果。
Sigmoid函數(shù)的輸出在0~1之間,符合門控的物理定義。且當輸入較大或較小時,其輸出會非常接近1或0,從而保證該門開或關(guān)。在生成候選記憶時,使用Tanh函數(shù),是因為其輸出在?1~1之間,這與大多數(shù)場景下特征分布是0中心的吻合。此外,Tanh函數(shù)在輸入為0附近相比Sigmoid函數(shù)有更大的梯度,通常使模型收斂更快。
激活函數(shù)的選擇也不是一成不變的,但要選擇合理的激活函數(shù)。