3D生成: LRM Part 1: 自注意力機制

圖學玩家
May 9, 2024

--

<圖學玩家 第040篇 原創文>

Ref from Self-attention

Introduction

Large Reconstruction Model顧名思義借鏡了LLM,是參數量級非常大的3D生成模型。其中用到了TransformerViTNeRF的技術。

雖然網路上對Transformer相關技術的介紹多如牛毛,但筆者還是想在自己的學習與分享之路留下點痕跡。本文先就核心的自注意力機制 Self-attention做介紹。

Vector Set as Input and Output

對於以Vector Set作為Input的應用,可以粗略分為三種Output類別:

第一類常用的應用如詞性辨認,例如:

而第二類就好比文章分類,例如自動將新聞分到金融,社會或運動版等等。而第三類也是今天常見Transformer-based的語言模型所在進行的seq2seq任務,輸出長度不固定。

而今天的介紹,以第一類為主。

Self-attention

我們以I saw a saw這個句子為例,如果只單接上FC Network,沒有理由NN能夠分辨第一跟第二個saw的差異。因此我們希望能讓NN能理解句子的上下文 (Context)。

因此我們可以考慮連結某單詞前後window內的其他單詞:

那Window要開多大? 畢竟我們不知道文章或句子有多長,開太大NN參數會太多,也容易overfitting。因此Self-attention就被設計出來處理這類問題。

下圖中,中間層的Vector (with context)表示考慮過整個Sequence的資訊,再丟進FC Network。

並且Self-attention Layer可以一直與FC Layer重複疊加交替使用:

Self-attention Layer

為了理解上下文,每個Input Vector勢必會與其他Vector有所關聯:

我們假設兩個Input Vector的關聯性為α

而常用計算α的模組為Dot-product:

下圖即圖示我們如何計算a1與各Input Vector的關聯性 (α1,1,α1,2,α1,3...),最後會再接上一層Soft-max。

這裡可以注意,各Input Vector也會計算與自己的關聯性

接著我們會再透過Vector v,去抽取關聯性的資訊。

透過以下公式可以知道,如果a1與a2的關係最強,那v2就會Dominate b1。

我們實際需要訓練的NN,就是(Wq, Wk, Wv)這三個矩陣。

Multi-head Self-attention

相關性可能有多種形式,例如詞性是一種,語意也是一種。因此Multi-head Self-attention即是去計算各種不同的關聯性,Transformer即是使用Multi-head Self-attention。

Positional Encoding

到目前為止的Self-attention介紹可以發現,各Input Vector (a1,a2,a3…)之間的距離都是相等的。然而像是在詞性辨識中,動詞通常不會在句首,因此我們需要位置的資訊。

因此我們設計ei這個Positional Vector,加到ai上作為位置資訊。而Transformer中的ei是透過規則產生如下圖右側中的Positional Vector。產生Positional Vector的技術即為Positional Encoding

Self-attention for Image

其實可以想像CNN是一種Self-attention的特例,因為CNN就是把Receptive Field設的比較小的Self-attention。

由於CNN的限制較多,因此比較適合在Data量較少的應用。下圖即CNN(ResNet) 與Self-attention(ViT,,即Vision Transformer) 的比較。在資料量夠大的時候,Self-attention表現就會優於CNN。

--

--