3D生成: LRM Part 2: Transformer與ViT

圖學玩家
Jun 6, 2024

--

<圖學玩家 第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實際是由下圖右側的架構所組成。

上圖右側的架構,詳細拆解是下面的這個架構圖。需要注意的有兩點:

  1. 輸入的vector會再跟Self-attention的輸出接起來,Residual的架構
  2. 進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架構。

SRC

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中就有提到:

如果喜歡筆者的文章分享,可以幫忙追蹤圖學玩家,你們的閱讀與追蹤是筆者繼續為大家分享的動力~

系列文章

  1. 3D生成: LRM Part 1: 自注意力機制
  2. 3D生成: LRM Part 3: Large Reconstruction Model

Ref

  1. 【機器學習2021】Transformer (上)
  2. 【機器學習2021】Transformer (下)

--

--