Attention Is All You Need

原文鏈接:Attention Is All You Need

作者:Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin

翻譯參考:一譯:Attention Is All You Need 原始論文中英文對照翻譯

一文讀懂「Attention is All You Need」| 附代碼實現

摘要

主要的序列轉換模型基於複雜的循環或卷積神經網路,包括編碼器和解碼器。最佳性能模型還通過注意力機制連接編碼器和解碼器。我們提出了一種新的簡單網路架構Transformer,它僅僅基於注意力機制,完全不需要循環和卷積。在兩個機器翻譯任務上的實驗表明,這些模型在質量上更優,同時更具並行性,並且需要更少的訓練時間。我們的模型在WMT 2014英語到德語的翻譯任務中達到了28.4 BLEU,比現有的最佳結果(包括集成模型)提高了2個BLEU以上。在WMT 2014英語到法語翻譯任務中,我們的模型在八個GPU上訓練了3.5天後,建立了一個新的單模型,效果為BLEU分數41.8,是其他最好的模型的訓練成本的僅僅一部分。我們表明,Transformer成功地應用於英語成分解析,在訓練數據大且有限的情況下,可以很好地推廣到其他任務。

1 introduction

遞歸神經網路,特別是長短期記憶[13]和門控遞歸[7]神經網路,已經作為序列建模和轉換問題的state-of-the-art的解決方法,諸如在語言模型和機器翻譯上。自那以後,許多努力繼續推進循環語言模型和編碼器-解碼器架構[38,24,15 ]

循環模型通常沿著輸入和輸出序列的符號位置進行計算。將位置與計算時間中的步驟對齊,它們生成隱藏狀態ht序列,作為先前隱藏狀態ht - 1和位置t的輸入的函數。這種固有的順序性質使在訓練中難以並行化,當序列長度較長時這變得相當致命,因為存儲器約束限制了批處理。最近的工作通過因式分解技巧[ 21 ]和條件計算[ 32 ]在計算效率上取得了顯著提高,同時在後者的情況下也提高了模型性能。然而,順序計算的基本約束仍然存在。

注意力機制已經成為各種任務中很重要的一部分,允許對依賴關係進行建模,而不考慮它們在輸入或輸出序列中的距離[ 2,19 ]。然而,在除了少數情況之外的所有情況下,[ 27 ],這種關注機制經常與神經網路結合使用。

在這項工作中,我們提出了Transformer,它不用循環,取而代之的是完全依賴attention機制來描繪輸入輸出之間的全局依賴。Transformer允許更大程度的並行化,並且在八個P100 GPUs上訓練12小時後,翻譯質量可以達到最先進的水平。

2 Background

減少順序計算的目標也是擴展神經GPU[16], ByteNet [18]和ConvS2S [9]的基礎,所有這些都使用卷積神經網路作為基本構件,並行計算所有輸入和輸出位置的隱藏表示。在這些模型中,將來自兩個任意輸入或輸出位置的信號相關聯所需的操作數量隨著位置之間的距離增加,對於ConvS2S為線性,對於ByteNet為對數。這使得了解遠處位置之間的相關性變得更加困難,[ 12 ]。在Transformer中,這操作會被減少到固定數量,儘管由於平均注意力加權位置而降低了有效resolution,正如第3.2節所述,我們用Multi-Head注意力抵消了這種影響。

Self-attention,有時被稱為intra-attention,是一種attention機制,將單個序列的不同位置聯繫起來,以計算該序列的表示。自我關注已經成功地應用於各種任務中,包括閱讀理解、抽象概括、文本蘊涵和獨立於學習任務的句子表徵[ 4、27、28、22 ]。

端到端記憶網路是基於循環注意力機制,而不是序列對齊的循環,在簡單語言問答和語言建模任務中表現良好,[ 34 ]。

