《Attention is all you need》
論文地址與項目源碼:
[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的機制
二、本文主要工作、模型
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等細節
本文主要包括三種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))
位置編碼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機制可以很好的學習到序列內部的dependency關係,下圖只顯示了make相關,不同顏色代表不同的head。
不同的head針對了不同的task,關注點也不同:
四、總結
一、
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內部可能存在的信息重疊的問題、沒有過多的信息堆積、冗餘、丟失
推薦閱讀: