<圖學玩家 第042篇 原創文>
接續上一篇Self-attention的分享,這篇文章會介紹Transformer與ViT的部分,以便介紹後續的LRM (Large Reconstruction Model)。
Seq2Seq
Seq2Seq顧名思義就是輸入與輸出都是Sequence,且輸出的長度是由Model決定的:
Seq2Seq也可以用在Multi-label的分類上:
Attention is all you need
Transformer的架構如下,左半部為Encoder,右半部為Decoder:
Encoder
Encoder中的,下圖所示的這個Block
我們先將其簡化為下圖左側的Block。而這個Block實際是由下圖右側的架構所組成。
上圖右側的架構,詳細拆解是下面的這個架構圖。需要注意的有兩點:
- 輸入的vector會再跟Self-attention的輸出接起來,Residual的架構
- 進FC Layer前,會接一層Layer Normalization。
Layer Norm
關於Layer Norm,詳細可以參考這篇。
從下圖來解釋,N表示樣本軸, C表示NN的Layer軸, F是每個Layer的特徵數量。下圖右側就是常見的Batch Normalization,也就是將mini-batch裡每個樣本的每個Feature都進行正規化Feature ~ N(0, 1)。
而左側的Layer Norm,則是同一樣本在不同Layer上做正規化。Layer Norm與Batch Norm都是用來加速收斂,而Layer Norm則更適合於RNN與Transformer這類NN架構。
Decoder
Decoder可以分為兩類,AT (Autoregressive)Decoder與NAT
(Non-autoregressive) Decoder。其示意圖如下
AT Decoder接收一個BEGIN vector,接著會一步一步將輸出的作為下一個輸入Vector。而NAT則是一次將一整排的BEGIN vector作為輸入。
Autoregressive Decoder
如上所述,AT Decoder接收BEGIN vector後,會根據機率從Vector Set中生成一個Output Vector。中文的Vector Set基本上就是所有中文方塊字的集合,而英文通常用th, sh, ly這類字首字尾作為Vector Set。
AT Decoder依序產生Output:
直到Decoder輸出END Vector。
Transformer裡有個Masked Self-attention需要注意一下
其概念就是Sequence輸入中的Vector,僅能看到序列中已經出現過的Vector,其比較可以參考下兩圖:
至於為何這麼做也很直觀。AT Decoder在運行的時候,本來就是一個一個Vector輸出並接續作為下一個輸入,不會看到後面尚未出現的輸出Vector。
Non-autoregressive Decoder
接著討論下圖右邊的NAT Decoder:
NAT Decoder執行速度較快(平行運算,一步完成),而且可以控制輸出長度(例如將輸出除以二加速運行)。
NAT Decoder可以透過以下兩個方法控制輸出長度
1. 訂超長的output length,輸出字串ignore END vector後的vector。
2. 訓練一個Predictor來預測輸出的length
通常來說NAT Decoder的表現會較差,這部分與Multi-modality有關,李宏毅教授的課程中有額外提供相關教學的連結。
Cross Attention
接著我們來討論Encoder與Decoder中間的Cross Attention機制:
從下圖可以看出,Cross Attention其實也就是Self-attention中的q matrix來自Decoder,k和v matrix來自Encoder。
Training
以下圖為例,"機,器,學,習,END"這五個輸出其實就是Classification的結果,所以我們可以計算Cross Entropy。我們的Training就是試著讓這五個輸出的Cross Entropy總和越小越好。
這邊可以注意到,我們是強制給Decoder看到GT的,也就是看到"機,器"時要輸出"學",看到"機,器,學"時要輸出"習"。而這種Training方式稱為Teacher Forcing。
關於訓練的Tips,可以再去搜尋如Copy Mechanism, Guided Attention, Beam Search, Schedule Sampling這些技術。
ViT
關於ViT的詳細介紹,可以參考這篇。
其概念就是將圖片切為多個patch,接著將其依序作為ViT Transformer NN的輸入,其概念與上述的Transformer幾乎是相同的。
最後可以拿ViT與CNN做比較,可以發現再數據量夠大的情況向,ViT的表現會超過CNN。這部分在前一篇Self-attention中就有提到:
如果喜歡筆者的文章分享,可以幫忙追蹤圖學玩家,你們的閱讀與追蹤是筆者繼續為大家分享的動力~