注意力機制(attention mechanism)
Attention實質上是一種分配機制,其核心思想是突出對象的某些重要特徵。根據Attention對象的重要程度,重新分配資源,即權重,實現核心思想是基於原有的數據找到其之間的關聯性,然後突出其某些重要特徵。注意力可以被描述為將一個查詢和一組鍵值對映射到一個輸出,其中查詢、鍵、值和輸出都是向量。輸出以加權和的形式計算的兼容性函數計算賦給每個值的權值。
文章《Attention Is All You Need》我們提出了一種新的簡單網絡結構,完全基於注意力機制,避免重複和全卷積。
傳送門:https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf
自注意力,也被稱內部注意力,是一個與單個序列的不同位置相關的注意力機制,目的是計算序列的表達形式,因為解碼器的位置不變性,以及在DETR中,每個像素不僅僅包含數值信息,並且每個像素的位置信息也很重要。所有的編碼器在結構上都是相同的,但它們沒有共享參數。
Self-Attention
Self-Attention是Transformer最核心的內容,可以理解位將隊列和一組值與輸入對應,即形成querry,key,value向output的映射,output可以看作是value的加權求和,加權值則是由Self-Attention來得出的。
Self_attention的計算過程如下:
將輸入單詞轉化成嵌入向量;根據嵌入向量得到q,k,v三個向量;為每個向量計算一個score:score=q×v;為了梯度的穩定,Transformer使用了score歸一化,即除以sqrt(dk);對score施以softmax激活函數;softmax點乘Value值v,得到加權的每個輸入向量的評分v;相加之後得到最終的輸出結果z。
用三個指標來評估:
1)每一層的計算複雜度
2)能夠被並行的計算,用需要的最少的順序操作的數量來衡量
3)任何輸入和輸出之間的最長path length。在處理序列信息的任務中很重要的在於學習long-range dependencies。影響學習長距離依賴的關鍵點在於前向/後向信息需要傳播的步長,輸入和輸出序列中路徑越短,那麼就越容易學習long-range dependencies。
同時self-attention的模型可解釋性更好(interpretable).
Transformer
Transformer 模型結構,模型由6個編碼器(Encoder)和6個解碼器(Decoder) 組成,輸入(Inputs)和輸出(Outputs)通過同一個訓練好的詞嵌入層(Word Embedding)將輸入字符轉換為維度為d的向量。
Encoder
Transformer對編碼器(Encoder)與解碼器(Decoder)兩端的序列分別添加位置編碼(Positional Encoding)。之後,編碼經過含有多頭自注意力機制(Multi-head Self-Attention)、位置前向傳播網絡(Position-wise Feed-Forward Network)、殘差連接(Residual Connection)和層歸一化(Layer Normalization)的計算單元。
Encoder有6層,每層包括兩個sub-layers:
第一個sub-layer是multi-head self-attention mechanism,用來計算輸入的self-attention第二個sub-layer是簡單的全連接網絡。
2.2 Decoder
Decoder是6層結構,每層包括3個sub-layers:
第一個是Masked multi-head self-attention,也是計算輸入的self-attention,但是因為是生成過程,因此在時刻 的時候,大於 的時刻都沒有結果,只有小於 的時刻有結果,因此需要做Mask第二個sub-layer是全連接網絡,與Encoder相同第三個sub-layer是對encoder的輸入進行attention計算。
那麼Scaled Dot-Product Attention的示意圖如下所示,Mask是可選的(opt.),如果是能夠獲取到所有時刻的輸入(K, V), 那麼就不使用Mask;如果是不能獲取到,那麼就需要使用Mask。使用了Mask的Transformer模型也被稱為Transformer Decoder,不使用Mask的Transformer模型也被稱為Transformer Encoder。
如果只對Q、K、V做一次這樣的權重操作是不夠的,這裡提出了Multi-Head Attention,操作包括:
首先對Q、K、V做一次線性映射,將輸入維度均為 的 矩陣映射到 , , 然後在採用Scaled Dot-Product Attention計算出結果多次進行上述兩步操作,然後將得到的結果進行合併將合併的結果進行線性變換
因此輸入和輸出的矩陣維度相同。這樣輸出的矩陣,每行的向量都是對向量中每一行的加權,示意圖如下所示
在圖1的Encoder-Decoder架構中,有三處Multi-head Attention模塊,分別是:
Encoder模塊的Self-Attention,在Encoder中,每層的Self-Attention的輸入 , 都是上一層的輸出。Encoder中的每個position都能夠獲取到前一層的所有位置的輸出。Decoder模塊的Mask Self-Attention,在Decoder中,每個position只能獲取到之前position的信息,因此需要做mask,將其設置為 Encoder-Decoder之間的Attention,其中 來自於之前的Decoder層輸出, 來自於encoder的輸出,這樣decoder的每個位置都能夠獲取到輸入序列的所有位置信息。
Position Embeddin
由於Transformer的計算拋棄了循環結構的遞歸和卷積,無法模擬文本中的詞語位置信息,因而需要人為添加。該過程稱為位置編碼(Positional Encoding),使用詞的位置向量,表示單詞在句中的位置與詞間的相對位置,在Transformer中與句子的嵌入表示相加,獲得模型輸入。
Position Embedding本身是一個絕對位置的信息。這表明位置p+k的向量可以表示成位置p的向量的線性變換,這提供了表達相對位置信息的可能性。position embedding,通常是一個訓練的向量,但是position embedding只是extra features,有該信息會更好,但是沒有性能也不會產生極大下降,因為RNN、CNN本身就能夠捕捉到位置信息,但是在Transformer模型中,Position Embedding是位置信息的唯一來源,因此是該模型的核心成分,並非是輔助性質的特徵。
也可以採用訓練的position embedding,但是試驗結果表明相差不大,因此論文選擇了sin position embedding,因為
這樣可以直接計算embedding而不需要訓練,減少了訓練參數這樣允許模型將position embedding擴展到超過了training set中最長position的position,例如測試集中出現了更大的position,sin position embedding依然可以給出結果,但不存在訓練到的embedding。
測試
在英德翻譯上開發集評估Transformer性能衡量的變化表現。