一、RNN
1.1 模型結構:
1.2 多層RNN
通過num_layers設置循環神經網絡隱含層的層數,例如2。
對於一個多層循環神經網絡,當前時刻隱含層的輸入來自同一時刻輸入層(如果有)或上一層隱含層的輸出。每一層的隱含狀態只沿着同一層傳遞。把單層循環神經網絡中隱含層的每個單元當做一個函數f,這個函數在t時刻的輸入是Xt, Ht-1,輸出是Ht:
Ht = f(Xt, Ht-1)
加入輸入爲第0層,輸出爲第L+1層,在一共L個隱含層的循環神經網絡中,上式可以拓展成以下的函數:
如下圖所示:
1.3 雙向RNN
二、LSTM
遺忘門: 更新門: 輸出門: 候選記憶細胞: 記憶細胞: 隱藏層: |
遺忘門:決定我們要扔掉哪些信息
更新們:決定我們要增加哪些新的信息
輸出門:哪些信息需要被輸出
候選記憶細胞:
記憶細胞:選擇那些信息需要被遺忘,哪些信息需要被記住(遺忘過去,捕捉當前)
隱藏層:用來傳遞信息
門的激活函數都是用sigmoid,取值範圍是[0,1]
其它的激活函數都是tanh,取值範圍是[-1,1],它有中心化數據的作用
2.2 雙向BLSM
三、GRU
重置門(reset gate):重置門有助於捕捉時間序列裏短期的依賴關係;
更新門(update gate):更新門有助於捕捉時間序列里長期的依賴關係;
ht^ :候選隱藏層
ht:隱藏層
四、ELMO
五、seq2seq
環境向量C:C = q(h1,....,hT),編碼了輸入變量X(x1,x2,..xn)的信息
兩個RNN模型,第一個RNN沒有輸出,只會把信息都編碼至C;第二個RNN的輸入都是C,T時刻的輸入包括C,和y(t-1),H(t-1)
5.1 編碼器:
編碼器的設計可以多種多樣,如下是一個雙向的RNN模型,正向獲得的隱藏層爲h(f),反向的隱藏層爲h(b),則最終的ht = concat(hf,hb)
5.2 解碼器:
隱藏層:St = g(yt-1, c, St-1),由環境變量C,上一時刻的隱藏層和上一時刻的輸出決定;模型g如何設計呢?
原始GRU公式如下:
在解碼器中,我們可以對GRU的設計稍作修改,從而變換t'-1的輸出yt'-1、隱藏狀態St'-1,和背景變量Ct'。解碼器在時間t'的隱藏狀態爲:
5.3 模型當中的tricks
1)既然生成的是不定長的sequence,那麼什麼時候停止生長呢?
編碼器和解碼器是分別對應輸入序列和輸出序列的兩個循環神經網絡。我們通常會在輸入序列和輸出序列後面分別附上一個特殊字符'<eos>'(end of sequence)表示序列的終止。在測試模型時,一旦輸出'<eos>'就終止當前的輸出序列;
2)decoder層第0層的輸入y0設置爲'<bos>'(beginning of sentence)
3) decoder層第0層的隱藏層S0 設置爲 tanh(W* h1(b)), h1(b)是encoder第一層的反向隱藏層信息。這種設計是考慮到,對於翻譯模型,它希望翻譯出來的第一個單詞,要參考源語言的第一個單詞,這裏用h1(b)來代表源語言的第一個單詞信息
六、Attention機制
上面的模型有什麼問題
對於輸出序列每一時刻的C是一樣的,例翻譯系統爲例,(I like home)->(我喜歡家),我們希望,在翻譯'我‘的時候,I被分配更多的注意力,翻譯'喜歡'的時候,like被分配更多的注意力。就是說,對於decoder階段不同時刻的輸出,分配的C應該不同。
解決思路和設計原理
環境向量C:C = q(h1,....,hT),給輸入的隱藏層hT賦予不同的權重,使得C在輸入到decoder的時候,根據權重賦予不同時刻,不同的值
設計模型
對(h1,...,ht)進行加權平均(softmax),再賦值給C
編碼器在t的隱藏狀態爲ht,且總時間不長爲T。那麼decoder在時間t'的背景變量爲所有encoder隱藏狀態的加權平均:
權重at't的值是一個概率分佈。爲了得到概率分佈,我們可以使用一個softmax運算:
T是編碼器的時間序列長度;
現在,我們需要定義如何計算et't。由於et't同時取決於decoder的時間t'和編碼器的時間t,我們不妨以decoder的t'-1的隱藏狀態st'-1和encoder在時刻t的隱藏狀態ht爲輸入,並通過函數a計算:
這裏函數a有多種選擇,如果兩個輸入向量長度相同,一個簡單的選擇是計算他們的內積a(s,h) = sT*h。而最早提出注意力機制的論文是將輸入連接後通過單隱藏層變換的(類似於全連接):
————————————————————————————————————————