論文翻譯:Attention is all you need

Attention is all you need

摘要

主要的序列轉換模型基於複雜的遞歸或卷積神經網絡,包括編碼器和解碼器。性能最好的模型還通過注意力機制連接編碼器和解碼器。我們提出了一種新的簡單的網絡體系結構Transformer,它完全基於注意力機制,完全不需要重複和卷積。在兩個機器翻譯任務上的實驗表明,這些模型在質量上更優越,同時更具並行性,需要的訓練時間明顯減少。我們的模型在2014年WMT英德翻譯任務中達到28.4 BLEU,比現有的最佳結果(包括集成部分)提高了2個BLEU以上。在WMT 2014英法翻譯任務中,我們的模型在8個GPU上訓練3.5天后,建立了一個新的單模型最新的BLEU分數41.8,這是文獻中最好模型的訓練成本的一小部分。我們通過將其成功地應用於大量和有限訓練數據的英語選區分析中,表明Transformer對其他任務具有很好的通用性。


1. 介紹

遞歸神經網絡,特別是長短期記憶[13]和門控遞歸神經網絡[7],已經被牢固地確立爲序列建模和轉換問題(例如語言建模和機器翻譯)中的最先進的方法[35,2,5]。此後,人們一直在努力擴大循環語言模型和編碼器-解碼器體系結構的界限[38、24、15]。

遞歸模型通常沿輸入和輸出序列的符號位置因數計算。將位置與計算時間中的步驟對齊,它們根據前一隱藏狀態ht1h_{t-1}和位置tt的輸入來生成隱藏狀態hth_t的序列。由於內存限制限制了示例之間的批處理,因此這種固有的順序性妨礙了訓練示例中的並行化,而在更長的序列長度中,並行化變得至關重要。最近的工作已經通過因數分解技巧[21]和條件計算[32]在計算效率方面取得了顯著的改進,同時也提高了針對後者的模型性能。然而,順序計算的基本約束仍然存在。

在各種任務中,注意力機制已經成爲引人注目的序列建模和轉換模型的組成部分,允許對依賴項(相關性)進行建模,而不考慮它們在輸入或輸出序列中的距離[2,19]。但是,在少數情況下[27],在所有情況下,此類注意力機制都與循環網絡結合使用。

在這項工作中,我們提出了 Transformer,一個避免循環的模型架構,而是完全依賴於一個注意力機制來繪製輸入和輸出之間的全局依賴性。Transformer允許更多的並行化,並且可以在8個P100 gpu上進行最少12個小時的訓練,從而在翻譯質量方面達到新的水平。


2. 背景

減少順序計算的目標也構成了擴展神經GPU[16]、ByteNet[18]和ConvS2S[9]的基礎,它們都使用卷積神經網絡作爲基本構件,並行計算所有輸入和輸出位置的隱藏表示。
在這些模型中,將兩個任意輸入或輸出位置的信號關聯起來所需的操作數量在位置之間的距離中增長,對於ConvS2S是線性增長,對於ByteNet是對數增長。這使得學習相距較遠的位置之間的依賴關係變得更加困難[12]。在Transformer中,這可以減少到恆定的操作次數,儘管會因平均注意力加權位置而導致有效分辨率降低的代價,這是我們用3.2中所述的多頭注意力抵消的效果。

自我注意,有時被稱爲內部注意,是一種將單個序列的不同位置聯繫起來以計算該序列的表示的注意機制。自我注意已經被成功地用於各種任務,包括閱讀理解、抽象總結、文本蘊涵和學習任務無關的句子表徵[4,27,28,22]。端到端記憶網絡基於一種遞歸注意機制,而不是按順序排列的遞歸,在簡單語言問題回答和語言建模任務[34]中表現良好。

然而,就我們所知,Transformer是第一個完全依賴於自注意來計算其輸入和輸出表示的轉換模型,而不使用順序排列的RNNs或卷積。在接下來的部分中,我們將描述Transformer,激發self-attention,並討論它相對於[17,18]和[9]等模型的優點。


3. 模型結構

大多數競爭性神經序列轉換模型都具有編碼器-解碼器結構[5,2,35]。這裏,編碼器將符號表示(x1,...,xn)(x_1,...,x_n)的輸入序列映射到連續表示序列z=(z1,...,zn)z=(z_1, ..., z_n)。在給定z\mathbf{z}的情況下,解碼器一次一個元素地生成輸出序列的符號(y1,...,ym)(y_1,... ,y_m)。在每一步,模型都是自迴歸的[10],在生成下一步時使用先前生成的符號作爲附加輸入。

