深度学习之循环神经网络(8)长短时记忆网络(LSTM)
深度學習之循環神經網絡(8)長短時記憶網絡(LSTM)
- 0. LSTM原理
- 1. 遺忘門
- 2. 輸入門
- 3. 刷新Memory
- 4. 輸出門
- 5. 小結
?循環神經網絡除了訓練困難,還有一個更嚴重的問題,那就是 短時記憶(Short-term memory)。考慮一個長句子:
今天天氣太美好了,盡管路上發生了一件不愉快的事,…,我馬上調整好狀態,開開心心地準備迎接美好的一天。
根據我們的理解,之所以能夠“ 開開心心地準備迎接美好的一天”,在于句子最開始處點明了“ 今天天氣太美好了”。可見人類是能夠很好地理解長句子的,但是循環神經網絡卻不一定。研究人員發現,循環神經網絡在處理較長的句子時,往往只能夠理解有限長度內的信息,而對于位于較長范圍內的有用信息往往不能很好地利用起來。我們把這種現象叫做短時記憶。
?那么,能不能夠延長這種短時記憶,使得循環神經網絡可以有效利用較大范圍內的訓練數據,從而提升性能呢?1997年,瑞士人工智能科學家J u¨\ddot{\text{u}}u¨rgen Schmidhuber 提出了 長短時記憶網絡(Long Short-Term Memory,簡稱LSTM)。LSTM相對于基礎的RNN網絡來說,記憶能力更強,更擅長處理較長的序列信號數據,LSTM提出后,被廣泛應用在序列預測、自然語言處理等任務中,幾乎取代了基礎的RNN模型。
?接下來,我們將介紹更加流行、更加強大的LSTM網絡。
0. LSTM原理
?基礎的RNN網絡結構如下圖所示,上一個時間戳的狀態向量ht?1\boldsymbol h_{t-1}ht?1?與當前時間戳的輸入xt\boldsymbol x_txt?經過線性變換后,通過激活函數tanh\text{tanh}tanh后得到新的狀態向量ht\boldsymbol h_tht?。
相對于基礎的RNN網絡只有一個狀態向量ht\boldsymbol h_tht?,LSTM新增了一個狀態向量ct\boldsymbol c_tct?,同時引入了門控(Gate)機制,通過門控單元來控制信息的遺忘和刷新,如下圖所示:
?在LSTM中,有兩個狀態向量c\boldsymbol cc和h\boldsymbol hh,其中c\boldsymbol cc作為LSTM的內部狀態向量,可以理解為LSTM的內部狀態向量Memory,而h\boldsymbol hh表示LSTM的輸出向量。相對于基礎的RNN來說,LSTM把內部Memory和輸出分開為兩個變量,同時利用三個門控:輸入門(Input Gate)、遺忘門(Forget Gate)和輸出門(Output Gate)來控制內部信息的流動。
?門控機制可以理解為控制數據流通量的一種手段,類比于水閥門:當水閥門全部打開時,水流暢通無阻地通過;當水閥門全部關閉時,水流完全被隔斷。在LSTM中,閥門開合程度利用門控值向量g\boldsymbol gg表示,如下圖所示,通過σ(g)σ(\boldsymbol g)σ(g)激活函數將門控制壓縮到[0,1][0,1][0,1]之間的區間,當σ(g)=0σ(\boldsymbol g)=0σ(g)=0時,門控全部關閉,輸出o=0\boldsymbol o=0o=0;當σ(g)=1σ(\boldsymbol g)=1σ(g)=1時,門控全部打開,輸出o=x\boldsymbol o=\boldsymbol xo=x。通過門控機制可以較好地控制數據的流量程度。
?下面我們分別來介紹三個門控的原理及其作用。
1. 遺忘門
?遺忘門作用于LSTM狀態向量c\boldsymbol cc上面,用于控制上一個時間戳的記憶ct?1\boldsymbol c_{t-1}ct?1?對當前時間戳的影響。遺忘門的控制變量gf\boldsymbol g_fgf?由
gf=σ(Wf[ht?1,xt]+bf)\boldsymbol g_f=σ(\boldsymbol W_f [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_f)gf?=σ(Wf?[ht?1?,xt?]+bf?)
產生,如下圖所示:
?其中Wf\boldsymbol W_fWf?和bf\boldsymbol b_fbf?為遺忘門的參數張量,可由反向傳播算法自動優化,σσσ激活函數,一般使用Sigmoid函數。當門控gf=1\boldsymbol g_f=1gf?=1時,遺忘門全部打開,LSTM接受上一個狀態ct?1\boldsymbol c_{t-1}ct?1?,輸出為0的向量。這也是遺忘門的名字由來。
?經過遺忘門后,LSTM的狀態向量變為gfct?1\boldsymbol g_f \boldsymbol c_{t-1}gf?ct?1?。
2. 輸入門
?輸入門用于控制LSTM對輸入的接收程度。首先通過對當前時間戳的輸入xt\boldsymbol x_txt?和上一個時間戳的輸出ht?1\boldsymbol h_{t-1}ht?1?做非線性變換得到新的輸入向量c~t\tilde{\boldsymbol c}_tc~t?:
c~t=tanh?(Wc[ht?1,xt]+bc)\tilde{\boldsymbol c}_t=\text{tanh}?(\boldsymbol W_c [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_c)c~t?=tanh?(Wc?[ht?1?,xt?]+bc?)
其中Wc\boldsymbol W_cWc?和bc\boldsymbol b_cbc?為輸入門的參數,需要通過反向傳播算法自動優化,tanh\text{tanh}tanh為激活函數,用于將輸入標準化到[?1,1][-1,1][?1,1]區間。c~t\tilde{\boldsymbol c}_tc~t?并不會全部刷新進入LSTM的Memory,而是通過輸入門控制接受輸入的量。輸入門的控制變量同樣來自于輸入xt\boldsymbol x_txt?和輸出ht?1\boldsymbol h_{t-1}ht?1?:
gi=σ(Wi[ht?1,xt]+bi)\boldsymbol g_i=σ(\boldsymbol W_i [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_i)gi?=σ(Wi?[ht?1?,xt?]+bi?)
其中Wi\boldsymbol W_iWi?和bi\boldsymbol b_ibi?為輸入門的參數,需要通過反向傳播算法自動優化,σσσ為激活函數,一般使用Sigmoid函數。輸入門控制變量gi\boldsymbol g_igi?決定了LSTM對當前時間戳的新輸入c~t\tilde{\boldsymbol c}_tc~t?的接受程度:當gi\boldsymbol g_igi?=0時,LSTM不接受任何新的輸入c~t\tilde{\boldsymbol c}_tc~t?;當gi=1\boldsymbol g_i=1gi?=1時,LSTM全部接受新輸入c~t\tilde{\boldsymbol c}_tc~t?,如下圖所示:
?經過輸入門后,待寫入Memory的向量為gic~t\boldsymbol g_i \tilde{\boldsymbol c}_tgi?c~t?。
3. 刷新Memory
?在遺忘門和輸入門的控制下,LSTM有選擇地讀取了上一個時間戳的記憶ct?1\boldsymbol c_{t-1}ct?1?和當前時間戳的新輸入c~t\tilde{\boldsymbol c}_tc~t?,狀態向量ct\boldsymbol c_tct?的刷新方式為:
ct=gic~t+gfct?1\boldsymbol c_t=\boldsymbol g_i \tilde{\boldsymbol c}_t+\boldsymbol g_f \boldsymbol c_{t-1}ct?=gi?c~t?+gf?ct?1?
得到的新狀態向量ct\boldsymbol c_tct?即為當前時間戳的狀態向量。如下圖所示:
4. 輸出門
?LSTM的內部狀態向量ct\boldsymbol c_tct?并不會直接用于輸出,這一點和基礎的RNN不一樣。基礎的RNN網絡的狀態向量h\boldsymbol hh既用于記憶,又用于輸出,所以基礎的RNN可以理解為狀態向量c\boldsymbol cc和輸出向量h\boldsymbol hh是同一個對象。在LSTM內部,狀態向量并不會全部輸出,而是在輸出門的作用下有選擇地輸出。輸出門的門控變量go\boldsymbol g_ogo?為:
go=σ(Wo[ht?1,xt]+bo)\boldsymbol g_o=σ(\boldsymbol W_o [\boldsymbol h_{t-1},\boldsymbol x_t ]+\boldsymbol b_o)go?=σ(Wo?[ht?1?,xt?]+bo?)
其中Wo\boldsymbol W_oWo?和bo\boldsymbol b_obo?為輸出門的參數,同樣需要通過反向傳播算法自動優化,σσσ為激活函數,一般使用Sigmoid函數。當輸出門go=0\boldsymbol g_o=0go?=0時,輸出關閉,LSTM的內部記憶完全被隔斷,無法用作輸出,此時輸出為0的向量;當輸出門go=1\boldsymbol g_o=1go?=1時,輸出完全打開,LSTM的狀態向量ct\boldsymbol c_tct?全部用于輸出。LSTM的輸出由:
ht=go?tanh?(ct)\boldsymbol h_t=\boldsymbol g_o\cdot \text{tanh?}(\boldsymbol c_t)ht?=go??tanh?(ct?)
產生,即內存向量ct\boldsymbol c_tct?經過tanh\text{tanh}tanh激活函數后與輸入門作用,得到LSTM的輸出。由于go∈[0,1]\boldsymbol g_o\in[0,1]go?∈[0,1],tanh?(ct)∈[?1,1]\text{tanh}?(\boldsymbol c_t )\in[-1,1]tanh?(ct?)∈[?1,1],因此LSTM的輸出ht∈[?1,1]\boldsymbol h_t\in[-1,1]ht?∈[?1,1]。
5. 小結
?LSTM雖然狀態向量和門控數量較多,計算流程相對復雜。但是由于每個門控功能清晰明確,每個狀態的作用也比較好理解。這里將典型的門控行為列舉出來,并解釋其代碼的LSTM行為,如下表所示:
| 0 | 1 | 只使用記憶 |
| 1 | 1 | 綜合輸入和記憶 |
| 0 | 0 | 清零記憶 |
| 1 | 0 | 輸入覆蓋記憶 |
總結
以上是生活随笔為你收集整理的深度学习之循环神经网络(8)长短时记忆网络(LSTM)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10怎么改主题颜色 win10改主
- 下一篇: win10不能新建文件夹怎么解决 win