論文地址:https://arxiv.org/abs/1706.03762
官方代碼:https://github.com/tensorflow/tensor2tensor
第三方代碼:https://github.com/Kyubyong/transformer
一 為什么讀這篇
本文名字起的十分霸氣凿将,又稱作變形金剛(transformer)剩晴,其實(shí)這篇文章早就收入zotero了,光看名字就知道要做attention相關(guān)的東西本文是繞不開(kāi)的衷敌,正好最近的工作有用到self-attention,其實(shí)就是基于本文的工作毕籽,初看項(xiàng)目代碼時(shí)一臉懵逼脐供,惡補(bǔ)了下相關(guān)知識(shí),各種各樣的解讀讲坎,現(xiàn)在通過(guò)閱讀原作來(lái)進(jìn)一步加深理解孕惜,提高煉丹效率。晨炕。
二 截止閱讀時(shí)這篇論文的引用次數(shù)
2019.6.20 2136次衫画。當(dāng)然比不過(guò)CV,不過(guò)也相當(dāng)高了瓮栗,自從看推薦相關(guān)的論文削罩,就沒(méi)見(jiàn)過(guò)引用上千的,這篇引用高可能也跟NLP有關(guān)费奸。
三 相關(guān)背景介紹
中了17年的NIPS弥激,同年6月掛到arXiv上。本篇出來(lái)后最先開(kāi)始在機(jī)器翻譯領(lǐng)域炸了愿阐,后來(lái)被各種花式引入解決其他領(lǐng)域的問(wèn)題微服。
又是google出品,總共8個(gè)作者换况,有Google Brain的职辨,也有Google Research的。文中特意注明戈二,8個(gè)作者貢獻(xiàn)是一樣的舒裤。。排名是隨機(jī)排的觉吭。腾供。這也行,神操作。其中隨機(jī)排列的一作Ashish Vaswani小哥來(lái)自印度伴鳖,在南加州大學(xué)碩博總共讀了10年节值。。還算高產(chǎn)榜聂,發(fā)了不少paper搞疗。
四 關(guān)鍵詞
transformer
self-attention
multi-head attention
五 論文的主要貢獻(xiàn)
1 提出Transformer架構(gòu),只用Attention须肆,而不用CNN和RNN來(lái)解決時(shí)間序列問(wèn)題
2 提出Self-Attention匿乃,Multi-head Attention
六 詳細(xì)解讀
0 摘要
一上來(lái)先批判一下CNN和RNN,稱其復(fù)雜豌汇。提出的新架構(gòu)Transformer僅基于attention機(jī)制幢炸,完全避免了遞歸和卷積。在效果很好的同時(shí)還能做到并行化拒贱,并且訓(xùn)練時(shí)間更少宛徊。在WMT2014的各個(gè)數(shù)據(jù)集上取得了SOTA。
1 介紹
基于RNN的模型已經(jīng)在序列問(wèn)題上取得了SOTA的效果逻澳,不過(guò)因?yàn)槠涔逃械倪f歸屬性闸天,其阻止了并行訓(xùn)練,并且長(zhǎng)序列也是受限的赡盘。Attention機(jī)制已成為各種任務(wù)中序列建模和轉(zhuǎn)換模型的重要組成部分号枕,它可以在不考慮輸入或輸出序列中的距離時(shí)對(duì)依賴關(guān)系進(jìn)行建模。但是幾乎所有的attention都是用來(lái)連接RNN的陨享。
Transformer在8卡的P100上訓(xùn)練12個(gè)小時(shí)葱淳。
2 背景
基于CNN的模型可以并行化,不過(guò)使得學(xué)習(xí)遠(yuǎn)距離位置之間的依賴性變得更加困難抛姑。Transformer將這個(gè)運(yùn)算減少到常數(shù)級(jí)赞厕。另外由于平均注意力加權(quán)位置導(dǎo)致有效分辨率降低,3.2節(jié)提出的Multi-Head Attention來(lái)解決這個(gè)問(wèn)題定硝。
Self-attention皿桑,有時(shí)也稱為intra-attention,其關(guān)聯(lián)單個(gè)序列的不同位置以計(jì)算序列的表示蔬啡。
端到端記憶網(wǎng)絡(luò)基于遞歸注意機(jī)制诲侮,而不是序列對(duì)齊遞歸,在簡(jiǎn)單的問(wèn)答模型中表現(xiàn)良好箱蟆。
Transformer是第一個(gè)只依賴self-attention沟绪,而不依賴序列對(duì)齊RNN或卷積來(lái)計(jì)算輸入輸出序列表示。
3 模型架構(gòu)
3.1 編碼器和解碼器堆疊
編碼器
編碼器由N=6個(gè)相同的層堆疊而成空猜。每個(gè)層有2個(gè)子層绽慈,第一個(gè)是multi-head self-attention恨旱,第二個(gè)是簡(jiǎn)單的,position-wise的全連接前饋網(wǎng)絡(luò)坝疼。在兩個(gè)子層之間用殘差連接搜贤,并接上layer normalization,即钝凶,embedding層及所有子層的輸出維度為
解碼器
編碼器也是由N=6個(gè)相同的層堆疊而成仪芒。此外解碼器還插入第三個(gè)子層,用于在編碼器上的輸出上執(zhí)行multi-head attention耕陷。注意這里的是Masked Multi-head Attention桌硫,主要是避免偷看到未來(lái)信息。
3.2 Attention
attention函數(shù)可以認(rèn)為是一個(gè)query和一組key-value對(duì)到輸出的映射啃炸,其中,query卓舵,keys南用,values和輸出都是vectors。輸出為values的加權(quán)和掏湾,其中分配給每個(gè)value的權(quán)重由query與對(duì)應(yīng)key通過(guò)函數(shù)計(jì)算得到裹虫。
3.2.1 Scaled Dot-Product Attention
query和key的維度為,value的維度為融击,計(jì)算query和所有key的點(diǎn)積筑公,之后除,通過(guò)softmax函數(shù)的應(yīng)用來(lái)得到value的權(quán)重尊浪。公式如下:
加法attention和點(diǎn)積(乘法)attention是最常見(jiàn)的兩種attention函數(shù)匣屡,本文在點(diǎn)積attention的基礎(chǔ)上使用了縮放因子。
雖然對(duì)于值較小的拇涤,兩種機(jī)制的表現(xiàn)類似捣作,但是對(duì)于值較大的,加法attention優(yōu)于沒(méi)有縮放的點(diǎn)積attention鹅士。本文懷疑對(duì)于大的券躁,點(diǎn)積大幅增加,將softmax函數(shù)推向具有極小梯度的區(qū)域掉盅,因此通過(guò)來(lái)縮放點(diǎn)積也拜。
3.2.2 Multi-Head Attention
如圖2-右所示。
Multi-head attention可以讓模型共同關(guān)注來(lái)自不同位置的不同表示子空間的信息趾痘。
本文用h=8作為并行attention層慢哈,對(duì)于每一個(gè)使用。
3.2.3 Attention在Transformer中的應(yīng)用
Transformer用三種不同的方式來(lái)使用multi-head attention
- 在編解碼attention層扼脐,query來(lái)自前一個(gè)解碼層岸军,記憶key和value是來(lái)自編碼層的輸出奋刽。這可以使解碼器的每個(gè)位置都參與輸入序列中的所有位置。
- 編碼器包含self-attention層艰赞。其中所有key佣谐,value和query都是來(lái)自相同的空間,在這種情況下方妖,也就是上一層的輸出狭魂。編碼器中的每個(gè)位置都可以處理編碼器前一層中的所有位置。
- 類似的党觅,解碼器中的self-attention也可以使每個(gè)位置處理解碼器前一層的所有位置雌澄。需要防止解碼器中的信息向左流動(dòng)以保持自回歸屬性,可以通過(guò)mask來(lái)實(shí)現(xiàn)(設(shè)置為)
3.3 Position-wise前饋網(wǎng)絡(luò)
輸入和輸出的維度為杯瞻,層內(nèi)部的維度為
3.4 Embedding和Softmax
常規(guī)操作镐牺,但是給embedding層的權(quán)重乘了一個(gè)
3.5 位置編碼
因?yàn)楸疚哪P图葲](méi)有rnn也沒(méi)有cnn,為了讓模型利用到序列的順序魁莉,必須注入一些關(guān)于序列相對(duì)或絕對(duì)位置的信息睬涧。所以使用和embedding相同維度的位置編碼,兩者融合相加旗唁。本文使用sin和cos函數(shù):
其中是位置畦浓,是維度。
本文發(fā)現(xiàn)用這個(gè)函數(shù)和用學(xué)習(xí)到的位置embedding效果差不多检疫。
4 Why Self-Attention
使用self-attention基于三個(gè)需求讶请。
- 每層總的計(jì)算復(fù)雜度
- 可以并行化的計(jì)算量,通過(guò)所需的最小順序操作數(shù)來(lái)衡量
- 網(wǎng)絡(luò)中長(zhǎng)距離依賴之間的路徑長(zhǎng)度
如表1所示屎媳,self-attention層用常數(shù)級(jí)序列運(yùn)算連接所有的位置夺溢。而遞歸層需要的序列運(yùn)算。除此之外剿牺,self-attention得到的模型有更好的解釋性企垦。
5 訓(xùn)練
5.1 訓(xùn)練數(shù)據(jù)和批次
在有450w句子對(duì)的WMT 2014英語(yǔ)-德語(yǔ)數(shù)據(jù)集上訓(xùn)練,大約有37000個(gè)token晒来。對(duì)于英語(yǔ)-法語(yǔ)數(shù)據(jù)集钞诡,有3600w句子對(duì),劃分為32000個(gè)token湃崩。
5.2 硬件和進(jìn)度
8卡的P100荧降。沒(méi)一步大約0.4秒。base模型大約10w步攒读,耗時(shí)12小時(shí)朵诫。大模型每步1秒,訓(xùn)練30w步薄扁,耗時(shí)3.5天剪返。
5.3 優(yōu)化器
用Adam废累,,脱盲,邑滨,學(xué)習(xí)率變化公式如下:
其中
5.4 正則化
用了3種類型的正則化???
Residual Dropout
在每一個(gè)子層輸出后加dropout,以及embedding后加钱反。用
Label Smoothing
用掖看,效果有提升
6 結(jié)果
6.1 機(jī)器翻譯
注意這里為了達(dá)到更好的效果,用了融合最后幾個(gè)checkpoint的trick面哥。
6.2 模型變種
第A行說(shuō)明head太少哎壳,太多都不行。
第B行說(shuō)明減少效果變差尚卫。
第C行和第D行說(shuō)明模型越大越好归榕,同時(shí)dropout可以抑制過(guò)擬合。
第E行說(shuō)明用正弦positional embedding和學(xué)習(xí)得到的positional embedding效果差不多吱涉。
6.3 英語(yǔ)成分句法分析
這一節(jié)是證明Transformer在其他任務(wù)上的泛化能力蹲坷。
七 小結(jié)
非常有影響力的一篇paper,后續(xù)與NLP邑飒,時(shí)間序列有關(guān)的問(wèn)題都繞不開(kāi)本文了,據(jù)說(shuō)BERT也重度依賴了本文提出的模型結(jié)構(gòu)级乐。另外文章的名字也非常霸氣疙咸,這個(gè)對(duì)傳播也是很有幫助滴。
素質(zhì)四連
要解決什么問(wèn)題
進(jìn)一步提升機(jī)器翻譯的效果风科,突破RNN的限制
用了什么方法解決
完全用Attention機(jī)制撒轮,沒(méi)有用RNN和CNN。并提出self-attention和multi-head attention
效果如何
17年的各種刷榜贼穆,當(dāng)年的SOTA题山。
還存在什么問(wèn)題
總感覺(jué)位置編碼embedding那里有點(diǎn)可以,后續(xù)會(huì)有改進(jìn)
算法背后的模式和原理
multi-head attention有點(diǎn)類似CNN的一些玩法(分分合合)故痊。self-attention的提法非常好顶瞳,充分利用了全局信息。
八 補(bǔ)充
The Illustrated Transformer 這篇必看
《Attention is All You Need》淺讀(簡(jiǎn)介+代碼) 蘇神的大作愕秫,同樣值得一看