[論文筆記] Transformer:Attention Is All You Need

說在前面

個人心得:

1。 self-attention代替了cnn和rnn很厲害

2。 不是搞nlp的很多地方都不是太懂 ,不恰當之處請多多斧正

3。 個人感覺李宏毅老師的影片也講得挺清楚的,

https://www。

bilibili。com/video/BV1J

E411g7XF?p=23

NIPS 2017,原文連結:

https://

arxiv。org/abs/1706。0376

2v5

官方開原始碼:

https://

github。com/tensorflow/t

ensor2tensor

本文作於2020年7月2日。

1、摘要

The dominant sequence transduction models are based on complex recurrent or convolutional neural networks that include an encoder and a decoder。 The best performing models also connect the encoder and decoder through an attention mechanism。

目前佔據主導的序列轉換模型主要基於複雜的遞迴或卷積神經網路,包括編碼器和解碼器。表現最佳的模型還透過注意力機制連線編碼器和解碼器。

We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely。 Experiments on two machine translation tasks show these models to be superior in quality while being more parallelizable and requiring significantly less time to train。

我們提出了一種新的簡單網路架構,即

Transformer

它完全基於注意力機制,沒有使用迴圈或者卷積操作

。在兩個機器翻譯任務上進行的實驗表明,這些模型在質量上具有優勢,同時具有更高的可並行性,並且所需的訓練時間明顯更少。

Our model achieves 28。4 BLEU on the WMT 2014 English-to-German translation task, improving over the existing best results, including ensembles, by over 2 BLEU。 On the WMT 2014 English-to-French translation task, our model establishes a new single-model state-of-the-art BLEU score of 41。8 after training for 3。5 days on eight GPUs, a small fraction of the training costs of the best models from the literature。

我們的模型在WMT 2014 English-to-German翻譯任務上獲得了28。4 BLEU,包括整合在內,比現有的最好結果高2 BLEU。在WMT 2014 English-to-French翻譯任務上,我們的模型建立了單模型的41。8 BLEU的記錄,在八卡GPU訓練了3。5天之後,僅有之前最優模型的一小部分訓練代價。

We show that the Transformer generalizes well to other tasks by applying it successfully to English constituency parsing both with large and limited training data。

我們展示了Transformer透過將其成功應用於具有大量訓練資料和有限訓練資料的英語選區解析,將其很好地應用到了其他任務。

2、引言

遞迴神經網路、LSTM和GRU,已被牢固地確立為序列建模和轉換問題(例如語言建模和機器翻譯)中的最新技術。此後,人們一直在不斷努力以擴大迴圈語言模型和編碼器-解碼器體系結構的界限。

迴圈模型通常沿輸入和輸出序列的符號位置考慮計算。將位置與計算時間中的步驟對齊,它們會根據先前的隱藏狀態

h_{t-1}

和位置

t

的輸入生成一系列隱藏狀態

h_t

。這種固有的順序性質阻止了訓練內的並行化,這在較長的序列長度上變得至關重要,因為記憶體限制了樣本之間的批處理。最近的工作已經透過分解技巧和條件計算在計算效率上取得了顯著提高,同時在有條件的情況下還提高了模型效能。但是,順序計算的基本約束仍然存在。

注意力機制已成為各種任務中引人注目的序列建模和轉換模型不可或缺的一部分,允許對依賴項進行建模,而無需考慮它們在輸入或輸出序列中的距離。但是,除了少數情況外,在所有情況下,此類注意力機制都與迴圈網路結合使用。

在這項工作中,我們提出了一種Transformer,一種避免重複的模型體系結構,而是完全依賴於注意力機制來繪製輸入和輸出之間的全域性依存關係。在八個P100 GPU上進行了長達12個小時的訓練之後,該Transformer可以實現更多的並行化,並在翻譯質量方面達到新的水平。

3、背景

