如何理解transformer的decoder

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)該就可以理解了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容