視覺 Transformer

Transformer 編碼器區塊(transformer encoder block)

Transformer 編碼器區塊是你拿來堆疊成 Transformer 的那個單一、重複的建構單元——ViT 不過就是 L 個這種區塊一字排開。每個區塊依序做兩件事:先讓詞元跨序列交換資訊(注意力),再對每個詞元各自處理以精煉它(一個 MLP)。跨詞元混合、再逐詞元思考;混合、再精煉;如此重複。堆疊許多這樣的區塊,能把淺層的比對變成深層、可組合的表徵。

一個區塊內部有兩個子層,每個都包在同樣的保護性樣式裡。子層一是多頭自注意力,負責在圖塊之間搬移資訊。子層二是逐位置的 MLP(一個兩層前饋網路,對每個詞元一視同仁地套用),負責加入非線性並混合特徵通道。每個子層都包上一個殘差連接——把子層的輸出加回它的輸入——以及一個層正規化,把每個詞元的特徵重新縮放到穩定的統計量。殘差替梯度提供了一條穿越深度的乾淨高速公路;正規化讓激活值維持良好條件。

正規化的位置很重要,ViT 採用前置正規化(pre-norm)的排法:先正規化、再套用子層、再加殘差,也就是 x = x + Attention(LN(x)),接著 x = x + MLP(LN(x))。這種前置正規化的擺法(相對於原始 Transformer 的後置正規化)讓很深的 Transformer 不必依賴小心翼翼的學習率暖身技巧就能訓練,因為殘差路徑維持為一條毫無阻礙的恆等映射。最後一個區塊之後通常再套一個最終的層正規化。

在概念上,這個區塊是一種乾淨的分工:注意力是唯一全域且依內容而定的運算(它決定哪些詞元對話),而 MLP 是局部且處處相同的(它決定如何轉換每個詞元的特徵)。ViT 所計算的一切,都是這兩者的交織。這個區塊沒有卷積、沒有池化、也沒有遞迴——它唯一的結構性先驗就是這個「先混合再精煉」的節奏,這也是為什麼 ViT 需要資料或外加偏好,才能學到卷積本就假設好的東西。

前置正規化與後置正規化不是冷知識:後置正規化的 ViT 在訓練很深時惡名昭彰地不穩,而前置正規化訓練平順、卻可能略微正則化不足。現代變體有時會在殘差分支上加一個可學習的逐通道縮放(LayerScale),以可靠地訓練非常深的 ViT。

又称
transformer blockencoder layerTransformer 編碼器區塊transformer layer