減少順序計算的目標也構成了擴充套件神經GPU、ByteNet和ConvS2S的基礎,它們全部使用卷積神經網路作為基本構建塊,可以平行計算所有輸入和輸出位置的隱藏表示。在這些模型中,關聯來自兩個任意輸入或輸出位置的訊號所需的運算元在位置之間的距離中增加,對於ConvS2S線性增長,而對於ByteNet則對數增長。這使得學習遠處位置之間的依賴性變得更加困難。在Transformer中,此操作被減少為恆定的操作次數,儘管這是由於平均注意力加權位置而導致有效解析度降低的代價,我們Multi-Head注意力抵消了這種效果。

Self-attention,有時也稱為內部注意力,是一種與單個序列的不同位置相關的注意力機制,目的是計算序列的表示形式。Self-attention已成功用於各種任務中,包括閱讀理解、抽象概括、文字蘊涵和學習與任務無關的句子表示。

端到端記憶網路基於迴圈注意力機制,而不是序列對齊的迴圈,並且已經證明在簡單語言問答和語言建模任務中表現良好。據我們所知,

Transformer是第一個完全依靠Self-attention來計算其輸入和輸出表示的轉導模型,而無需使用序列對齊的RNN或卷積

4、模型架構

大多數有競爭力的神經序列轉導模型具有編碼器-解碼器結構。在此,編碼器將符號表示形式

(x_1,...,x_n)

的輸入序列對映到連續表示形式

z =(z_1,...,z_n)

的序列。給定

z

,則解碼器然後一次生成一個元素的符號的輸出序列

(y_1,...,y_m)

。在每個步驟中,模型都是自動迴歸的,在生成下一個時,會將先前生成的符號用作附加輸入。

Transformer遵循這種總體架構,對編碼器和解碼器使用堆疊式自注意力和逐點、全連線層,分別如下圖的左半部分和右半部分所示。

[論文筆記] Transformer:Attention Is All You Need

Encoder and Decoder Stacks

Encoder

:編碼器由

N = 6

個相同層的堆疊組成,每層都有兩個子層(如圖)。第一個是multi-head self-attention機制,第二個是簡單的位置全連線的前饋網路。我們在兩個子層中的每個子層周圍採用殘差連線,然後進行LN。也就是說,每個子層的輸出是

LayerNorm(x + Sublayer(x))

,其中

Sublayer(x)

是由子層本身實現的功能。為了有效利用這殘差連線,模型中的所有子層以及嵌入層均產生尺寸為

d_{model}= 512

的輸出。

Decoder

:解碼器還由

N = 6

個相同層的堆疊組成。除了每個編碼器層中的兩個子層之外,解碼器還插入第三子層,該第三子層對編碼器堆疊的輸出執行multi-head self-attention。與編碼器類似,我們在每個子層周圍採用殘差連線,然後進行LN。我們還修改了解碼器堆疊中的self-attention子層,以防止位置出現在後續位置。這種mask,加上輸出嵌入被一個位置偏移的事實,確保了對位置i的預測只能依賴於小於i位置的已知輸出。

Attention

注意力的功能可以被描述為將query和一組key-value對對映到輸出,其中query、key、value和output都是向量。將output計算為value的加權總和,其中分配給每個值的權重是透過query與相應key的compatibility function來計算的。

Scaled Dot-Product Attention

我們稱我們特殊的注意力為Scaled Dot-Product Attention,其輸入有一系列queries、通道數為

d_k

的keys和通道數為

d_v

的values。我們計算query和每個key的dot product,除以

\sqrt{d_k}

,然後再進行softmax獲得對values的權重。

在操作過程中,我們計算一系列query的attention function是同時的,打包成一個

Q

。Keys和values也被打包成

K

V

中。矩陣計算公式為

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

兩種主要的attention function是加法注意力和乘法注意力。除了除以

\sqrt{d_k}

,乘法注意力和我們的演算法是相同的。加法注意力使用具有單個隱藏層的前饋網路來計算compatibility function。雖然兩者在理論上的複雜度相似,但由於可以使用高度最佳化的矩陣乘法程式碼來實現,因此dot-product的注意力在實踐中要快得多並且節省空間。

