今天做完深度學(xué)習(xí)的論文分享,將這篇論文記錄下來,以便日后回顧查看梧兼。
PS:簡書不支持 MathJax 編輯公式萝挤,簡直悲傷的想哭泣御毅,之后再上傳到farbox上好啦??
論文原文:Attention is all you need
這篇論文是Google于2017年6月發(fā)布在arxiv上的一篇文章,現(xiàn)在用attention處理序列問題的論文層出不窮怜珍,本文的創(chuàng)新點(diǎn)在于拋棄了之前傳統(tǒng)的encoder-decoder模型必須結(jié)合cnn或者rnn的固有模式端蛆,只用attention,可謂大道至簡酥泛。文章的主要目的是在減少計(jì)算量和提高并行效率的同時(shí)不損害最終的實(shí)驗(yàn)結(jié)果今豆,創(chuàng)新之處在于提出了兩個(gè)新的Attention機(jī)制,分別叫做 Scaled Dot-Product Attention 和 Multi-Head Attention.
六個(gè)作者都是一作柔袁,不愧是google大佬4舳恪!捶索!
接下來從以下幾方面進(jìn)行講解插掂。
?Background
?Attention
?Transformer
?Experiments
?Conclusions
1.BACKGROUND
目前主流的處理序列問題像機(jī)器翻譯,文檔摘要,對話系統(tǒng)辅甥,QA等都是encoder和decoder框架箩祥,
編碼器:從單詞序列到句子表示
解碼器:從句子表示轉(zhuǎn)化為單詞序列分布
傳統(tǒng)的編碼器解碼器一般使用RNN,這也是在機(jī)器翻譯中最經(jīng)典的模型肆氓,但正如我們都知道的袍祖,RNN難以處理長序列的句子,無法實(shí)現(xiàn)并行谢揪,并且面臨對齊問題蕉陋。
之后這類模型的發(fā)展大多從三個(gè)方面著手:
input的方向性 - 單向或雙向
深度 - 單層或多層
類型– RNN,LSTM或GRU
但是依舊收到一些潛在問題的制約拨扶,神經(jīng)網(wǎng)絡(luò)需要能夠?qū)⒃凑Z句的所有必要信息壓縮成固定長度的向量凳鬓。這可能使得神經(jīng)網(wǎng)絡(luò)難以應(yīng)付長時(shí)間的句子,特別是那些比訓(xùn)練語料庫中的句子更長的句子患民;每個(gè)時(shí)間步的輸出需要依賴于前面時(shí)間步的輸出缩举,這使得模型沒有辦法并行,效率低匹颤;仍然面臨對齊問題仅孩。
再然后CNN由計(jì)算機(jī)視覺也被引入到deep NLP中,CNN不能直接用于處理變長的序列樣本但可以實(shí)現(xiàn)并行計(jì)算印蓖。完全基于CNN的Seq2Seq模型雖然可以并行實(shí)現(xiàn)辽慕,但非常占內(nèi)存,很多的trick赦肃,大數(shù)據(jù)量上參數(shù)調(diào)整并不容易溅蛉。
以上這些缺點(diǎn)的話就是由于無論輸入如何變化,encoder給出的都是一個(gè)固定維數(shù)的向量他宛,存在信息損失船侧;在生成文本時(shí),生成每個(gè)詞所用到的語義向量都是一樣的厅各,這顯然有些過于簡單镜撩。為了解決上面提到的問題,一種可行的方案是引入attentionmechanism讯检。
深度學(xué)習(xí)里的Attentionmodel其實(shí)模擬的是人腦的注意力模型琐鲁,舉個(gè)例子來說,當(dāng)我們觀賞一幅畫時(shí)人灼,雖然我們可以看到整幅畫的全貌,但是在我們深入仔細(xì)地觀察時(shí)顾翼,其實(shí)眼睛聚焦的就只有很小的一塊投放,這個(gè)時(shí)候人的大腦主要關(guān)注在這一小塊圖案上,也就是說這個(gè)時(shí)候人腦對整幅圖的關(guān)注并不是均衡的适贸,是有一定的權(quán)重區(qū)分的灸芳。這就是深度學(xué)習(xí)里的AttentionModel的核心思想涝桅。所謂注意力機(jī)制,就是說在生成每個(gè)詞的時(shí)候烙样,對不同的輸入詞給予不同的關(guān)注權(quán)重冯遂。我們可以看一下上面??這幅圖——通過注意力機(jī)制,我們將輸入句子編碼為一個(gè)向量序列谒获,并自適應(yīng)地選擇這些向量的一個(gè)子集蛤肌,同時(shí)對譯文進(jìn)行譯碼,例如where are you——>你在哪批狱?現(xiàn)在我們在翻譯“你”的時(shí)候給"you"更多的權(quán)重裸准,那么就可以有效的解決對齊問題。
2. ATTENTION
Neural machine translation by jointly learning to align and translate
這篇論文首先將注意力機(jī)制運(yùn)用在NLP上赔硫,提出了soft Attention Model炒俱,并將其應(yīng)用到了機(jī)器翻譯上面。其實(shí)爪膊,所謂Soft权悟,意思是在求注意力分配概率分布的時(shí)候,對于輸入句子X中任意一個(gè)單詞都給出個(gè)概率推盛,是個(gè)概率分布僵芹。加入注意力機(jī)制的模型表現(xiàn)確實(shí)更好,但也存在一定問題小槐,例如:attention mechanism通常和RNN結(jié)合使用拇派,我們都知道RNN依賴t-1的歷史信息來計(jì)算t時(shí)刻的信息,因此不能并行實(shí)現(xiàn)凿跳,計(jì)算效率比較低件豌,特別是訓(xùn)練樣本量非常大的時(shí)候。
基于CNN的Seq2Seq+attention的優(yōu)點(diǎn):基于CNN的Seq2Seq模型具有基于RNN的Seq2Seq模型捕捉long distance dependency的能力控嗜,此外茧彤,最大的優(yōu)點(diǎn)是可以并行化實(shí)現(xiàn),效率比基于RNN的Seq2Seq模型高疆栏。缺點(diǎn):計(jì)算量與觀測序列X和輸出序列Y的長度成正比曾掂。
3. Transformer
谷歌的這篇論文里提出的transformer模型拋棄了cnn,rnn壁顶,初次看有點(diǎn)一頭霧水珠洗,總結(jié)了一下迷惑的地方有三個(gè):
- Positional embedding;(位置嵌入向量——其實(shí)類似word2vec若专,只不過處理的是位置信息罷了)许蓖。
- multi-head attention; (多頭注意力機(jī)制——點(diǎn)乘注意力的升級(jí)版本)
- Position-wise Feed-Forward Networks(位置全鏈接前饋網(wǎng)絡(luò)——MLP變形)
現(xiàn)在一一分析:
multi-head attention
有兩種常用的注意力函數(shù),一種是加法注意力(additive attention),另外一種是點(diǎn)乘注意力(dot-productattention)膊爪,論文所采用的就是點(diǎn)乘注意力自阱,這種注意力機(jī)制對于加法注意力而言,更快米酬,同時(shí)更節(jié)省空間沛豌。
輸入q、k赃额、v加派,分別代表query、key-valuepair爬早。這里的 key,value, 和 query需要解釋一下哼丈,這里把a(bǔ)ttention抽象為對 value() 的每個(gè) token進(jìn)行加權(quán),而加權(quán)的weight就是 attentionweight筛严,而 attention weight 就是根據(jù) query和 key 計(jì)算得到醉旦,其意義為:為了用 value求出 query的結(jié)果, 根據(jù) query和 key 來決定注意力應(yīng)該放在value的哪部分。以前的 attention是用 LSTM 做 encoder桨啃,也就是用它來生成key 和 value车胡,然后由 decoder來生成 query。
具體到 Bahdanau 的論文 Neural machine translation by jointly learning to align and translate照瘾,key 和 value是一樣的匈棘,都是文中的h ,而 query是文中的 s析命。
為什么要乘以√1dk主卫?是因?yàn)槿绻鹍_k太大,點(diǎn)乘的值太大鹃愤,如果不做scaling簇搅,結(jié)果就沒有加法注意力好。另外软吐,點(diǎn)乘的結(jié)果過大瘩将,這使得經(jīng)過softmax之后的梯度很小,不利于反向傳播的進(jìn)行凹耙,所以我們通過對點(diǎn)乘的結(jié)果進(jìn)行尺度化姿现。
這里有沒有很像cnn的思想!PけА备典!
之前看的另一篇論文sentence embedding也有類似的用法∨傲ぃ可以參見A Structured Self-attentive Sentence Embedding
Transformer會(huì)在三個(gè)不同的方面使用multi-headattention:
1.encoder-decoder attention:使用multi-head attention熊经,輸入為encoder的輸出和decoder的self-attention輸出泽艘,其中encoder的self-attention作為 key and value欲险,decoder的self-attention作為query
-
encoder self-attention:使用 multi-head attention镐依,輸入的Q、K天试、V都是一樣的(input embedding and positional embedding)
3.decoder self-attention:在decoder的self-attention層中,deocder 都能夠訪問當(dāng)前位置前面的位置
Position-wise feed forward network
image.png
用了兩層Dense層,activation用的都是Relu胁赢∈羌海可以看成是兩層的1*1的1d-convolution。hidden_size變化為:512->2048->512
Position-wise feed forward network带兜,其實(shí)就是一個(gè)MLP 網(wǎng)絡(luò)枫笛,1 的輸出中,每個(gè) d_model 維向量 x 在此先由 xW_1+b_1 變?yōu)?d_f $維的 x'刚照,再經(jīng)過max(0,x')W_2+b_2 回歸 d_model 維刑巧。之后再是一個(gè)residual connection。輸出 size 仍是 $[sequence_length, d_model]$
image.png
Positional embedding
image.png
這樣做的目的是因?yàn)檎液陀嘞液瘮?shù)具有周期性无畔,對于固定長度偏差k(類似于周期)啊楚,post +k位置的PE可以表示成關(guān)于pos位置PE的一個(gè)線性變化(存在線性關(guān)系),這樣可以方便模型學(xué)習(xí)詞與詞之間的一個(gè)相對位置關(guān)系浑彰。
模型整體
Transformer也會(huì)遵循這種結(jié)構(gòu)恭理,encoder和decoder都使用堆疊的self-attention和point-wise,fully connected layers郭变。
Encoder: encoder由6個(gè)相同的層堆疊而成颜价,每個(gè)層有兩個(gè)子層。第一個(gè)子層是多頭自我注意力機(jī)制(multi-head self-attention mechanism)诉濒,第二層是簡單的位置的全連接前饋網(wǎng)絡(luò)(position-wise fully connected feed-forward network)周伦。在兩個(gè)子層中會(huì)使用一個(gè)殘差連接,接著進(jìn)行層標(biāo)準(zhǔn)化(layer normalization)循诉。也就是說每一個(gè)子層的輸出都是LayerNorm(x + sublayer(x))横辆。網(wǎng)絡(luò)輸入是三個(gè)相同的向量q, k和v,是word embedding和position embedding相加得到的結(jié)果茄猫。為了方便進(jìn)行殘差連接狈蚤,我們需要子層的輸出和輸入都是相同的維度。
Decoder: decoder也是由N(N=6)個(gè)完全相同的Layer組成划纽,decoder中的Layer由encoder的Layer中插入一個(gè)Multi-Head Attention + Add&Norm組成脆侮。輸出的embedding與輸出的position embedding求和做為decoder的輸入,經(jīng)過一個(gè)Multi-HeadAttention + Add&Norm((MA-1)層勇劣,MA-1層的輸出做為下一Multi-Head Attention + Add&Norm(MA-2)的query(Q)輸入靖避,MA-2層的Key和Value輸入(從圖中看潭枣,應(yīng)該是encoder中第i(i = 1,2,3,4,5,6)層的輸出對于decoder中第i(i = 1,2,3,4,5,6)層的輸入)幻捏。MA-2層的輸出輸入到一個(gè)前饋層(FF)盆犁,經(jīng)過AN操作后,經(jīng)過一個(gè)線性+softmax變換得到最后目標(biāo)輸出的概率篡九。
對于decoder中的第一個(gè)多頭注意力子層谐岁,需要添加masking,確保預(yù)測位置i的時(shí)候僅僅依賴于位置小于i的輸出榛臼。
層與層之間使用的Position-wise feed forward network伊佃。
實(shí)驗(yàn)
總結(jié)我們的結(jié)果,并將我們的翻譯質(zhì)量和培訓(xùn)成本與文獻(xiàn)中的其他模型架構(gòu)進(jìn)行比較沛善。
我們通過將訓(xùn)練時(shí)間航揉,所使用的GPU數(shù)量以及每個(gè)GPU的持續(xù)單精度浮點(diǎn)容量相乘來估計(jì)用于訓(xùn)練模型的浮點(diǎn)運(yùn)算的數(shù)量。
可以看出金刁,transformer 用了最少的資源得到了state-of-art的輸出回報(bào)帅涂。
值得注意的是
這是今年5月份facebook發(fā)布的用cnn做機(jī)器翻譯,當(dāng)時(shí)說他們?nèi)〉昧俗詈玫慕Y(jié)果胀葱,然而不到一個(gè)月就被google用一堆a(bǔ)ttention來了回?fù)簟?br>
對模型自身的一些參數(shù)做了改變自變量的測試漠秋,看一下哪些參數(shù)對模型的影響比較大。
將task推廣到其他任務(wù)上發(fā)現(xiàn)效果也很好抵屿,這里是英國選民分析任務(wù)庆锦。
Conclusion
思考
1.將soft attention換成local attention效果如何?
2.將task 換成文本摘要效果如何轧葛?
- 處理中文翻譯效果如何搂抒?