Transformer遵循這個整體架構,對編碼器和解碼器使用堆疊的自關注層和逐點的完全連接層,分別顯示在圖1的左半部分和右半部分。

圖1

3.1 編碼器和解碼器堆棧

編碼器: 編碼器由N=6N=6個相同的堆疊組成。每層都有兩個子層。第一個是多頭自我注意機制,第二個是簡單的位置全連接前饋網絡。我們在每兩個子層周圍使用一個殘餘連接[11],然後使用層標準化[1]。也就是說,每個子層的輸出是LayerNorm(x+Sublayer(x))\text{LayerNorm(}x+\text{Sublayer}(x)\text{)},其中Sublayer(x)\text{Sublayer}(x)是子層本身實現的功能。爲了便於這些殘餘連接,模型中的所有子層以及嵌入層產生維度dmodel=512d_{model}=512的輸出。

解碼器: 解碼器還由N=6N=6個相同的層堆疊而成。除了每個編碼層中的兩個子層之外,解碼器還插入第三個子層,該第三子層對編碼器堆棧的輸出執行多頭關注。與編碼器類似,我們在每個子層周圍使用殘差連接,然後進行層歸一化。我們還修改了解碼器堆棧中的自我注意子層,以防止位置對後續位置的注意。這種掩蔽,與屬於嵌入偏移一個位置的事實相結合,確保了位置ii的預測只能依賴於小於ii的位置的已知輸出。

3.2 注意力

注意函數可以描述爲將query和一組key-value對映射到輸出,其中,query、keys、values都是向量。輸出被計算爲value的加權和,其中分配給每個value的權重是由query與相應的key的兼容性函數計算的。

圖2

3.2.1 Scaled Dot-Product Attention

我們將一種特別的注意機制稱爲“Scaled Dot-Product Attention”(圖2)。輸入包括queries和keys的維度dkd_k,以及values的維度dvd_v。我們用所有keys計算query的點積,然後將每個點積除以dk\sqrt{d_k},然後應用softmax函數來獲得values的權重。

在實踐中,我們同時計算一組queries的注意力函數,並將其打包成一個矩陣QQ。鍵和值也被打包到矩陣KKVV中。我們計算輸出矩陣爲:

Attention(Q,  K,  V)=softmax(QKTdk)V \text{Attention}(Q,\;K,\;V)=softmax(\frac{QK^T}{\sqrt{d_k}})V (1)

兩個最常用的注意函數是加性注意[2]和點積(乘性)注意。除了比例因子1dk\frac{1}{\sqrt{d_k}}外,點積注意與我們的算法相同。加性注意使用帶有單隱層的前饋網絡計算兼容性函數。雖然兩者在理論複雜性上相似,但點積注意在實踐中要快得多,空間效率更高,因爲它可以使用高度優化的矩陣乘法代碼來實現。

而對於較小的dkd_k值,這兩種機制的表現相似,對於較大的dkd_k值,加性注意由於點積注意,而無需縮放[3]。爲了抵消這種影響,我們將點積縮放1dk\frac{1}{\sqrt{d_k}}

3.2.2 Multi-Head Attention

我們發現利用學習到的不同的線性投影將queries,keys和values分別線性投影到dk,  dk,  dvd_k, \; d_k, \;d_v維度hh次是有益的,而不是用dmodeld_{model}維的queries,key,values執行單一的注意函數。然後,在query,key和value的每個投影版本上,我們並行執行注意函數,從而產生dvd_v維輸出的value。這些被連接起來並再次投影,產生最終的值,如圖2所示。

多頭注意力使模型可以共同關注來自不同位置的不同表示子空間的信息。在單一注意力的情況下,平均會抑制這一點。

MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhere  headi=Attention(QWiQ,KWiK,VWiV) \text{MultiHead}(Q, K, V)=\text{Concat}(\text{head}_1,...,\text{head}_h)W^O \\ \text{where} \;\text{head}_i = \text{Attention}(QW_i^Q,KW_i^K,VW_i^V)

其中,投影是參數矩陣WiQRdmodel×dk,WiKRdmodel×dk,WiVRdmodel×dv,WORhdv×dmodelW_i^Q\in \mathbb{R}^{d_{model}\times{d_k}},W_i^K\in \mathbb{R}^{d_{model}\times{d_k}},W_i^V\in \mathbb{R}^{d_{model}\times{d_v}}, W^O\in \mathbb{R}^{hd_v\times d_{model}}

