在 2017 年,由 self attention 構成的新模型 Transformer 被提出。
最初使用在文本翻譯的研究上,從而推廣至整個 NLP 領域。
但實際上,只要能將問題轉換成「N個一維張量」,就能使用 Transformer 處理。
Transformer 主要由「Encoders」以及「Decoders」兩區塊組成,
Encoders 負責利用上下文資訊精煉 Input 的特徵,
Decoders 則是關注 Input 與 Target 的關聯性,並藉此取得所需的資訊。
Encoder 與 Decoder 的內部機制便是本論文的重點:Multi Head Self Attention。
Multi Head Attention 是由多個 Scaled Dot Product Attention 組成。
每個 Scaled Dot Product Attention 會計算出不同的 Head,
Head 就像是 CNN 的 Feature Map 一樣,
各 Head 具有自己關注的特徵,從越多方面取得特徵便能獲得更好的效果。
其中
Qin/Kin/Vin
矩陣都是由一句話傳換成的詞向量。
而其中 Kin 與 Vin 是相同的矩陣。
大小分別為:
上圖為 Qin、Kin、Vin 的例子
Qin/Kin/Vin 經過各自的線性轉換後變成 Q/K/V 矩陣:
另外,Q/K/V 轉換完後的大小分別為
轉換完成後就進入 Attention Function。
利用內積計算 Q 的每個向量與 K 的每個向量的相似程度,若向量夾角越小,便會得到較大的內積,
因此先將 Q 與 K 的轉置矩陣 K^T 相乘得出 QK 舉陣:
(等同計算 Q 的每個向量與 K 的每個向量的內積)
再將 QK 矩陣除以 dk^0.5 後帶入 Softmax 得到注意力權重:
(除以 dk^0.5 是為了避免注意力權重只剩下接近 0 與 1
的數值,如果沒有進行縮放會使計算所得之梯度非常小,造成梯度消失而無法更新權重。)
計算出注意力權重後,便可利用 V 來建立出 Head:
Multi Head Attention 就是將多個 Scaled Dot Product Attention 的結果串聯後經過一次線性轉換。
線性轉換後的大小為 length Q x dembedding,與輸入的 Qin 大小一致。
在全部由 Self Attention 構成的 Transformer 中,無法做到如同 RNN 與 CNN 那樣自然的掌握位置資訊。
但是處理序列問題時,位置資訊又非常重要,因此使用了 Positional Encoding
的方式手動的將訊息寫進輸入之中。
上式的 PE 就是記載著位置資訊的矩陣,其內容如下式:
其中的 pos 與 2i、2i+1 意義如下:
上圖是 50 個字詞、dembedding = 10 的 PE 範例
Encoders Decoders 是 Transformer 的核心區塊,
他們個別由多層的 Encoder Layer 與 Decoder Layer 相疊而成,
每層都具有各自的可訓練權重。
當 Input 經過 Encoders 後,就會做為 Decoders 的 K/V ,將 Input 的資訊傳遞過去。
Encoder Layer 中有兩塊主要計算結構,
分別是前面所提及的 Multi Head Attention
以及由幾層全連接層(中間有使用 ReLU 作為激活函數)組成的 Feed Forward。
在 Encoder Layer 的 Multi Head Attention 中,會傳入相同的 Qin、Kin、Vin。
透過 Residual 的跳接結構可以保留最開始的 Positional Encoding,
因此不必每通過一層 Encoder Layer 就要補上位置資訊,
對於深層的網路也能有效的避免梯度消失。
Decoder Layer 與 Encoder Layer 的結構其實很相似,
兩者主要的差異是 Decoder Layer 利用了 Mask 來防止網路偷看未來的資訊。
Masked Multi Head Attention 的作法就是在 Dot Product Attention 計算出 QK 矩陣後,
為其要遮蔽的區域加上一個極大的負值。
如此一來,在經過 softmax 後,Mask 的地方就接近於 0,達到遮蔽的效果。
如上圖所表示,第一個詞「注意力」就只能關注到自己,
而到最後的「所」則可以取得到前幾個詞的應對關係。
在第二段 Multi Head Attention 重點在於其 Kin 與 Vin
是來自於 Encoders 最後的輸出結果,
這讓 Decoder 能夠充分將「關注上下文抽取出的 Input 資訊」與「前文關注抽取出的 Target 資訊」混合起來的,好得到最終結果。