該論文提出了transformer的概念蜀涨,用以替換RNN和CNN
一.關(guān)于self-attention
Scaled Dot-Product Attention
Scaled指除以dk的平方根萍嬉,Dot-Product指計算Q和K的點積。計算公式是:
其中合愈,Q、K豪直、V是可訓練的矩陣哩盲,需要注意的是注意力權(quán)重的計算只與Q和K以及維度d有關(guān)艰管,softmax的輸出是一個和為1的向量滓侍,用于與V做點乘。如何把一句話轉(zhuǎn)化成transformer的輸入牲芋,可參見https://zhuanlan.zhihu.com/p/48508221
Multi-Head Attention
可以直譯為多頭注意力撩笆,從公式來看,是先對Q缸浦、K夕冲、V做了線性映射后,在分別計算注意力權(quán)重裂逐,然后concat歹鱼。
至此,論文最核心的部分介紹完了卜高,下面是self-attention的圖示弥姻。關(guān)于注意力更詳細的介紹可參考https://blog.csdn.net/LucyGill/article/details/67640343南片。
二、關(guān)于Position-wise Feed-Forward Networks
不同一般的Feed-Forward網(wǎng)絡(luò)庭敦,position-wise FFN中的position指得是sequence中得position疼进,通過一個MLP把每個當前位置d_model維度得向量映射成d_iterm,relu之后再映射回d_model秧廉。
圖中x得shape是[1,d_model]伞广,W1是[d_model,d_iterm]的矩陣,W2是[d_interm,d_model]的矩陣疼电。
三嚼锄、關(guān)于Positional Encoding
用位置編碼的理由是transformer里沒有卷積單元和循環(huán)單元,為了捕捉序列的相對位置信息蔽豺,需要對每個element做位置編碼区丑。論文里選三角函數(shù)對位置進行編碼,計算公式為
其中茫虽,pos指位置下標刊苍,i指維度下標,即:向量的每個維度都對應(yīng)了一個位置編碼函數(shù)濒析。下表中,作者比較了self-attention與卷積網(wǎng)絡(luò)啥纸、循環(huán)網(wǎng)絡(luò)的性能:
其中n指序列長度号杏,d指向量的維度,k指卷積核的大小斯棒,r指限制型自注意力的窗口長度盾致。maximum path length,指的是序列第一個token與最后一個token產(chǎn)生關(guān)系需要走過的計算節(jié)點的個數(shù)荣暮。self-attention可以直接計算庭惜,RNN需要循環(huán)計算n次,卷積核為k的CNN需要logk(n)層穗酥。
四护赊、如何解碼
解碼方式與RNN類似,采用shifted right得方式砾跃,測試階段每次輸出一個token骏啰,作為下次解碼的輸入。
參考資料
https://zhuanlan.zhihu.com/p/48508221
https://blog.csdn.net/LucyGill/article/details/67640343
Attention Is All You Need