在這項工作中,我們使用h=8h=8個平行注意層或頭。對於其中的每一個,我們使用dk=dv=dmodel/h=64d_k = d_v = d_{model}/h = 64。由於降低了每個頭部的維度,所以總的計算量與全維的單頭注意機制相似。

3.2.3 注意力在我們模型中的應用

Transformer以三種不同方式使用多頭注意力:

  • 在“encoder-decoder attention”層中,query來自先前的解碼器層,而存儲的key和value來自解碼器的輸出。這允許解碼器中的每個位置都關注輸入序列中的所有位置。這模仿了序列到序列模型(如[38,2,9])中典型的編碼器-解碼器注意機制。這模仿了序列到序列模型

  • encoder包含自注意層。在自注意層,所有的key,value,query都來自同一個位置,在本例中是編碼器中上一層的輸出。編碼器的每個位置都可以關注編碼器上一層中的所有位置。

  • 類似地,解碼器中的自注意層允許解碼器中的每個位置關注解碼器中的所有位置,直到幷包括該位置。我們需要防止信息在解碼器中向左流動,以保留自迴歸特效。我們通過屏蔽(設置爲-\infty)Softmax輸入中對應於非法連接的所有value。參見圖2。

基於位置的前饋網絡

除了注意子層,編碼器和解碼器中的每一層都包含一個完全連接的前饋網絡,該網絡分別且相同地應用於每個位置。這由兩個線性變換組成,兩個線性變換之間具有ReLU激活。

FFN(x)=max(0,xW1+b1)W2+b2 \text{FFN}(x)=\text{max}(0,xW_1 + b_1)W_2+b_2 (2)

雖然線性變換在不同位置上相同,但是它們使用不同的參數。另一種描述方式是內核大小爲1的兩個卷積。輸入和輸出的維度dmodel=512d_{model}=512,內層維度dff=2048d_{ff}=2048

3.4 Embeddings and Softmax

與其他序列轉換模型相似,我們使用了學習嵌入將輸入標記和輸出標記轉換爲維度dmodeld_{model}的向量。我們還使用常用的學習線性邊和和softmax函數將解碼器輸出轉換爲預測的下一個標記概率。在我們的模型中,我們在兩個嵌入層和Softmax前的線性變換之間共享想的權重矩陣,類似於[30]。在嵌入層中,我們將這些權重乘以dmodel\sqrt{d_{model}}

3.5 位置編碼

由於我們的模型不包含遞歸和卷積,爲了使模型利用序列的順序,我們必須注入一些關於序列中標記的相對或絕對位置的信息。爲此,我們將“positional encodings”添加到編碼器和解碼器堆棧底部的輸入嵌入中。位置編碼具有嵌入相同的維度dmodeld_{model},從而可以將兩者相加。位置編碼有很多選擇,有學習的和固定的[9]。

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

PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel) PE(pos,2i)=sin(pos/10000^{2i/d_{model}}) \\ PE(pos,2i+1)=cos(pos/10000^{2i/d_{model}})

其中pospos是位置,ii是維度。也就是說,位置編碼的每個維度對應於一個正弦。波長形成從2π到10000·2π的幾何級數。我們選擇這個函數是我們假設它將允許模型很容易地學習通過相對位置參加,因爲對於任何固定的偏移量kkPEpos+kPE_{pos+k}可以表示爲PEposPE_{pos}的線性函數。

我們還試驗了使用習得的位置嵌入[9],發現兩個版本產生的結果幾乎相同(參見表3,第(E)行)。我們選擇正弦曲線版本是因爲它可以使模型外推到比訓練過程中遇到的序列更長的序列長度。


4. Why Self-Attention

在本節中,我們將自注意層的各個方面與通常用於將一個可變長度的符號表示序列x1,...,xnx_1,...,x_n映射到另一個等長序列(z1,...,zn)(z_1,...,z_n)的遞歸和卷積層進行比較,其中xi,ziRdx_i,z_i\in \mathbb{R}^d,例如典型的序列轉換解碼器或解碼器中的隱藏層。爲了激發我們的自我注意力,我們考慮了三個願望。

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

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

如表1所示,自我注意層使用恆定數量的順序執行的操作連接所有位置,而循環層需要O(n)O(n)個順序操作。

表1

