Transformer的細(xì)節(jié)到底是怎么樣的?Transformer 18問!(3)
10.1 介紹Transformer,為什么要介紹self Attention呢?因為在Transformer中最多的multi head attention和Mask multi head attention來自Scaled dot product attention,而scaled dot product attention來自self attention,如圖15所示。
10.2 什么是self attention呢?self attention和local attention、stride attention都是attention的一種;self attention是每一個Q與每一個K依次計算注意力系數(shù),如圖18所示,而像local attention是Q只與相鄰的K計算注意力系數(shù),stride attention是Q通過跳連的方式與K計算注意力系數(shù)。
圖18 從左至右依次為:self attention、local attention、stride attention
10.3 Self attention為什么可以用于處理像機(jī)器翻譯這種序列數(shù)據(jù)?
輸入序列中的每一個位置的數(shù)據(jù),可以關(guān)注其他位置的信息,由此通過Attention score來提取特征或者捕獲輸入序列每一個token之間的關(guān)系。
10.4 Self attention是如何具體實現(xiàn)的? 總共分為4步,如圖19所示
圖19 Self attention的實現(xiàn)過程
11. 什么是Scaled dot product attention?11.1 self attention最常見的有兩種,一種是dot product attention、另一種是additive attention,如圖20所示,前者的計算效率更高。
圖20 dot product attention與additive attention的區(qū)別
11.2 什么是Scaled ?
scaled的具體實現(xiàn)方式如圖21所示,這一操作的目的是為了防止內(nèi)積過大,從梯度角度考慮,避免靠近1,易訓(xùn)練;與batch normalization有一些相似的功能。
圖21 scaled操作在attention中的位置
12. 什么是Multi head attention?12.1 Multi head attention在Transformer架構(gòu)中的位置如圖15所示。
12.2 提出背景:CNN具有多個channel,可以提取圖像不同維度的特征信息,那么Self attention是否可以有類似操作,可以提取不同距離token的多個維度信息呢?
12.3 什么是group 卷積?如圖22所示,將輸入的特征多個channel分成幾個group單獨(dú)做卷積,最后再進(jìn)行con c操作。
圖22 group卷積
12.4 Multi head attention的實現(xiàn)方式?與self attention根本不同是什么?
如圖23所示,以2個head的為例,將輸入的Q、K、V分成兩份,每一小份的Q與對應(yīng)的K、V分別操作,最后計算得到的向量再進(jìn)行conc操作,由此可以看出,Multi head attention與group卷積有著相似的實現(xiàn)方式。
圖23 Multi head attention與self attention的區(qū)別
12.5 如何從輸入輸出維度,角度來理解Multi head attention?如圖24所示。
圖24 Multi head attention的輸入輸出維度
13. 什么是Mask Multi head attention?13.1 Mask Multi head attention在transformer架構(gòu)中的位置如圖15所示。
13.2 為什么要有Mask這種操作?
Transformer預(yù)測第T個時刻的輸出,不能看到T時刻之后的那些輸入,從而保證訓(xùn)練和預(yù)測一致。
通過 Masked 操作可以防止第 i 個單詞知道 i+1 個單詞之后的信息,如圖25所示。
圖25 Mask操作在Transformer中的位置
13.3 Mask操作是如何具體實現(xiàn)的呢?
Q1只跟K1計算,Q2只跟K1、K2計算,而對于K3、K4等,在softmax之前給一個非常大的負(fù)數(shù),由此經(jīng)過softmax之后變?yōu)?,其在矩陣上的計算原理實現(xiàn)如圖26所示。
圖26 Mask操作的矩陣計算上的實現(xiàn)方式
14. 什么是ADD?14.1 Add就是殘差連接,由2015年ResNet這篇文章發(fā)揚(yáng)光大(目前引用量已超過16萬),與Skip connection的區(qū)別在于需要大小維度全部相同。
14.2 作為大道至簡想法的極致,幾乎每一個深度學(xué)習(xí)模型都會用到這個技術(shù),可以防止網(wǎng)絡(luò)退化,常用于解決多層網(wǎng)絡(luò)難訓(xùn)練的問題。
圖27 ADD在Transformer架構(gòu)中的位置(左)與殘差連接原理示意圖(右)
15. 什么是Norm?15.1 Norm就是layer normalization。
15.2 核心作用:為了訓(xùn)練更加穩(wěn)定,和batch normalization有相同的作用,都是為了使輸入的樣本均值為零,方差為1。
15.3 為什么不使用batch normalization,使用的是layer normalization呢?因為一個時序數(shù)據(jù),句子輸入長度有長有短,如果使用batch normalization,則很容易造成因樣本長短不一造成“訓(xùn)練不穩(wěn)定”。BN是對同一個batch內(nèi)的所有數(shù)據(jù)的同一個特征數(shù)據(jù)進(jìn)行操作;而LN是對同一個樣本進(jìn)行操作。
圖28 layer Normalization在Transformer架構(gòu)中的位置(左)與batch normalization的區(qū)別(右)
16. 什么是FFN?16.1 FFN就是feed forward networks。
16.2 為什么有了Self attention層,還要有FFN?Attention已經(jīng)有了想要的序列信息特征,MLP的作用是把信息投影到特定的空間里,再做一次非線性映射,和Self attention交替使用。
16.3 結(jié)構(gòu)上:包括兩層MLP,第一層的維度為512*2048,第二層的維度為2048*512,且第二層MLP沒有使用激活函數(shù),如圖29所示。
圖29 FFN的具體實現(xiàn)過程
17. Transformer是如何訓(xùn)練出來的?17.1 數(shù)據(jù)上,在Transformer論文中有提到,用到了4.5M和36M的翻譯句子對。
17.2 硬件上,base模型是8個P100 GPU訓(xùn)練了12個小時,大模型是訓(xùn)練了3.5天。
17.3 模型參數(shù)和調(diào)參層面:
第一,可訓(xùn)練的參數(shù)包括WQ、WK、WV、WO,換包括FFN層的參數(shù)。
第二,可調(diào)的參數(shù)包括:每一個token向量表示的維度(d_model)、head的頭數(shù)、Encoder和Decoder中block重復(fù)的次數(shù)N、FFN中間層向量的維度、Label smoothing(置信度0.1)和dropout(0.1)。
18. Transformer為什么效果好?18.1 雖然題目是Attention is all you need,但后續(xù)一些研究表明,Attention、殘差連接、layer normalization、FFN,這些因素共同成就了Transformer。
18.2 Transformer優(yōu)點(diǎn)包括:
第一,提出深度學(xué)習(xí)既MLP、CNN、RNN后的第4大特征提取器。
第二,一開始用在機(jī)器翻譯,隨著GPT和Bert徹底出圈;是一個轉(zhuǎn)折點(diǎn),在這個點(diǎn)之后,NLP領(lǐng)域快速發(fā)展,之后多模態(tài)、大模型、視覺Transformer等開始興起。
第三,給人們信心,原來CNN和RNN之后,還可以有效果更好的特征提取器。
18.3 Transformer的不足之處?
第一,計算量大,對硬件要求高。
第二,因為無歸納偏置,需要很多數(shù)據(jù)才可以取得很好的效果。
最后,這篇文章的參考資料基于Transformer論文、李宏毅老師的課程、李沐老師的課程、知乎上一些關(guān)于Transformer優(yōu)秀的分享,這里不一一介紹(在學(xué)習(xí)過程中沒有及時記錄Reference),如果有侵權(quán),請您告知,我會及時備注或修改。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。