對于《Attention is all you need》這篇文章中提到的transformer模型,自己最初閱讀的時候并不是很理解,于是決定從頭開始,一點(diǎn)一點(diǎn)梳理transformer模型的由來。整個文章計劃分成三個部分,第一部分,也就是本文,將重點(diǎn)介紹一下NLP方面對于seq2seq的基本發(fā)展。第二部分,將講解attention機(jī)制的各個細(xì)節(jié)。最后一部分,將介紹transformer模型的具體結(jié)構(gòu)。
基本RNN結(jié)構(gòu)
對于自然語言處理中的問題,相比較傳統(tǒng)的詞袋模型和普通的前饋神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),RNN結(jié)構(gòu)可以更好的考慮到句子中詞的先后順序所帶來的不同影響。
RNN的基本結(jié)構(gòu)如下圖所示。

整個RNN分成3個部分,輸入,輸出,和中間的隱狀態(tài)(hidden state)。隱狀態(tài)與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)最大的不同是會接受上一時刻的隱狀態(tài)。
對于h1而言,
這里的U,W,b分別是對應(yīng)的參數(shù)。f是激活函數(shù)。
h2的計算公式和h1相同,只不過對應(yīng)的h和x要做改變。
可以看出,要計算當(dāng)前時刻的隱狀態(tài)
這里有一個地方需要注意,在RNN中,U,W,b這三個參數(shù)在不同的隱狀態(tài)中也是相同的。也就是說參數(shù)是共享的。
計算得到隱狀態(tài)后,要計算當(dāng)前時刻的輸出。
注意這里的參數(shù)V和c也是共享的。
以上就是最基本的RNN模型,這個模型中,輸入的個數(shù)嚴(yán)格的等于輸出。是標(biāo)準(zhǔn)的N對N。下面將介紹幾種RNN的常見變種。
RNN變種
N vs 1
相比于以前每一個輸入對應(yīng)一個輸出,當(dāng)前模型只在最后的一個時刻輸出。

最常見的使用場景就是做文本分類,將最后一個時刻的輸出作為類別的判斷。
1 vs N
與上一個模型相反,這次是輸入只有一個。
一種情況是把輸入作為最初階段的輸入:

另一種情況是在每個階段,都把X作為輸入:

這種結(jié)構(gòu)可以應(yīng)用的場景有: 圖像生成文字等
N vs M
接下來就要引出本文的核心結(jié)構(gòu)了,當(dāng)RNN的輸入和輸出是N vs M這種結(jié)構(gòu)時,這種結(jié)構(gòu)也被稱作Encoder-Decoder 模型,也可以被稱作 seq2seq模型。
Encoder-Decoder 模型
對于Encoder-decoder 模型,最抽象的一種表示如下圖所示

Encoder網(wǎng)絡(luò)負(fù)責(zé)將輸入進(jìn)行編碼,得到語義的編碼C。 Decoder網(wǎng)絡(luò)負(fù)責(zé)根據(jù)得到的編碼C,進(jìn)行解碼,解碼后輸出結(jié)果。一個很常見的encoder-decoder的例子就是機(jī)器翻譯,例如中譯英,講中文作為輸入放進(jìn)encode網(wǎng)絡(luò),再將其解碼后輸出英文。
對于作為輸入的中文,我們把它看成給定的輸入句子,Source。經(jīng)過解碼后輸出的英文,就是目標(biāo)句子Target。整個流程可以總結(jié)為
以上的流程就是基本的encoder-decoder模型的流程,把編碼后的C作為最初的輸入給decoder網(wǎng)絡(luò)。decoder網(wǎng)絡(luò)會根據(jù)C和上一個時間點(diǎn)的輸出,輸出當(dāng)前時間點(diǎn)的輸出。直到最后輸出終止符的時候,停止輸出。
對于編碼后的C,有時也會把C作為輸入,輸入給每一個y。對于C的不同使用,見下圖示例,但是通常都是把C當(dāng)做初始狀態(tài)h0。


當(dāng)然,對于C的計算,也有很多種方法。最簡單的方法就是把最后一個時刻的隱狀態(tài)賦值給C。也就是
以上就是最常見的Encoder-Decode網(wǎng)絡(luò)的結(jié)構(gòu),那么缺點(diǎn)也很明顯。首先,對于輸入的句子沒有區(qū)分,在decoder輸出時,會把整個輸入的句子平等看待。而以人翻譯句子的習(xí)慣來看,這是不正常的。 第二個問題,如果僅僅把C作為初始狀態(tài)進(jìn)行輸入,隨著RNN網(wǎng)絡(luò)的推進(jìn),傳到后面時前面的信息已經(jīng)非常小了。對于以上情況的改進(jìn),就是下一篇文章要提出的attention機(jī)制。
參考文獻(xiàn)
[1]完全圖解RNN、RNN變體、Seq2Seq、Attention機(jī)制
[2]深度學(xué)習(xí)中的注意力模型(2017版)
[3]從Encoder到Decoder實(shí)現(xiàn)Seq2Seq模型