Attention Is All You Need: Transformer
這篇文章主要介紹發表在 NIPS 2017上的論文
這篇論文提出完全用attention來做序列轉換,拋棄了以往的CNN和RNN結構,是之後大名鼎鼎的BERT的基礎。
1、Introduction
RNN結構在語言模型和Seq2Seq模型中被廣泛使用,但是RNN的一個缺陷是無法像CNN那樣可以並行,這極大的限制了RNN的訓練。已有一些工作來解決這個問題,比如Facebook的ConvS2S。在這篇論文中,Google提出了一種新的模型——Transformer,完全利用self attention來進行建模,能夠更好的捕捉序列的整體依賴關係,並且並行度很高。
2、Model Architecture
Transforme
Transformer還是在已有的Encoder-Decoder框架下構建的,整體如下
Encoder部分由
個相同的模組堆疊而成。每個模組包含兩部分,一個是multi-head self attention,另一個是前向全連線網路。在輸入和輸出之間採用殘差連線的結構,並且輸出都經過一個layer normalization。模型輸出的維度是
。
Decoder部分也有
個模組組成,除去與Encoder中相同的兩層之外,還加入了和Encoder輸出做multi-head self attention。在Decoder中,為了防止未來資訊的加入,還加入了mask,用來保證預測第
個詞時只使用前
個詞。
Scaled Dot-Product Attention
先介紹Scaled Dot-Product Attention。attention的計算包含三個部分,分別是query
、key
和 value
。計算公式為
本質上就是利用內積計算相似度,然後轉化為attention係數,最終將這個係數作用在value上。在計算attention係數的時候加入了
,也就是query和key的維度,這是為了防止維度過大造成較大的內積,然後使得attention相當“尖銳”從而只有較小的梯度。
Multi-Head Attention
接下來再看Multi-Head Attention。其實就是將query,key和value分別做多次對映,然後計算attention最後做concat,也就是
在論文中作者使用
。用圖來表示attention結構如下
具體的模型中,在“encoder-decoder attention”層,query來自decoder,key和value均來自encoder。而在encoder和decoder中,query,key和value都是相同的輸入,當然decoder需要有mask。
FFN
每個模組中的全連線前向網路比較簡單,就是兩個線性變換中間有ReLU的啟用
Positional embedding
由於Transformer結構並不像RNN和CNN一樣有天然的位置資訊,作者加入了Positional Encoder。也就是在word embedding上計入相同維度的位置embedding。雖然這個embedding也可以作為引數進行學習,但是作者提出使用下式
這種embedding不僅有相關位置資訊(pos+k的embedding可以是pos的線性組合),而且不再需要參與訓練。作者對比了將positional embedding作為引數的方法,兩者相差很小。
3、Why Self-Attention
作者從計算複雜度、並行度和長依賴之間需要的path length進行分析,如下表
可以看出 self-attention與RNN和CNN相比還是很有優勢的。第三列個人感覺就是兩個token之間依賴需要的長度。RNN只能從一個token進行到另一個token,而CNN因為有卷積可以更快,self-attention則一步到位,因為每次計算都是所有token參與。
文章中的實驗部分此處就不給出了,在機器翻譯任務上取得了很好的結果。當然現在我們有了BERT,也可以看出Transformer的巨大影響。不過,
並不是所有的任務都可以用Transform這種self attention來解決的,也並不是可以完全替代RNN和CNN。論文Why Self-Attention? A Targeted Evaluation of Neural Machine Translation Architectures對比RNN,CNN和Transformer,只能說是各有千秋,並沒有一個統一的結論證明某個模型就是最好的。而作者也給出了也給restricted的self attention,可能也覺得不是所有任務都需要完整的長依賴。對於演算法工程師,應該選擇最適合的解決業務問題的方法,而對於科研工作者,引用 @劉知遠 老師的回答“這時候不應該反過來想想RNN流怎麼反殺以Transformer為先鋒的CNN流嗎。”