儘管對於

d_k

較小的值,這兩種機制的執行方式相似,但加法注意力要優於點積注意力,不需要縮放較大的

d_k

值。

我們懷疑對於較大的

d_k

值,dot product會增大幅度,從而將softmax函式推入梯度極小的區域

。為抵消這種影響,我們將點積縮放

\frac{1}{\sqrt{d_k}}

。關於為什麼dot product會變大,我們假定

q

k

都是獨立隨機變數,均值為0,方差為1。Dot product,

q·k=\sum^{d_k}_{i=1}q_ik_i

,其均值為0,方差為

d_k

[論文筆記] Transformer:Attention Is All You Need

Multi-Head Attention

比起單次attention function對

d_{model}

-dimensional keys、valuesh和queries,我們發現線性投影

h

次,學習不同維度的q、k和v的投影方式是很有益的。然後,在q、k和v的每個這些預計的版本上,我們並行執行attention function,從而產生

d_v

維輸出值。將它們連線起來並再次投影,得到最終值,如上圖所示。

Multi-Head Attention使模型可以共同關注來自不同位置的不同表示子空間的資訊。對於一個注意力的head,平均會抑制這種情況。

MultiHead(Q,K, V) = Concat(head_1, ..., head_h)W^O  \\where head_i = Attention(QW^Q_i ,KW^K_i , VW^V_i)

在這項工作中,我們採用

h = 8

個平行注意力層或head。對於這些中的每一個,我們使用

d_k = d_v = d_{model }/ h =64

。由於每個head的維度減小,因此總的計算成本類似於具有全維度的single-head注意力的計算成本。

Applications of Attention in our Model

Transformer有以下三種使用mutil-head attention的方式:

在“編碼器-解碼器注意”層中,q來自先前的解碼器層,而儲存k和v來自編碼器的輸出。 這允許解碼器中的每個位置都參與輸入序列中的所有位置,這模仿了seq2seq模型中的典型編碼器-解碼器注意力機制;

編碼器包含self-attention層。在Self-attention層中,所有k、v和q都來自同一位置,在這種情況下,是編碼器中上一層的輸出。編碼器中的每個位置都可以覆蓋編碼器上一層中的所有位置;

類似地,self-attention允許解碼器中的每個位置關注直到幷包括該位置的解碼器中的所有位置。我們需要防止解碼器中向左流動資訊,以保留自動迴歸的屬性。我們使用帶有mask的scaled dot-product attention,從而遮蔽掉一些對應的非法連線。

Position-wise Feed-Forward Networks

除了注意力子層之外,我們的編碼器和解碼器中的每個層都包含一個完全連線的前饋網路,該網路分別獨立地、相同地應用於每個位置。這由兩個線性變換組成,兩個線性變換之間具有ReLU啟用。

 FFN(x) = max(0, xW_1 + b_1)W_2 + b_2\\

雖然線性變換在不同位置上相同,但是它們使用不同的引數。另一種描述方式是兩個卷積,其核心大小為1。輸入和輸出的維數為

d_{model} = 512

,內層的維數為

d_{ff} = 2048

Embeddings and Softmax

與其他序列轉導模型相似,我們使用學習的嵌入將輸入標記和輸出標記轉換為尺寸為

d_ {model}

的向量。我們還使用通常學習的線性變換和softmax函式將解碼器輸出轉換為預測的下一個短語機率。在我們的模型中,我們在兩個嵌入層和pre-softmax線性變換之間共享相同的權重矩陣。在嵌入層中,我們將這些權重乘以

\sqrt{d_{model}}

Positional Encoding

由於我們的模型不包含迴圈和卷積,因此為了使模型能夠利用序列的順序,我們必須注入一些在序列中的相對或絕對位置的資訊。為此,我們在編碼器和解碼器堆疊底部的輸入嵌入中新增“位置編碼”。 位置編碼的維數

d_{model}

