什麼是RNN
RNN recurrent neural network, 可以翻譯成遞歸神經網路,或者循環神經網路
主要解決的是序列類的問題,有時候順序非常關鍵。
比如,我喜歡蒼老師的電影,和蒼老師喜歡我的電影,意思完全不同;
我想和馬雲爸爸一樣有錢和馬雲爸爸想和我一樣有錢,意思也完全不同。
那麼RNN是如何工作的呢?
最重要的就是這個公式,當前狀態由上一個狀態和當前輸入而決定的
ht 代表當前時刻的隱藏狀態hidden state, ht-1就是上一個時刻的hidden state, xt, 是當前時刻的輸入
舉個例子,我喜歡星球大戰,把這句話,分成三個詞,x0 是我,x1是喜歡,x2是星球大戰
h0 由初始狀態,和x0,"我" 來決定
h1 由h0和x1"喜歡"來決定
h2 由h1, 和x2 "星球大戰"來決定
ht-1 乘以它的weight Wh 加上
Xt 乘以它的weight Wx
兩個相加,
經過激活函數tanh, 最後就得到ht了
注意,Wh, Wx, 都沒有下角標t, 所以這兩個weight 是由各個時刻共享的。
訓練的過程就是更新這兩個weight的過程,把它們優化成最佳值。
Encoder/Decoder
剛才講的是最基礎的RNN模型,下面看一下encoder/decoder 模型是如何利用RNN 來對詩的。
Encoder 部分的輸入是已知詩的第一句,舉個例子,床 前 明 月 光,五個字,
Decoder 部分的輸入是Encoder 的輸出,加上自己的上一次輸出。
比如說,預測第一個字,因為decoder 自己還沒有輸出,所以用【起始符】,來表示自己上一次的輸出,加上encoder 處理床前明月光的輸出,這樣decoder 就輸出了,「疑」這個字
預測第二個字的時候,「疑」這個字就變成了輸入。
假設剛才輸出不是「疑」這個字,輸出了「低」這個字,那麼預測第二個字的時候,「低」就變成了輸入
假設預測第五個字輸出是「霜」,預測第六個字的時候,「霜」變成了輸入,輸出是【終止符】,表示不用繼續預測了。
注意力機制
注意力機制,attention mechanism
對於翻譯問題來說,我們需要把所有的詞都結合起來翻譯成目標語言。
注意力機制,就是提高每一個輸入詞的參與度的一種機制,之前說的Encoder只有最後一個輸出,被Decoder 使用
現在Decoder 要使用所有Encoder 的輸出,並且給每一個輸出加上一個權重weight, 使用多少由這個權重來決定
上圖表示翻譯,she is five years old younger than me 成法語的時候,每一個英語詞的參與度,顏色越淺,參與度越高。
LSTM ( long short term memory)
除了基本的RNN cell, 還有LSTM cell,
LSTM 是一種RNN,與最基本的RNN相比,它多了四個門(Gate),
f, forget gate
i, input gate
g, gate gate
o, output gate
還多了一個中間值 c, cell state
LSTM 通過這四個gate來控制,要使用多少之前的cell state,
它解決了因為之前的序列過長可能出現的梯度消失問題。
比如說,Sigmoid 函數在某一點,梯度是0.5,因為RNN序列很長,所以由許多Sigmoid 函數組成,根據導數的鏈式法則,梯度是相乘的關係,(0.5) ^ n ,最後就接近於0了。
相反如果梯度大於1,就會出現梯度爆炸問題。
更多神經網路視頻
推薦閱讀:
※用循環神經網路進行文件無損壓縮:斯坦福大學提出DeepZip
※BAT1000題精選 | RNN是怎麼從單層網路一步步構造的
※循環神經網路(RNN)介紹3:RNN的反向傳播演算法Backpropagation Through Time (BPTT)
※在線點評系統中的自動眾包攻擊和防禦
※簡單的Char RNN生成文本