Transfomer是一個seq2seq模型,關(guān)于encoder部分,其實很多教程都將的非常清楚,最推薦的是李宏毅老師的視頻,視頻講self-attention講的非常清楚,但是關(guān)于最后的Transformer的結(jié)構(gòu),特別是decoder部分,講的還是比較快。
此外還可以參考知乎上的一些教程,非常多,就不錯推薦了。
模型結(jié)構(gòu)說明
Transformer的結(jié)構(gòu)圖如下:

左邊是encoder部分,比較簡單,把一個句子輸入,做一個multi-head attention,然后通過一個殘差鏈接(resdituial connection),然后通過一個全連接的神經(jīng)網(wǎng)絡(luò),這里強(qiáng)調(diào)一下,此處的feedForward是對輸入的每個multi-head attention的輸出做的獨立但是相同的feedForward,也就是說,對每個上一層的輸出,做相同的矩陣變換。然后這樣的block多Nx層。
Decoder
那么關(guān)于decoder是怎么做的呢,首先,強(qiáng)調(diào)的是,encoder部分是做并行的,用self-attention結(jié)構(gòu)。而decoder不是并行的,而是想RNN的那種模式,一個一個生產(chǎn)的,有時序概念。有了這個前提,那么第一步是給一個Masked Multi-Head Attention一個輸入,第一個輸入是【SOS】(即start of sentence),然后做self-attenttion,那么此處的mask如何理解,就是生產(chǎn)第一步只有一個詞,自己做self-attention,第二步生成兩個詞的時候,就做兩個詞的self-attetion,那么每一步在該層有一個輸出,假設(shè)為Q,那么送入到中間的Multi-Head Attention層,和encncoder部分的K,V做attention。那么在此時,小伙伴們應(yīng)該就明白了,這不是和之前傳統(tǒng)的用RNN做的seq2seq模型做attention一模一樣嗎,只不過那個使用decoder的hiddenLayer的值(作為Q)和encoder部分的hiddenLayer的值(作為K)做attention,然后把encoder的input作為V,加權(quán)給到decoder的輸入。所以二者其實是一個東西,只不過是把RNN換成了self-attention,然后又加了殘差連接而已,模型變得復(fù)雜了一些,實際上還是一個東西。
最后如果還不理解建議把seq2seq和attention的內(nèi)容復(fù)習(xí)一下,然后再結(jié)合李宏毅老師的視頻,里面有一個動圖描述了decoder部分,應(yīng)該就可以理解了。