就計算複雜度而言,當序列長度nn小於表示維數dd時,自注意層比遞歸層塊,這是機器翻譯中最先進的模型使用句子表示的最常見情況,例如詞段(word-piece)[38]和字節對(byte-pair)[31]表示形式。爲了提高涉及非常長序列的任務的計算性能,可以將自我注意力限制爲僅考慮輸入序列中以各個輸出位置爲中心的大小爲r的鄰域。這會將最大路徑長度增加到O(n/r)O(n/r)。我們計劃在今後的工作中進一步研究這一方法。

具有核寬度k<nk<n的單個卷積層不連接所有的輸入和輸出位置對。這樣做在連續核的情況下需要O(n/k)O(n/k)卷積層的堆棧,或者在擴張卷積的情況下需要O(logk(n))O(log_k(n))的堆棧,從而增加網絡中任意兩個位置之間的最長路徑的長度。卷積層通常比遞歸層昂貴kk倍。然而,可分離卷積[6]將複雜度大大降低到O(knd+nd2)O(k\cdot n\cdot d + n \cdot d^2)。然而,即使在k=nk=n的情況下,可分離卷積的複雜度也等於自注意層和逐點前饋層的組合,也就是我們在模型中採用的方法。

作爲附帶的好處,自注意機制可以產生更多可解釋的模型。我們檢查了我們的模型中的注意力分佈,並在附錄中給出並討論了實例。個體注意力頭不僅清楚地學會執行不同的任務,而且許多人似乎表現出與句子的句法和語義結構相關的行爲。


5. 訓練

本節描述我們的模型的訓練機制。

5.1 訓練數據和批處理

我們在標準的WMT 2014英語-德語數據集上進行了訓練,該數據集由大約450萬個句子對組成。句子使用字節對編碼[3],它具有大約37000個標記的共享源目標詞彙表。對於英語-法語,我們使用了大得多的WMT2014年英法數據集,包括3600萬個句子和拆分成32000個詞條的詞彙表[38]。句子對按近似序列長度成批排列在一起。每個訓練批次包含一組句子對,其中包含大約25000個源標記和25000個目標標記。

5.2 硬件和時間表

我們在一臺配備8個NVIDIA P100 GPU的機器上訓練我們的模型。對於使用本文所述的超參數的基本模型,每個訓練步驟大約需要0.4秒。 我們對基本模型進行了總共100,000步或12個小時的訓練。 對於我們的大型模型(如表3的底行所述),步長爲1.0秒。 大型模型接受了300,000步(3.5天)的訓練。

5.3 優化器

我們使用Adam優化器,其中β1=0.9,β2=0.98,ϵ=109\beta_1=0.9,\beta_2=0.98,\epsilon=10^{-9}。我們在訓練過程中根據公式改變學習率。

lrate=dmodel0.5min(stepnum0.5,stepnumwarmupsteps1.5) lrate=d_{model}^{-0.5}\cdot min(step_num^{-0.5},step_num\cdot warmup_steps^{-1.5}) (3)

這對應於線性增加第一個warmupstepswarmup_steps訓練步驟的學習速率,此後將其與步數的平方根的倒數成比例地降低。我們使用warmupsteps=4000warmup_steps=4000

5.4 正則化

我們在訓練期間採用了三種類型的正規化:

Residual Dropout 我們將Dropout[33]應用於每個子層的輸出,然後將其添加到子層輸入並進行規格化(normalized)。此外,我們對編碼器和解碼器堆棧中的嵌入和位置編碼的總和應用了dropout。對於基本模型,我們使用PdropP_{drop}的比率。

Label Smoothing 在訓練過程中,我們採用值ϵls=0.1\epsilon_{ls}=0.1的標籤平滑處理。隨着模型變得更加不確定,這會減輕困惑(perplexity),但會提高準確性和BLEU得分。


6. 結果

6.1 機器翻譯

在WMT 2014英德翻譯任務中,big transformer模型(表2中的transformer(big))比之前報告的最佳模型(包括集成)的表現超過2.0 BLEU,新的最新BLEU分數爲28.4。

表2

表3的底部列出了該模型的配置。

表3
訓練時間爲3.5天,使用8個P100 gpu。甚至我們的基礎模型也超過了所有以前發佈的模型和集成,而訓練成本只是任何競爭模型的一小部分。

在2014年的WMT英法翻譯任務中,我們的大模型獲得了41.0的BLEU評分,超過了之前發佈的所有單個模型,花費不到之前最先進模型的1/4的訓練成本。接受英法雙語培訓的Transformer (big)模型使用的dropout率Pdrop=0.1P_{drop}= 0.1,而不是0.3。