與嵌入的維數相同,因此可以將兩者相加。位置編碼有很多選擇,可以學習或者固定。

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

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

其中pos是位置,i是維度。也就是說,位置編碼的每個維度都選擇了此函式,因為我們假設它將允許模型輕鬆地學習對應於正弦曲線的參量。波長形成從2π到10000·2π的幾何級數。 我們相對的位置,因為對於任何固定的偏移量k,

PE_{pos + k}

可以表示為

PE_{pos}

的線性函式。

我們還嘗試使用學習的位置嵌入代替,發現這兩個版本產生了幾乎相同的結果。 我們選擇正弦曲線版本是因為它可以使模型外推到比訓練過程中遇到的序列長度更長的序列長度。

5、為什麼選用self-attention

在本節中,我們將self-attention的各個方面與迴圈層和卷積層進行比較,通常用於將一個可變長度的符號表示序列

(x_1,...,x_n)

對映到另一個長度相等的序列

(z_1,...z_n)

,帶有

x_i,z_i∈R^d

,例如典型序列轉導編碼器或解碼器中的隱藏層。為了激發我們的self-attention,我們考慮了三個願望。

一種是每層的總計算複雜度。另一個是可以並行化的計算量,以所需的最少順序運算元來衡量。第三個是網路中遠端依賴關係之間的路徑長度。在許多序列轉導任務中,學習遠端依賴性是一項關鍵挑戰。影響學習這種依賴性的能力的一個關鍵因素是前向和後向訊號必須在網路中穿越的路徑長度。輸入和輸出序列中位置的任何組合之間的這些路徑越短,學習遠端依賴關係就越容易。因此,我們還比較了由不同層型別組成的網路中任意兩個輸入和輸出位置之間的最大路徑長度。

如下表所示,self-attention層使用恆定數量的順序執行的操作連線所有位置,而迴圈層需要

O(n)

個順序操作。 計算複雜度方面,當序列長度

n

小於表示維數

d

時,self-attention層比迴圈層要快,這在機器翻譯中由最新模型使用的句子表示形式最常見,例如詞段和位元組對錶示形式。為了提高涉及非常長序列的任務的計算效能,可以將self-attention限制為僅考慮輸入序列中以各個輸出位置為中心的大小為

r

的鄰域。這會將最大路徑長度增加到

O(n / r)

。我們計劃在以後的工作中進一步研究這種方法。

核心寬度

k<n

的單個卷積層無法連線所有成對的輸入和輸出位置。這樣做需要在連續核心的情況下堆疊

O(n / k)

個卷積層,在擴張卷積的情況下則需要

O(logk(n))

,從而增加了網路中任意兩個位置之間最長路徑的長度。卷積層通常比迴圈層貴

k

倍。可分離的卷積,然而,降低複雜度卷積等於self-attention層和逐點前饋層的組合,相當地等於

O(k·n·d + n·d^2)

。然而,即使

k = n

,我們在模型中採用的可分離方法的複雜性也是如此。

[論文筆記] Transformer:Attention Is All You Need

6、訓練 & 7、實驗結果

主要關注transformer的結構設計,略過實驗部分。

8、總結

在這項工作中,我們提出了Transformer,這是完全基於注意力的第一個序列轉導模型,用multi-headed self-attention代替了編碼器-解碼器體系結構中最常用的迴圈層。

對於翻譯任務,與基於迴圈層或卷積層的體系結構相比,可以大大加快Transformer的訓練速度。在WMT 2014英語到德語和WMT 2014英語到法語翻譯任務上,我們都達到了最高水平。在前一項任務中,我們最好的模型甚至勝過所有先前報告。

我們對基於注意力的模型的未來感到興奮,並計劃將其應用於其他任務。 我們計劃將Transformer擴充套件到涉及除文字之外的輸入和輸出方式的問題,並研究區域性受限的注意力機制,以有效處理大型輸入和輸出,例如影象、音訊和影片。使epoches相繼減少是我們的另一個研究目標。