論文地址與專案原始碼:

[1706。03762] Attention Is All You Need

Kyubyong/transformer

一、主要概念、任務與背景

RNN因為基於時序,無法實現平行計算

attention機制使對於dependency關係的建模不需考慮他們在句子中的距離

本文摒棄了RNN,直接使用attention機制來獲取全域性的輸入輸出之間的dependency關係,這種模型更加合適平行計算,且達到了state of the art

為了減少sequential computation,其他模型都使用了CNN作為encoder來並行的計算生成hidden representation,但是,為了計算兩個位置間的dependency,隨著距離的增加,需要的operation就會線性或者對數性增多,導致學習遠距離的依賴關係更加困難

本文中,只用到固定數量的operation

self-attention,又名intra-attention,是一種將一個句子中不同位置關聯起來從而得到句子的representation的機制

二、本文主要工作、模型

《Attention is all you need》

Encoder:

6個layer,每個layer有兩個sub-layer,sub-layer的通式為:

output = LayerNorm(x+ Sublayer(x)),即對於每一個sub-layer都使用了殘差連線,隨後包上一層layer normalization

第一個sub-layer是一個multi-head self-attention mechanism

第二個sub-layer是一個position-wise的全連線層

模型中的所有sub-layer的輸出以及embedding的維度都是512(num_units)

具體做法是將QKV現在embedding的維度上切成八份,然後進入Scaled Dot-Product Attention,QK做矩陣乘法得到二者之間的匹配度,經過softmax之後施加於values

Decoder:

同樣有6個layer,每個layer在encoder的兩層sub-layer的基礎上在頭部又加了一個sub-layer,作為對於encoder的multi-head attention

Masked self-attention layer,防止輸出會從後面的序列中獲取資訊:第i個位置的輸出只能依賴於已知的i以前的輸出

Self-Attention:

尺度變換是為了防止dot products量綱過大,導致softmax的梯度極小,導致訓練不穩定,這個根號dk就是所謂的scaled,本質上還是dot product

mask是為了保證時間先後關係,下圖未畫入mask和linear等細節

《Attention is all you need》

《Attention is all you need》

《Attention is all you need》

《Attention is all you need》

本文主要包括三種self-Attention:

1、encoder自身的self-attention,Q K V均來自於上一層輸出,當前層的每個position可以attend到上一層的所有位置

2、deocder自身的self-attention,同理,不同之處在於為了避免資訊向左流動,在decoder內的scaled dot-attention加了一個mask-out層(encoder沒有),將所有在softmax的全連線層的非法連線遮蔽掉(置為-∞)

3、encoder-decoder attention,Query來自decoder內部的上一層,KV均來自於encoder的輸出。這一步操作模擬了傳統機器翻譯中的attention過程(資訊的互動)。

前向網路Position-wise Feed-Forward Networks:

由兩個線性變換(

Wx+b

)和一個ReLU(relu的數學表示式就是

f

x

)=

max

(0,

x

《Attention is all you need》

位置編碼Positional Encoding:

encoding編碼的維度和模型dim是一致的,這樣二者才能相加sum:

pos是位置(

for pos in range(T)

),i是維度(

for i in range(num_units)

),意思是positional encoding的每一個維度都對應了一個正弦曲線,波長區間為2π~10000×2π,作者認為這種方法可以使模型更容易去學著attend相關的position

《Attention is all you need》

三、實驗

可以看出,這種attention機制可以很好的學習到序列內部的dependency關係,下圖只顯示了make相關,不同顏色代表不同的head。

《Attention is all you need》

不同的head針對了不同的task,關注點也不同:

《Attention is all you need》

四、總結

一、

1、傳統的attention-based翻譯模型只含有target對source的attention資訊,但是不包含source內部的各部分詞句之間的(語法、邏輯等等)關聯資訊、target亦然,self-attention一定程度上解決了這個問題

2、我認為這種attention機制可以用於機器閱讀理解、問答對話等情景中,不僅包含answer對於source關注資訊,同時包含二者自身內部各部分的邏輯、語義等關係資訊(即各個詞之間的依賴關係)。相比於以往sentiment analysis任務中直接將answer embedding直接concat到input embedding或者hidden layer的上的做法,分別進行self-attention後再進行二者之間的attention,效果或許會更好。

3、Scaled Dot-Product Attention的本質還是點積attention,用這種方法得到Query和keys之間的匹配度資訊,經過softmax後施加於Values上。

二、

1、相比於CNN、RNN,降低了計算複雜度,並且訓練可以實現並行,速度快。

2、相對於CNN有卷積核size限制,提取dependency的範圍有限,本文的attention機制則抓取了全域性的內部關聯資訊,獲取到long-range dependencies,是否可以將這種attrntion看做一個視窗更大的卷積核?

3、不會出現RNN內部可能存在的資訊重疊的問題、沒有過多的資訊堆積、冗餘、丟失