對於基本模型,我們使用通過平均最近5個檢查點(以10分鐘爲間隔編寫)獲得的單個模型。對於大型模型,我們平均了最後20個檢查點。我們使用beam search,beam大小爲4,長度懲罰α=0.6\alpha=0.6[38]。這些超參數是在開發集上進行實驗後選擇的。我們在推斷過程中將最大輸出長度設置爲輸入長度+50,但在可能的情況下提前終止[38]。

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

6.2 模型變量

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

在表3中的行(A)中,我們改變了注意頭的數量以及注意key和value的大小,使計算量保持不變,如3.2.2節中所述。儘管單頭注意比最佳設置差0.9 BLEU,但過多的頭也會降低質量。

在表3行(B)中,我們觀察到降低注意力的key的大小dkd_{k}會降低模型質量。這表明,確定兼容性是不容易的,一個比點積更復雜的兼容性函數可能是有益的。我們在©和(D)行中進一步觀察到,正如預期的那樣,越大的模型越好,並且dropout對於避免過擬合非常有幫助。在第(E)行中,我們用習得的位置嵌入[9]代替正弦位置編碼,並觀察到與基本模型幾乎相同的結果。

6.3 英語選區分析

爲了評估Transformer是否可以推廣到其他任務,我們進行了英語選民分析的實驗。這項任務提出了一些具體的挑戰:輸出受到強大的結構約束,並且比輸入要長得多。此外,RNN序列到序列模型還不能在小數據區域中獲得最先進的結果[37]。

我們在《華爾街日報》(Wall Street Journal)的Penn Treebank[25]部分訓練了一個dmodel=1024d_{model}=1024的4層Transformer,大約4萬個訓練句子。我們還在半監督環境下對其進行了訓練,使用了來自大約1700萬個句子的較大的高置信度和Berkley Parser語料庫[37]。對於WSJ Only設置,我們使用了16K個標記的詞彙表;對於半監督設置,我們使用了32K個標記的詞彙表。

我們僅進行了少量實驗來選擇第22節開發集上的dropout,注意力和殘差(第5.4節),學習率和波束大小,所有其他參數在英語到德語基礎翻譯模型中均保持不變。在推斷過程中,我們將最大輸出長度增加到輸入長度+300。對於“華爾街日報”和半監督設置,我們都使用了束大小爲21且α=0.3\alpha=0.3的設置。

我們在表4中的結果顯示,儘管缺乏特定於任務的調優,但我們的模型執行得出奇地好,產生的結果比之前報道的所有模型都要好,除了遞歸神經網絡語法[8]。

表4

與RNN序列到序列模型[37]相比,即使只在40K句子的WSJ訓練集上進行訓練,Transformer的性能也要優於BerkeleyParser[29]。


7. 總結

在這項工作中,我們提出了第一個完全基於注意的序列轉換模型Transformer,用多頭自我注意取代了編解碼器結構中最常用的遞歸層。

對於轉換任務,Transformer的訓練速度比基於遞歸或卷積層的架構要快得多。在2014年WMT英法翻譯任務和2014年WMT英法翻譯任務中,我們都達到了一個新的水平。在前一個任務中,我們的最佳模型甚至優於所有先前報告的集成。

我們對基於注意力的模型的未來感到興奮,並計劃將其應用於其他任務。 我們計劃將“Transformer”擴展到涉及文本以外的涉及輸入和輸出方式的問題,並研究局部受限的注意機制,以有效處理大型輸入和輸出,例如圖像,音頻和視頻。 使世代相繼減少是我們的另一個研究目標。

我們用來訓練和評估模型的代碼位於:https://github.com/tensorflow/tensor2tensor


注意力可視化

圖3

在第5層(共6層)中的編碼器自我注意中遵循長距離依賴關係的注意機制的示例。許多注意力集中在動詞“make”的遙遠依賴關係上,完成了短語“make……more difficult”。注意這裏只顯示了“make”這個詞。不同的顏色代表不同的頭。最好用彩色觀看。

圖4

兩個注意頭,也在第5層或第6層,顯然涉及回指消解。上圖:5號頭全神貫注。下圖:將注意力從“it”這個詞中分離出來,表示注意頭5和6。請注意,這個詞的關注度非常高。

圖5

許多注意頭表現出的行爲似乎與句子的結構有關。我們在上面給出了兩個這樣的例子,分別來自編碼器第6層的第5層自我注意的兩個不同的頭。這兩個頭清楚地學會了執行不同的任務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章