Transformer 是 Google 在 2017 年底發表的論文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 機制,能夠處理輸入序列中的每個元素,并能計算其與序列中其他元素的交互關系的方法,從而能夠更好地理解序列中的上下文關系。
Transformer 模型能夠處理不同長度的序列,捕捉長距離依賴關系,并在大規模數據上進行高效訓練。這使得它成為自然語言處理領域取得重大突破的關鍵模型之一,逐漸取代了 CNN 和 RNN。
目錄
- 一. 預備知識
- 1. Attention 機制
- 2. Self-Attention 機制
- 3. Cross-Attention 機制
- 4. Multi-Head Attention
- 5. 位置編碼
- 二. Transformer
- 1. Input Block
- 2. Encoder Block
- 3. Decoder Block
- 4. Output Block
一. 預備知識
1. Attention 機制
Attention 機制 1 也叫注意力機制,是一種用于改善神經網絡 對輸入序列中不同部分的關注度 的機制。在傳統的神經網絡中,所有輸入信息都被平等對待,無論其在序列中的位置或重要性。而 Attention 機制允許網絡在處理輸入序列時更加關注其中的特定部分,使網絡能夠更靈活地學習輸入之間的關系。
Attention 機制的基本思想是:對于每個輸出位置,網絡都動態地計算一個權重分布,以指示輸入序列中哪些位置更重要。這個權重分布是通過計算 Query(即用戶提出的問題)與 Key(即模型中的知識摘要)之間的關聯度,然后 softmax 歸一化取最大概率的結果,最后查詢得到 Value(即與 Key 相關聯的知識)輸出。
Attention 機制解決了先前 RNN 不能并行計算的問題,節省了訓練時間,并且能夠獲取到局部的關鍵信息。但 Attention 機制也有一些缺點:
- 只能在 Decoder 階段實現并行運算,Encoder 部分依舊采用的是 RNN、LSTM 等按照順序編碼的模型,無法實現并行運算;
- 因為 Encoder 部分仍依賴 RNN,所以中長距離之間的兩個詞相互之間的關系沒有辦法很好的獲取;
為了改進 Attention 機制的缺點,出現了 Self-Attention。
2. Self-Attention 機制
Self-Attention(自注意力)機制是 Attention 的一種特殊形式,它允許一個 序列中的不同位置之間進行交互,而不是像 Attention 機制那樣僅僅對輸入序列的不同部分進行關注。在 Self-Attention 中,對于序列中的每個元素,都會計算該元素與序列中所有其他元素之間的關聯度,然后利用這些關聯度為每個元素分配一個權重。這樣,每個元素都能夠考慮到整個序列的信息,能夠與序列中的所有其他位置進行交互,而不僅僅是局部信息,從而更好地捕捉長距離依賴關系。
Self-Attention 最為突出的應用就是在 Transformer 模型中,它允許模型在處理序列數據時,不受到固定的感受野大小的限制,而能夠根據任務的需要自適應地捕捉不同位置的信息。這使得 Self-Attention 成為了處理序列數據的強大工具,被廣泛用于自然語言處理和其他領域的任務。
如圖所示,X 是嵌入了 Positional Encoding 的 Input Embedding,每一行都是一個詞向量;WQ、WK、WV 分別是用于計算 Query、Keys、Values 的權值矩陣;Q、K、V 分別是 Input Embedding 與權值矩陣計算所得的 Query、Keys、Values 向量,用于計算 Attention 值。
3. Cross-Attention 機制
Cross-Attention(交叉注意力)機制是 Attention 機制的一種擴展,它主要應用于 處理兩個不同序列之間的關系,使得模型能夠對一個序列中的元素關注另一個序列中的相關部分,從而更好地捕捉兩個序列之間的關聯信息。
Cross-Attention 機制的引入使得模型能夠在處理兩個序列時,動態地關注源序列的不同部分,從而更好地理解源序列與目標序列之間的關系。這在處理序列對之間的任務時非常有用,比如在問答、機器翻譯等任務中。
Transformer 的 Decoder 部分使用 Cross-Attention 機制來處理輸入序列和輸出序列之間的關系。具體來說,Decoder 在生成目標序列的每個位置時,能夠動態地關注輸入序列的不同部分,更好地對應輸入和輸出之間的對應關系,尤其在翻譯等任務中效果顯著。
4. Multi-Head Attention
Multi-Head Attention 是 Transformer 模型中的一種注意力機制,它是對單一 Attention 頭的擴展。通過使用多個獨立的 Attention 頭,模型能夠并行地學習不同的關注權重,從而更好地捕捉序列中的不同關系。這有助于提高模型的表達能力和學習復雜關系的能力。
Multi-Head Attention 使用多個獨立的 Attention 頭,對于每個Attention頭,學習三個線性變換,分別用于生成各自的 Query、Key 和 Value;然后使用每個頭的 Query、Key 和 Value 并行計算關聯度和權重;再將多個頭的輸出拼接在一起以增加模型對不同關系和特征的表達能力;最后將拼接后的輸出通過線性變換生成最終的 Multi-Head Attention 的輸出。
通過使用多個 Attention 頭,模型能夠學習到數據不同方面的表示,從而更全面地捕捉序列中的關系。這種多頭機制在提高模型的性能、泛化能力和處理復雜任務方面都發揮了重要作用。
5. 位置編碼
位置編碼 (Positional Encoding) 2 是為了在 Transformer 等無法處理序列順序信息的模型中引入位置信息而設計的一種技術。由于 Transformer 沒有像循環神經網絡 RNN 那樣的內在順序感知,因此位置編碼的目的是為模型提供有關輸入序列中元素位置的信息。
位置編碼的一種常見形式是通過將位置信息嵌入到輸入向量中來實現,這個向量的設計通常基于三角函數或正弦余弦函數,以確保模型能夠學到有關序列位置的有用信息。以正弦余弦函數為例,對 Input Embedding 中每個位于 p o s pos pos 的字符和字符中的位置 i i i,位置編碼的計算方式如下 3:
PE ( p o s , 2 i ) = sin ? ( p o s 10000 2 i / d ) PE ( p o s , 2 i + 1 ) = cos ? ( p o s 10000 2 i / d ) \text{PE}(pos, 2i) = \sin\left(\frac{pos}{{10000}^{2i/d}}\right)\\ \text{PE}(pos, 2i+1) = \cos\left(\frac{pos}{{10000}^{2i/d}}\right) PE(pos,2i)=sin(100002i/dpos?)PE(pos,2i+1)=cos(100002i/dpos?)
其中, PE \text{PE} PE 是位置編碼, p o s pos pos 是當前字符在輸入文本中的位置, i i i 是當前字符編碼某一位置的索引, d d d 是 Input Embedding 中每個字符編碼的維度。這種位置編碼的設計允許模型在不同位置和不同維度上學到有關位置的信息。
在訓練過程中,這些位置編碼與輸入嵌入相加,從而將位置信息引入模型。位置編碼的選擇是可學習的,因此模型可以根據任務學到最適合的位置表示。通過引入位置編碼,Transformer 能夠更好地處理序列中元素的順序關系,從而更好地捕捉長距離的依賴關系。
二. Transformer
Transformer4 是一種神經網絡架構,引入了 Self-Attention 機制,允許模型同時處理輸入序列中的所有位置信息,而無需使用循環神經網絡或卷積神經網絡。Transformer 的核心部分是 Encoder 和 Decoder 塊:編碼器接收一段輸入序列,進行一系列的自注意力和全連接網絡操作,并輸出一段連續的表示;解碼器部分接受編碼器的輸出以及之前解碼器的輸出,生成新的輸出。
1. Input Block
Transformer 將輸入文本分詞然后編碼為詞向量序列,也就是 Input Embedding。詞向量可以是 word2vec、GloVe、one-hot 等編碼形式,不同詞向量都具有相同的維度。處理好 Input Embedding 后需要給每個詞向量添加位置編碼,來保留輸入文本內部的相對位置信息。以輸入文本 “Tom chase Jerry” 為例,Input Block 內部如下:
Input Embedding 和 Output Embedding 都屬于 Input Block,只有在訓練期間才會接收 Output Embedding 輸入,進行預測時 Output Embedding 不接受輸入。
2. Encoder Block
Encoder Block 由多個 Encoder 堆疊而成,每個 Encoder 內部包括 Multi-Head Attention 和 Feed Forward:
Multi-Head Attention 就是在 Self-Attention 的基礎上,使用多組 WQ、WK、WV 得到多組 Query、Keys、Values,然后每組分別計算得到一個 Z 矩陣,最后進行拼接。
Feed Forward 是一個普通的全連接網絡,依次做線性、ReLU 非線性等變換。
Multi-Head Attention 和 Feed Forward 后面都加入了 Add 和 Normalize 層:Add 層就是在 Z 的基礎上添加殘差塊 X(其實就是 Multi-Head Attention 的輸入 X),防止在深度神經網絡訓練中發生退化問題;Normalize 層用于對輸入數據 Normalize 歸一化,從而加快訓練速度、提高訓練的穩定性。
3. Decoder Block
Decoder 的輸入分訓練和預測兩種:訓練時的輸入就是已經準備好的 target 數據,例如翻譯任務中 Encoder 輸入"Tom chase Jerry",Decoder 輸入 “湯姆追逐杰瑞”;預測時的輸入則是上一時刻 Transformer 的輸出。
Decoder Block 相較于 Encoder Block 只增加了 Masked Multi-Head Attention:
Masked Multi-Head Attention 就是在 Multi-Head Attention 的基礎上多加了一個 mask 碼,對部分值進行掩蓋使其在參數更新時不產生效果。
4. Output Block
Output Block 結構簡單:先經過一次線性變換,然后 Softmax 就可以得到輸出的概率分布。
史上最小白之Attention詳解 ??
transformer學習筆記:Positional Encoding(位置編碼) ??
Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30. ??
史上最小白之Transformer詳解 ??