Attention Is All You Need

簡介

在 2017 年,由 self attention 構成的新模型 Transformer 被提出。
最初使用在文本翻譯的研究上,從而推廣至整個 NLP 領域。
但實際上,只要能將問題轉換成「N個一維張量」,就能使用 Transformer 處理。

優點

缺點

架構

Transformer 主要由「Encoders」以及「Decoders」兩區塊組成,
Encoders 負責利用上下文資訊精煉 Input 的特徵,
Decoders 則是關注 Input 與 Target 的關聯性,並藉此取得所需的資訊。

Transformer 架構圖

Encoder 與 Decoder 的內部機制便是本論文的重點:Multi Head Self Attention

Multi Head Self Attention

Multi Head Attention 是由多個 Scaled Dot Product Attention 組成。
每個 Scaled Dot Product Attention 會計算出不同的 Head
Head 就像是 CNN 的 Feature Map 一樣,
各 Head 具有自己關注的特徵,從越多方面取得特徵便能獲得更好的效果。

Transformer 架構圖

Scaled Dot Product Attention

Attention Function 如下式

Attention(Q,K,V)=Softmax((Q*K^T)/(depth_k^0.5))*V

其中

Attention(Q,K,V)=Softmax((Q*K^T)/(depth_k^0.5))*V

Qin/Kin/Vin 矩陣都是由一句話傳換成的詞向量。
而其中 Kin 與 Vin 是相同的矩陣

大小分別為:

  • Qin:length Q x dembedding
  • Kin:length K x dembedding
  • Vin:length K x dembedding

Transformer 架構圖
上圖為 Qin、Kin、Vin 的例子

Qin/Kin/Vin 經過各自的線性轉換後變成 Q/K/V 矩陣:

Transformer 架構圖

另外,Q/K/V 轉換完後的大小分別為

  • Q:length Q x dk
  • K:length K x dk
  • V:length K x dv

轉換完成後就進入 Attention Function。
利用內積計算 Q 的每個向量與 K 的每個向量的相似程度,若向量夾角越小,便會得到較大的內積,
因此先將 Q 與 K 的轉置矩陣 K^T 相乘得出 QK 舉陣:
(等同計算 Q 的每個向量與 K 的每個向量的內積)

Transformer 架構圖

再將 QK 矩陣除以 dk^0.5 後帶入 Softmax 得到注意力權重:
(除以 dk^0.5 是為了避免注意力權重只剩下接近 0 與 1 的數值,如果沒有進行縮放會使計算所得之梯度非常小,造成梯度消失而無法更新權重。)

Transformer 架構圖

計算出注意力權重後,便可利用 V 來建立出 Head:

Transformer 架構圖

Multi Head

Attention(Q,K,V)=Softmax((Q*K^T)/(depth_k^0.5))*V

Multi Head Attention 就是將多個 Scaled Dot Product Attention 的結果串聯後經過一次線性轉換。
線性轉換後的大小為 length Q x dembedding,與輸入的 Qin 大小一致。

Transformer 架構圖

在向量空間中的意義

Input & Target

Embedding

Positional Encoding

在全部由 Self Attention 構成的 Transformer 中,無法做到如同 RNN 與 CNN 那樣自然的掌握位置資訊。
但是處理序列問題時,位置資訊又非常重要,因此使用了 Positional Encoding 的方式手動的將訊息寫進輸入之中

PositionalEncoding(Input)=Input+PE

上式的 PE 就是記載著位置資訊的矩陣,其內容如下式:

PE[pos,2i]=sin(pos/10000^(2i/d_embedding)),PE[pos,2i+1]=cos(pos/10000^((2i+1)/d_embedding))

其中的 pos2i、2i+1 意義如下:

  • pos:句子中的第 pos 個字詞。
  • 2i、2i+1:word embedding 後所得向量的第 n 維。
positional encoding 範例
上圖是 50 個字詞、dembedding = 10 的 PE 範例

Encoders & Decoders

Encoders Decoders 是 Transformer 的核心區塊,
他們個別由多層的 Encoder Layer 與 Decoder Layer 相疊而成,
每層都具有各自的可訓練權重。

當 Input 經過 Encoders 後,就會做為 Decoders 的 K/V ,將 Input 的資訊傳遞過去。

Encoders & Decoders 由多個 encoder layer 與 decoder layer 組成

Encoder Layer

Encoder

Encoder Layer 中有兩塊主要計算結構,
分別是前面所提及的 Multi Head Attention
以及由幾層全連接層(中間有使用 ReLU 作為激活函數)組成的 Feed Forward

Multi Head Attention

在 Encoder Layer 的 Multi Head Attention 中,會傳入相同的 Qin、Kin、Vin

Residual

透過 Residual 的跳接結構可以保留最開始的 Positional Encoding,
因此不必每通過一層 Encoder Layer 就要補上位置資訊,
對於深層的網路也能有效的避免梯度消失。

residual
Layer Normalization
Layer Normalization 會對每個 Word Embedding Vector 做 Z 分數標準化
使其平均值 = 0、標準差 = 1,然後將標準化的結果與一組縮放、偏移權重做計算,便是 Layer Normalization 的最後答案。

Decoder Layer

Decoder Layer

Decoder Layer 與 Encoder Layer 的結構其實很相似,
兩者主要的差異是 Decoder Layer 利用了 Mask 來防止網路偷看未來的資訊。

Masked Multi Head Attention

Masked Multi Head Attention 的作法就是在 Dot Product Attention 計算出 QK 矩陣後,
為其要遮蔽的區域加上一個極大的負值。
如此一來,在經過 softmax 後,Mask 的地方就接近於 0,達到遮蔽的效果。

masking masking-softmax masking-example

如上圖所表示,第一個詞「注意力」就只能關注到自己,
而到最後的「所」則可以取得到前幾個詞的應對關係。

Multi Head Attention

在第二段 Multi Head Attention 重點在於其 Kin 與 Vin 是來自於 Encoders 最後的輸出結果,
這讓 Decoder 能夠充分將「關注上下文抽取出的 Input 資訊」與「前文關注抽取出的 Target 資訊」混合起來的,好得到最終結果。

在翻譯任務的訓練與使用方式

訓練

Transformer 的輸入有兩個,一個是 Input、另一個是 Target,而輸出的詞字數量則會與 Target 相同

使用方式

實驗

基本模型

Transformer 架構圖
N encoder&decoder 的數量
dmodel embedding length (前面的 dembedding)
dff encoder&decoder 中,Feed Forward 隱藏層神經元數量
h Multi-Head Attention 的 head 個數
dk Qinput、Kinput 經過線性轉換得到之 Q、K 的深度(維度)
dv Vinput 經過線性轉換得到之 V 的深度(維度)
Pdrop Dropout 設定的機率
ϵls label smoothing 中的機率雜訊

實驗 A

在固定的 dmodel 下,增加 Head 的數量對提升正確率是有幫助的,
但是,
過量增加時反而會抑制單一 Head 的表達能力,使正確率開始下降

Transformer 架構圖

實驗 B

Transformer 架構圖

實驗 C

Transformer 架構圖

實驗 D

Transformer 架構圖

實驗 E

Transformer 架構圖