Attention Is All Your Need論文筆記

Abstract

主要的序列轉導模型基於包括編碼器和解碼器的複雜遞歸或卷積神經網絡。表現最好的模型也通過注意機制連接編碼器和解碼器。作者提出了一個新的簡單的網絡結構,變壓器,完全基於注意機制,完全免除了遞歸和卷積。在兩個機器翻譯任務上的實驗表明,這些模型在質量上是優越的,同時具有更好的並行性,並且需要更少的訓練時間。

1 Introduction

針對nlp裏的機器翻譯問題,提出了一種被稱爲”Transformer”的網絡結構,基於注意力機制。文章提出,以往nlp裏大量使用RNN結構和encoder-decoder結構,RNN及其衍生網絡的缺點就是慢,問題在於前後隱藏狀態的依賴性,無法實現並行,而文章提出的”Transformer”完全摒棄了遞歸結構,依賴注意力機制,挖掘輸入和輸出之間的關係,這樣做最大的好處是能夠並行計算了。

2 Background

所有使用卷積神經網絡作爲基本構建塊,並行計算所有輸入和輸出位置的隱藏表示。將來自兩個任意輸入或輸出位置的信號聯繫起來所需的運算數量隨着位置之間的距離而增加,對於ConvS2S是線性的,對於ByteNet是對數的。這使得學習遙遠位置之間的依賴關係更加困難。在Transformer中,這被減少到恆定的操作次數,儘管代價是由於平均注意力加權位置而降低了有效分辨率,可以使用多頭注意力抵消。

Slef-attention是一種將單個序列的不同位置聯繫起來的注意機制,目的是計算序列的表示。

端到端記憶網絡是基於一種循環注意機制,而不是序列對齊的循環,並已被證明在簡單語言問答和語言建模任務中表現良好。Transformer是第一個完全依靠自我注意來計算其輸入和輸出表示的轉導模型,而不使用序列比對的RNNs或卷積。

3 Model Architecture

大多數自然語言轉換模型都包含一個encoder-decoder結構,模型的輸入是一個離散符號序列(symbol)x=(x_1,x_2,\dots,x_n),encoder負責將它映射成連續值序列z=(z_1,z_2,\dots,z_n)。而給定z,decoder負責生成一個輸出符號序列y=(y_1,y_2,\dots,y_m)。模型是自迴歸的,即之前生成的輸出會作爲額外的輸入,用於生成下一個輸出。

Transformer遵循編碼器和解碼器均採用堆疊式自我關注層和點狀完全連接層。

3.1 Encoder and Decoder Stacks

Encoder:Transformer模型的Encoder由6個基本層堆疊起來,每個基本層包含兩個子層,第一個子層是一個注意力機制,第二個是一個全連接前向神經網絡。對兩個子層都引入了殘差邊以及layer normalization。爲了方便殘差連接,模型中的所有子層以及嵌入層都產生尺寸d_{model} = 512的輸出。

Decoder:解碼器也由N = 6個相同的層組成。除了每個編碼器層中的兩個子層之外,解碼器還插入第三個子層,該子層對encoder的輸出執行多頭注意力。與encoder類似,在每個子層周圍使用殘差連接,然後進行層標準化。我們還修改encoder中的自我關注子層,以防止位置影響後續位置。這種掩碼,加上輸出嵌入偏移一個位置的事實,確保了位置i的預測只能依賴於小於i的位置處的已知輸出。

3.2 Attention

注意函數可以描述爲將查詢和一組鍵值對映射到輸出,其中查詢、鍵、值和輸出都是向量。輸出計算爲值的加權和,其中分配給每個值的權重由查詢與相應鍵的兼容函數計算。

3.2.1 Scaled Dot-Product Attention

輸入包含d_k維的query和key,以及d_v維的value。通過計算query和各個key的點積,除以\sqrt{d_k}歸一化,然後經過softmax激活變成權重,最後再乘value。點積注意力機制的優點是速度快、佔用空間小。

 3.2.2 Multi-Head Attention

用h(本文取8)個不同的線性變換分別將d_{model}維的key、value和query映射成d_k維、d_k維和d_v維,然後再代入注意力機制,產生總共h\times d_v維輸出,然後拼起來,再用一個線性變換得到最終的輸出。

其中h=8,即8個head,d_k = d_v = d_{model}/h = 64. 

3.2.3 Applications of Attention in our Model

  • 在“encoder-decoder attention”層中,query來自前一個decoder層,而key和value是encoder的輸出。這允許decoder的每個位置都去關注輸入序列的所有位置。
  • encoder包含self-attention層,在self-attention層中所有的key、value和query都來自前一層的encoder。這樣encoder的每個位置都能去關注前一層encoder輸出的所有位置。
  • decoder包含self-attention層,decoder中的self-attention層允許decoder中的每個位置關注decoder中的所有位置,直到幷包括該位置。爲了保持decoder的自迴歸特性,需要防止decoder中的左向信息流。通過屏蔽(設置爲負無窮)softmax輸入中對應於非法連接的所有值來實現這個內標度點積注意。

3.3 Position-wise Feed-Forward Networks

 這是一個 Position-wise 前向神經網絡,encoder和decoder的每一層都包含一個前向神經網絡,激活函數順序是線性、RELU、線性。

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

3.4 Embeddings and Softmax

類似於其他序列轉導模型,使用學習嵌入將輸入標記和輸出標記轉換爲維度爲d_{model}的數據模型的向量。還使用通常學習的線性變換和softmax函數將decoder輸出轉換爲預測的下一個令牌概率。在兩個嵌入層和預softmax變換之間共享相同的權重矩陣。在嵌入層中,我們將這些權重乘以\sqrt{d_{model}}

3.5 Positional Encoding

由於本文的模型結構沒有使用任何遞歸結構或卷積結構,爲了讓模型能利用輸入序列的順序信息,必須引入某種能表達輸入序列每個部分的絕對或相對位置的信息纔行。文章採取的方法是位置編碼(positional encoding),在送入encoder和decoder之前,先對輸入進行編碼,編碼後的向量維度是d_{model}。具體來說,採用正弦和餘弦函數進行編碼。

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

4 Why Self-Attention

從三個方面去對比self-attention和遞歸結構、卷積結構的優劣性,首先是每一層的計算複雜度,其次是能夠被並行的計算量,最後是網絡中長期依賴的路徑長度。對比顯示,self-attention表現最好。\

這裏寫圖片描述

5 Training

訓練數據使用WMT English-German數據集,包含450w對語句。句子都被編碼過了,使用了一個大小約37000個token的字典。樣本被分爲若干個batch,每個batch大概25000個token,每個batch中的句子長度保持基本一致。硬件上使用了8塊GPU。Optimizer使用了Adam。過擬合方面使用了dropout和Label Smoothing。

6 Results

不論是英語-德語還是英語-法語的翻譯任務,對比之前的一些模型,本文提出的模型都達到更好的BELU值,同時Training Cost也最低。

本文開源代碼

https://github.com/tensorflow/tensor2tensor

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