递归神经网络变形之 (Long Short Term Memory,LSTM)
1、長短期記憶網(wǎng)絡(luò)LSTM簡介
在RNN 計算中,講到對于傳統(tǒng)RNN水平方向進行長時刻序列依賴時可能會出現(xiàn)梯度消失或者梯度爆炸的問題。LSTM 特別適合解決這種需要長時間依賴的問題。
LSTM(Long Short Term Memory,長短期記憶網(wǎng)絡(luò))是RNN的一種,大體結(jié)構(gòu)一直,區(qū)別在于:
- LSTM 的‘記憶cell’ 是被改造過的,水平方向減少梯度消失與梯度爆炸
- 該記錄的信息會一直傳遞,不該記錄的信息會被截斷掉,部分輸出和輸入被從網(wǎng)絡(luò)中刪除
RNN 在語音識別,語言建模,翻譯,圖片描述等問題的應(yīng)用的成功,都是通過 LSTM 達到的。
2、LSTM工作原理
2.1、傳統(tǒng)的RNN“細胞”結(jié)構(gòu)
所有 RNN 都具有一種重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈式的形式。在標準的 RNN 中,這個重復(fù)的模塊只有一個非常簡單的結(jié)構(gòu),例如一個 tanh 層。
2.2、LSTM結(jié)構(gòu)
如下圖展示了LSTM的一個神經(jīng)元內(nèi)部的結(jié)構(gòu)。單一神經(jīng)網(wǎng)絡(luò)層,這里是有四個,以一種非常特殊的方式進行交互。
?
圖中使用的各種元素的圖標:
- 每一條黑線傳輸著一整個向量,從一個節(jié)點的輸出到其他節(jié)點的輸入。合在一起的線表示向量的連接,比如一個十維向量和一個二十維向量合并后形成一個三十維向量;分開的線表示內(nèi)容被復(fù)制,然后分發(fā)到不同的位置。
- 粉色的圈代表 pointwise 的操作,諸如向量的加法,減法,乘法,除法,都是矩陣的。
- 黃色的矩陣就是神經(jīng)網(wǎng)絡(luò)層。
2.3、細胞狀態(tài)
LSTM關(guān)鍵:“細胞狀態(tài)” 。細胞狀態(tài)類似于傳送帶。直接在整個鏈上運行,只有一些少量的線性交互。信息在上面流傳保持不變很容易。
LSTM怎么控制“細胞狀態(tài)”?
- LSTM可以通過gates(“門”)結(jié)構(gòu)來去除或者增加“細胞狀態(tài)”的信息
- 包含一個sigmoid神經(jīng)網(wǎng)絡(luò)層次和一個pointwist乘法操作
- Sigmoid層輸出一個0到1之間的概率值,描述每個部分有多少量可以通過,0表示“不允 許任務(wù)變量通過”,1表示“運行所有變量通過”
- LSTM中主要有三個“門”結(jié)構(gòu)來控制“細胞狀態(tài)”
- ?和??矩陣的shape 是一樣的
忘記門
決定從“細胞狀態(tài)”中丟棄什么信息;比如在語言模型中,細胞狀態(tài)可能包含了性別信息(“他”或者“她”),當我們看到新的代名詞的時候,可以考慮忘記舊的數(shù)據(jù)
信息增加門
- 決定放什么新信息到“細胞狀態(tài)”中;
- Sigmoid層決定什么值需要更新;?
- Tanh層創(chuàng)建一個新的候選向量;
- 主要是為了狀態(tài)更新做準備
經(jīng)過第一個和第二個“門”后,可以確定傳遞信息的刪除和增加,即可以進行 “細胞狀態(tài)”的更新
- 更新為;
- 將舊狀態(tài)與相乘,丟失掉確定不要的信息;
- 加上新的候選值得到最終更新后的“細胞狀態(tài)”
輸出門
- 首先運行一個sigmoid網(wǎng)絡(luò)層來確定細胞狀態(tài)的那個部分將輸出
- 使用tanh處理細胞狀態(tài)得到一個-1到1之間的值,再將它和sigmoid門的輸出相乘,輸出程序確定輸出的部分。
- 前向傳播和反向傳播可以參看前面的傳播過程寫下來,更新LSTM中的參數(shù)。具體的公式可以參看:https://blog.csdn.net/Dark_Scope/article/details/47056361
- 作者的論文:https://arxiv.org/pdf/1402.1128v1.pdf
2.4、 前向傳播和后向傳播
前向傳播
現(xiàn)在我們來總結(jié)下LSTM前向傳播算法。LSTM模型有兩個隱藏狀態(tài),模型參數(shù)幾乎是RNN的4倍,因為現(xiàn)在多了這些參數(shù)。
前向傳播過程在每個序列索引位置的過程為:
1)更新遺忘門輸出:
2)更新輸入門兩部分輸出:
?
3)更新細胞狀態(tài):
4)更新輸出門輸出:
5)更新當前序列索引預(yù)測輸出:
整體的過程如下圖所示
可以看到,在t tt時刻,用于計算和。
反向傳播
有了LSTM前向傳播算法,推導(dǎo)反向傳播算法就很容易了, 思路和RNN的反向傳播算法思路一致,也是通過梯度下降法迭代更新我們所有的參數(shù),關(guān)鍵點在于計算所有參數(shù)基于損失函數(shù)的偏導(dǎo)數(shù)。
在RNN中,為了反向傳播誤差,我們通過隱藏狀態(tài)的梯度一步步向前傳播。在LSTM這里也類似。只不過我們這里有兩個隱藏狀態(tài)和。這里我們定義兩個,即:
反向傳播時只使用了,變量僅為幫助我們在某一層計算用,并沒有參與反向傳播,這里要注意。如下圖所示:
因為,我們在輸出層定義的損失函數(shù)為對數(shù)損失,激活函數(shù)為softmax激活函數(shù)。因為,與RNN的推導(dǎo)類似,在最后的序列索引位置?的和為:
接著我們由反向推導(dǎo)。
的梯度由本層的輸出梯度誤差決定,與公式(10)類似,即:
而?的反向梯度誤差由前一層?的梯度誤差和本層的從傳回來的梯度誤差兩部分組成,即:
公式(13)的前半部分由公式(4)和公式(9)得到,公式(13)的后半部分由公式(6)和公式(8)得到。
有了和, 計算這一大堆參數(shù)的梯度就很容易了,這里只給出?的梯度計算過程,其他的的梯度大家只要照搬就可以了。
公式(13)的由公式(1)、公式(4)和公式(9)得到。
由上面可以得到,只要我們清晰地搞清楚前向傳播過程,且只使用了?進行反向傳播的話,反向傳播的整個過程是比較清晰的。
在這里有必要解釋下為什么反向傳播不使用?,如果與循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)模型的前向反向傳播算法里一樣的話,那么的計算方式就不應(yīng)該是(12)式了
因為,參與了和的計算,所以在RNN文章里的求梯度方法,?應(yīng)該是
但是,這里是一個比較復(fù)雜的時序模型,如果使用RNN的思路,將的部分也一起反向傳播回來的話,這里的反向梯度根本無法得到閉式解。而只考慮一個的話,也可以做反向梯度優(yōu)化,進度下降,但是優(yōu)化起來容易的多,可以理解為這里做了一個近似。
3、另一種理解方式
圖中方框我們稱為記憶單元,其中實線箭頭代表當前時刻的信息傳遞,虛線箭頭表示上一時刻的信息傳遞。從結(jié)構(gòu)圖中我們看出,LSTM模型共增加了三個門:?輸入門、遺忘門和輸出門。進入block的箭頭代表輸入,而出去的箭頭代表輸出。
前向傳播公式
上圖中所有帶h的權(quán)重矩陣均代表一種泛指,為LSTM的各種變種做準備,表示任意一條從上一時刻指向當前時刻的邊,本文暫不考慮。與上篇公式類似,a代表匯集計算結(jié)果,b代表激活計算結(jié)果,?Wil代表輸入數(shù)據(jù)與輸入門之間的權(quán)重矩陣,?Wcl代表上一時刻Cell狀態(tài)與輸入門之間的權(quán)重矩陣,?WiΦ代表輸入數(shù)據(jù)與遺忘門之間的權(quán)重矩陣,?WcΦ代表上一時刻Cell狀態(tài)與遺忘門之間的權(quán)重矩陣,?Wiω代表輸入數(shù)據(jù)與輸出門之間的權(quán)重矩陣,?Wcω代表Cell狀態(tài)與輸出門之間的權(quán)重矩陣,?Wic代表輸入層原有的權(quán)重矩陣。?需要注意的是,圖中Cell一欄描述的是從下方輸入到中間Cell輸出的整個傳播過程。
反向傳播
和樸素RNN的推導(dǎo)一樣,有了前向傳播公式,我們就能逐個寫出LSTM網(wǎng)絡(luò)中各個參數(shù)矩陣的梯度計算公式。首先,由于輸出門不牽扯時間維度,我們可以直接寫出輸出門Wiω和Wcω的迭代公式,如下圖:
遺忘門的權(quán)重矩陣?WiΦ也可以直接給出,如下圖:
而對于遺忘門的權(quán)重矩陣?WcΦ,由于是和上一時刻Cell狀態(tài)做匯集計算,殘差除了來自當前Cell,還來自下一時刻的Cell,因此需要寫出下一時刻Cell傳播至本時刻遺忘門的時間維度前向傳播公式,如下圖:
有了上面的公式,我們就能完整寫出?WcΦ的梯度公式了。如下圖所示(如果對這個時間維度前向公式不理解,可以參考上一篇我對樸素RNN的公式推導(dǎo)過程):
請注意,上圖中L”和前面的L’不一樣,這里只是為了式子簡潔。
推完遺忘門公式,就可以此類推輸入門與Cell的公式。其中輸入門基本與遺忘門的推法一樣,殘差都是來自本時刻和下一時刻Cell。而Cell的殘差則來自三個地方:輸出層、輸出門和下一時刻Cell。其中輸出層和輸出門殘差可直接寫出;而下一時刻Cell的殘差,我們只要寫出對應(yīng)的時間維度前向傳播公式便可寫出。由于時間關(guān)系,這里就不詳細推導(dǎo)遺忘門和Cell的梯度公式了,各位若有興趣可自行繼續(xù)推導(dǎo)。
相比于樸素RNN模型,LSTM模型更為復(fù)雜,且可調(diào)整和變化的地方也更多。比如:增加peephole將Cell狀態(tài)連接到每個門,變體模型Gated Recurrent Unit (GRU),以及后面出現(xiàn)的Attention模型等。LSTM模型在語音識別、圖像識別、手寫識別、以及預(yù)測疾病、點擊率和股票等眾多領(lǐng)域中都發(fā)揮著驚人的效果,是目前最火的神經(jīng)網(wǎng)絡(luò)模型之一。敬請期待下節(jié)。
4、LSTM 的變體
我們到目前為止都還在介紹正常的 LSTM。但是不是所有的 LSTM 都長成一個樣子的。實際上,幾乎所有包含 LSTM 的論文都采用了微小的變體。差異非常小,目前為止有上百種,常用的也就幾種。 其中一個流形的 LSTM 變體,就是由 Gers & Schmidhuber (2000) 提出的,
4.1、變種1
- 增加了 “peephole connection”層。
- 讓門層也會接受細胞狀態(tài)的輸入。
4.2、變種2
通過耦合忘記門和更新輸入門(第一個和第二個門);也就是不再單獨的考慮忘記什么、增 加什么信息,而是一起進行考慮。
4.3、Gated Recurrent Unit(GRU),2014年提出
- 將忘記門和輸入門合并成為一個單一的更新門
- 同時合并了數(shù)據(jù)單元狀態(tài)和隱藏狀態(tài)
- 結(jié)構(gòu)比LSTM的結(jié)構(gòu)更加簡單
4.4、https://arxiv.org/pdf/1402.1128v1.pdf?論文
論文中定義的 LTSM cell 如下圖所示:
圖示
?
所以像論文里指出的,這里實現(xiàn)的 LSTM Cell 含有更多參數(shù),效果更好?
一般的 LSTM 就夠用了,GRU 用的也比較多。
參考
- LSTM Forward and Backward Pass
- Understanding LSTM Networks
- https://arxiv.org/pdf/1402.1128v1.pdf
?
總結(jié)
以上是生活随笔為你收集整理的递归神经网络变形之 (Long Short Term Memory,LSTM)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 感谢杨中科老师
- 下一篇: 怎么自己制作一个U盘