Transformer、多頭自注意力機制論文筆記:Attention is all you need

論文原文

論文中心思想:提出了一種只使用注意力機制的模型,模型中沒有結合任何RNN或CNN,通過encoder--decoder的模型實現出了一種強力有效的模型。

 

引言與背景

在注意力機制誕生後,誕生了多種改進的模型,但是這些模型一般都是把注意力機制與循環神經網絡結合(包括一些改良的,如LSTM),但是這些模型有個弊端,就是並行計算能力不強,爲解決這一些問題,論文提出了一種僅基於注意力機制的模型,具有強大的並行計算性以及效果很好。

模型結構

總的模型結構爲encoder-decoder,在編碼器中,把符號表示的輸入序列(x_1,x_2,...,x_n)映射爲連續的表示z = (z_1,...,z_n),得到了z之後,解碼器生成符號輸出序列(y_1,...,y_n),一次一個地生成。

模型結構圖:

編碼解碼器:

Encoder:編碼器由6層一樣的層組成,每一層有兩個子層。第一層是一個多頭自注意力機制,另一層是一個簡單的全連接前饋網絡。在標準化層之後,這兩層各自都採用一個殘差連接,每一個子層的輸出是LayerNorm(x+Sulayer(x)),其中Sublayer(x)是子層本身實現的函數。爲了優化這些殘差裂解,模型中的所有子層以及嵌入層都生成維度512的輸出。

Decoder:解碼器也是6層一樣的層組成的,出來2個在每個編碼器中的子層,第三個是在編碼器輸出後面的一個多頭自注意力層。與編碼器類似,每一個子層標準化後都用一個殘差連接包圍。還有一個爲了保證序列信息的掩蓋層。

注意力

一個注意力函數其實就是把一個query,一個key-value的集合(關於query,key,value可以看這篇論文:Key-Value  Memory Networks for Directly Reading Documents)映射成一個輸出,其中query,key,value,output都是向量。輸出其實是values的加權求和,其中分配給每個值的權重通過一個相關函數計算query與當前key的相關程度。

縮放點乘積注意力

輸入包括:querie和key都是d_k維,value爲d_v維,

計算query和所有key的點積後,除以\sqrt{d_k}(爲了防止梯度消失),以及用一個softmax函數得到全美一個value的權重。

事實上,計算的時候通過矩陣實現並行計算。

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

使用點成的原因是因爲可以通過一些高效的優化手法提升速度。

多頭注意力

其實就是把多個自注意力連起來

MultiHead(Q,K,V)=Concat(head_1,...,head_h)W^o

head_i=Attention(QW_i^Q,KW_i^K,VW_i^V)

同時,通過減低維度來減少總就算消耗。

全連接前饋網絡

Transformer中所有全連接網絡都是一樣的,由兩個線性轉換和中間一個RELU函數組成 。

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

位置編碼

因爲模型沒有使用卷積或者循環結構,爲了使用到序列中的順序信息,必須增加相對或絕對位置信息。爲此論文加入了位置編碼在編碼器和解碼器的下方。

PE_{(pos,2i)}=sin(pos/10000^{2i/d_{model}})

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

其中,pos是位置,i是維度

 

 

 

 

 

發佈了56 篇原創文章 · 獲贊 38 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章