然而,Transformer是第一個完全依靠self-attention來計算其輸入和輸出表示的轉換模型,而不使用序列rnn或者卷積模型。在接下來的章節中,我們將描述Transformer,激發self-attention,並討論其優於[ 17、18 ]和[ 9 ]等模型的優勢。

3 Model Architecture

大部分有競爭力的神經序列轉換模型 都有一個encoder-decoder結構。Encoder會把一個輸入的序列表示(x1,x2,。。。Xn)映射為另一個表示z=(z1,。。。Zn)。接著,decoder會根據z輸出序列(y1,。。Ym)。模型的每一步都是自回歸的,並且當生成下一個的時候會消耗以前生成的符號作為額外的輸入。

Transformer大概沿用這種架構,為encoder和decoder同時使用tacked self-attention和point-wise,還有全連接層,分別如下圖的左半部分和右半部分所示。

3.1 Encoder and Decoder Stacks

Encoder:encoder由6個相同層堆疊而成。每一層都有兩個子層。首先是一個multi-head self-attention 機制,第二個是簡單的、按位置全連接的前饋網路。我們在兩個子層的每一個周圍都使用殘差連接,然後是層歸一化。也就是說,每個子層的輸出是LayerNorm(x+ Sublayer(x)),其中Sublayer(x)是由子層本身實現的功能。為了便於這些殘差連接,模型中的所有子層以及嵌入層產生尺寸 d_{model} = 512的輸出。

Decoder:decoder也由6個相同層堆疊而成。除了decoder裡面有的兩個子層,還加入了第三個子層,可以在encoder的輸出上有multi-head attention的功能。我們同樣在子層周圍用殘差連接和層歸一化。我們還修改了decoder堆棧中的self-attention子層,以防止位置關注後續位置。這種masking,加上輸出嵌入偏移一個位置,確保了位置i的預測只能依賴於小於i的位置處的已知輸出。

3.2 Attention

Attention函數可以描述為將query和一組key-value對映射到輸出,其中query、key、value和輸出都是向量。 輸出為value的加權和,其中分配給每個value的權重通過query與相應key的兼容函數來計算。

3.2.1 Scaled Dot-Product Attention

我們稱我們特殊的attention為「縮放版的點積attention」(圖 2)。 輸入由query、 d_k 維的key和d_v 維的value組成。 我們計算query和所有key的點積、用 sqrt{d_{k}} 相除,然後應用一個softmax函數以獲得值的權重。

在實踐中,我們同時計算一組query的attention函數,將它們組合成一個矩陣Q。 key和value也一起打包成矩陣 K 和 V 。 我們計算輸出矩陣為:

兩個最常用的attention函數是加法attention[2]和點積(乘法)attention。 除了縮放因子 frac{1}{sqrt{d_{k}}} 之外,點積attention與我們的演算法相同。 加法attention使用具有單個隱藏層的前饋網路計算兼容性函數。 雖然兩者在理論上的複雜性相似,但在實踐中點積attention的速度更快、更節省空間,因為它可以使用高度優化的矩陣乘法代碼來實現。

d_k 的值比較小的時候,這兩個機制的性能相差相近,當 d_k 比較大時,加法attention比不帶縮放的點積attention性能好[3]。 我們懷疑,對於很大的 d_k 值,點積大幅度增長,將softmax函數推向具有極小梯度的區域。 為了抵消這種影響,我們縮小點積  frac{1}{sqrt{d_{k}}} 倍。(作者備註:為了解釋點積為什麼變大,假設q和k的組成成員是獨立隨機的變數,其均值為0方差為1。然後它們的點積有均值0和方差 d_kd_k 過大會進入softmax的極小梯度區。

3.2.2 Multi-Head Attention

我們發現將query、key和value分別用不同的、學習到的線性映射來映射到 d_kd_kd_v 維h次效果更好,而不是用 d_{model} 維的query、key和value執行單個attention函數。 基於每個映射版本的query、key和value,我們並行執行attention函數,產生d_v 維輸出值。 將它們連接並再次映射,產生最終值,如圖所示 2。

Multi-head attention允許模型的不同表示子空間聯合關注不同位置的信息。 如果只有一個attention head,它的平均值會削弱這個信息。

其中,映射為參數矩陣WiQ ∈ ?dmodel×dk , WiK ∈ ?dmodel×dk , WiV ∈ ?dmodel×dv 及W O ∈ ?hdv×dmodel。

在這項工作中,我們採用h = 8 個並行attention層或head。 對每個head,我們使用 d_k = d_v = d_{model} ∕ h = 64。 由於每個head的大小減小,總的計算成本與具有全部維度的單個head attention相似。

3.2.3 Applications of Attention in our Model

Transformer使用以3種方式使用multi-head attention:

在「編碼器—解碼器attention」層,query來自前一個解碼器層,key和value來自編碼器的輸出。 這允許解碼器中的每個位置能關注到輸入序列中的所有位置。 這模仿序列到序列模型中典型的編碼器—解碼器的attention機制,例如[38, 2, 9]。

編碼器包含self-attention層。 在self-attention層中,所有的key、value和query來自同一個地方,在這裡是編碼器中前一層的輸出。編碼器中的每個位置都可以關注編碼器上一層的所有位置。

類似地,解碼器中的self-attention層允許解碼器中的每個位置都關註解碼器中直到並包括該位置的所有位置。我們需要防止解碼器中的向左信息流,來保持自回歸屬性。通過屏蔽softmax的輸入中所有不合法連接的值(設置為-∞),我們在縮放版的點積attention中實現。 見圖 2.

3.3 Position-wise Feed-Forward Networks

除了attention子層之外,我們的編碼器和解碼器中的每個層都包含一個完全連接的前饋網路,該前饋網路單獨且相同地應用於每個位置。 它由兩個線性變換組成,之間有一個ReLU激活。

儘管線性變換在不同位置上是相同的,但它們層與層之間的參數是不一樣的。 它的另一種描述方式是兩個內核大小為1的卷積。 輸入和輸出的維度為 d_{model} = 512,內部層的維度為 d_{ff} = 2048。

3.4 Embeddings and Softmax

與其他序列轉導模型類似,我們使用學習到的嵌入將輸入詞符和輸出詞符轉換為維度為dmodel的向量。 我們還使用普通的線性變換和softmax函數將解碼器輸出轉換為預測的下一個詞符的概率。 在我們的模型中,兩個嵌入層之間和pre-softmax線性變換共享相同的權重矩陣,類似於[30]。 在嵌入層中,我們將這些權重乘以 sqrt{d_{model}}

3.5 Positional Encoding

由於我們的模型不包含循環和卷積,為了讓模型利用序列的順序,我們必須注入序列中關於詞符相對或者絕對位置的一些信息。 為此,我們將「位置編碼」添加到編碼器和解碼器堆棧底部的輸入嵌入中。 位置編碼和嵌入的維度 d_{model} 相同,所以它們倆可以相加。 有多種位置編碼可以選擇,例如通過學習得到的位置編碼和固定的位置編碼[9]。

在這項工作中,我們使用不同頻率的正弦和餘弦函數:

其中pos 是位置,i 是維度。 也就是說,位置編碼的每個維度對應於一個正弦曲線。 這些波長形成一個幾何級數,從2π 到10000 ? 2π。 我們選擇這個函數是因為我們假設它允許模型很容易學習對相對位置的關注,因為對任意確定的偏移k, PE_{pos+k} 可以表示為 PE_{pos} 的線性函數。

我們還使用學習到的位置嵌入進行了試驗,發現這兩個版本產生幾乎相同的結果(參見表 3 行(E))。 我們選擇了正弦曲線,因為它允許使用時出現比訓練時更長的序列。

4 Why Self-Attention

本節,我們比較self-attention與循環層和卷積層的各個方面,它們通常用於映射變長的符號序列表示(x1,...,xn) 到另一個等長的序列(z1,...,zn),其中xi,zi ∈ ?d,例如一個典型的序列轉導編碼器或解碼器中的隱藏層。 我們使用self-attention是考慮到要解決三個問題。

一個是每層計算的總複雜度。 另一個是可以並行的計算量,以所需的最小順序操作的數量來衡量。

第三個是網路中長距離依賴之間的路徑長度。 學習長距離依賴性是許多序列轉導任務中的關鍵挑戰。 影響學習這種依賴能力的一個關鍵因素,是前向和後向信號必須在網路中傳播的路徑長度。 輸入和輸出序列中任意位置組合之間的這些路徑越短,學習遠距離依賴性就越容易[12]。因此,我們還比較了由不同層類型組成的網路中任意兩個輸入和輸出位置之間的最大路徑長度。

如表1所示,self-attention層將所有位置連接到恆定數量的順序執行的操作,而循環層需要O(n) 順序操作。 在計算複雜性方面,當序列長度n 小於表示維度d 時,self-attention層比循環層快,這是機器翻譯中最先進的模型最常見情況,例如單詞[38]表示法和位元組對[31]表示法。為了提高涉及很長序列的任務的計算性能,可以將self-attention限制在僅考慮大小為r 的鄰域。 這會將最大路徑長度增加到O(n ∕ r)。 我們計劃在未來的工作中進一步調查這種方法。

核寬度為k < n的單層卷積不會連接每一對輸入和輸出的位置。 要這麼做,在鄰近核的情況下需要O(n∕k) 個卷積層, 在擴展卷積的情況下需要O(logk(n)) 個層[18],它們增加了網路中任意兩個位置之間的最長路徑的長度。 卷積層通常比循環層更昂貴,與因子k有關。然而,可分卷積[6]大幅減少複雜度到O(k ?n?d + n?d2)。 然而,即使k = n,一個可分卷積的複雜度等同於self-attention層和point-wise前向層的組合,即我們的模型採用的方法。

間接的好處是self-attention可以產生更可解釋的模型。 我們從我們的模型中研究attention的分布,並在附錄中展示和討論示例。 每個attention head不僅清楚地學習到執行不同的任務,許多似乎展現與句子的句法和語義結構的行為。

5 Training

本節介紹我們的模型訓練方法。

5.1 訓練數據和批次

我們在標準的WMT 2014英語-德語數據集上進行了訓練,其中包含約450萬個句子對。 這些句子使用位元組對編碼[3]進行編碼,源語句和目標語句共享大約37000個詞符的辭彙表。 對於英語-法語翻譯,我們使用大得多的WMT 2014英法數據集,它包含3600萬個句子,並將詞符分成32000個word-piece辭彙表[38]。 序列長度相近的句子一起進行批處理。 每個訓練批次的句子對包含大約25000個源詞符和25000個目標詞符。

5.2 硬體和時間

我們在一台具有8個NVIDIA P100 GPU的機器上訓練我們的模型。 使用本文描述的超參數的基礎模型,每個訓練步驟耗時約0.4秒。 我們的基礎模型共訓練了10萬步或12小時。 對於我們的大模型(表格三底部一行), 每一步耗時1秒. 大模型訓練了30萬步(3.5天)。

5.3 優化

我們使用Adam優化[20],其中β1 = 0.9, β2 = 0.98 及? = 10-9。 我們根據以下公式在訓練過程中改變學習率:

這對應於在第一次warm up_steps 步驟中線性地增加學習速率,並且隨後將其與步驟數的平方根成比例地減小。 我們使用warm up_steps = 4000。

5.4 正則化

訓練期間我們採用三種正則化:

殘差dropout 我們將dropout[33]在它與子層的輸入相加和正則化之前,應用到每個子層的輸出中。 此外,在編碼器和解碼器堆棧中,我們將dropout應用到嵌入和位置編碼的和這一步驟中。 對於基本模型,我們使用P_{drop} = 0.1。

Label Smoothing 在訓練過程中,我們使用的label smoothing的值為?ls = 0.1[36]。 這讓模型不易理解,因為模型學得更加不確定,但提高了準確性和BLEU得分。

6 Results

6.1 Machine Translation

在WMT 2014英語-德語翻譯任務中,大型transformer模型(表2中的Transformer (big))比以前報道的最佳模型(包括集成模型)高出2.0個BLEU以上,確立了一個全新的最高BLEU分數為28.4。 該模型的配置列在表3的底部。 訓練在8 個P100 GPU上花費3.5 天。 即使我們的基礎模型也超過了以前發布的所有模型和整合模型,且訓練成本只是這些模型的一小部分。

在WMT 2014英語-法語翻譯任務中,我們的大型模型的BLEU得分為41.0,超過了之前發布的所有單一模型,訓練成本低於先前最先進模型的1 ∕ 4 。 英語-法語的Transformer (big) 模型使用丟棄率為P_{drop} = 0.1,而不是0.3。

對於基礎模型,我們使用的單個模型來自最後5個檢查點的平均值,這些檢查點每10分鐘寫一次。 對於大型模型,我們對最後20個檢查點進行了平均。 我們使用beam search,beam大小為4 ,長度懲罰α = 0.6 [38]。 這些超參數是在開發集上進行實驗後選定的。 在推斷時,我們設置最大輸出長度為輸入長度+50,但在可能時儘早終止[38]。

表2總結了我們的結果,並將我們的翻譯質量和訓練成本與文獻中的其他模型體系結構進行了比較。 我們通過將訓練時間、所使用的GPU的數量以及每個GPU的持續單精度浮點能力的估計相乘來估計用於訓練模型的浮點運算的數量。

6.2 Model Variations

為了評估Transformer不同組件的重要性,我們以不同的方式改變我們的基礎模型,測量開發集newstest2013上英文-德文翻譯的性能變化。我們使用前一節所述的beam搜索,但沒有平均檢查點。 我們在表中列出這些結果。

在表3的行(A)中,我們改變attention head的數量和attention key和value的維度,保持計算量不變,如3.2.2節所述。 雖然只有一個head attention比最佳設置差0.9 BLEU,但質量也隨著head太多而下降。

在表3行(B)中,我們觀察到減小key的大小dk會有損模型質量。 這表明確定兼容性並不容易,並且比點積更複雜的兼容性函數可能更有用。我們在行(C)和(D)中進一步觀察到,如預期的那樣,更大的模型更好,並且dropout對避免過度擬合非常有幫助。 在行(E)中,我們用學習到的位置嵌入[9]來替換我們的正弦位置編碼,並觀察到與基本模型幾乎相同的結果。

7 結論

在這項工作中,我們提出了Transformer,第一個完全基於attention的序列轉導模型,用multi-headed self-attention取代了編碼器-解碼器架構中最常用的循環層。

對於翻譯任務,Transformer可以比基於循環或卷積層的體系結構訓練更快。 在WMT 2014英語-德語和WMT 2014英語-法語翻譯任務中,我們取得了最好的結果。 在前面的任務中,我們最好的模型甚至勝過以前報道過的所有集成模型。

我們對基於attention的模型的未來感到興奮,並計劃將它們應用於其他任務。 我們計劃將Transformer擴展到除文本之外的涉及輸入和輸出模式的問題,並調查局部的、受限attention機制以有效處理大型輸入和輸出,如圖像、音頻和視頻。 讓生成具有更少的順序性是我們的另一個研究目標。

我們用於訓練和評估模型的代碼可以在github.com/tensorflow/t上找到。

Attention Is All You Need(完)

有任何疑問或者糾錯,作者隨時在線哦

關注專欄

隨經典論文看機器閱讀理解發展史?

zhuanlan.zhihu.com
圖標

推薦閱讀:
相关文章