6.1 注意力機制如何跨界進入視覺領域(2017-2020)#
一、起點不在視覺:Transformer 的宣言(2017)#
2017 年 6 月,Google Brain 與 Google Research 發表的 Attention Is All You Need(Vaswani et al., 2017)並不是一篇「把 NLP 做深」的論文,而是一篇架構宣言。它的論點可以濃縮成一句話:序列建模不需要任何帶順序偏置的算子,只要給予每一個元素一個「可以自己去看別人」的權限,就足以表達序列中的依賴關係。
這句話為什麼重要?在 2017 年之前,序列建模有兩條主流路線:
- 循環路線(RNN/LSTM/GRU):以時間步為外層迴圈。優點是狀態是固定維度的向量,記憶體需求與序列長度無關;缺點是路徑長度問題——要讓第 1 個 token 的資訊影響第 1000 個 token 的輸出,必須經過 999 個時間步的梯度傳遞。這不只是收斂慢的問題,在硬體上也意味著無法平行,GPU 的算力閒置。
- 卷積路線(ConvS2S, ByteNet):以卷積核在序列上滑動,天然可平行,但感受野隨層數線性增長,要覆蓋長序列需要 \(O(L)\) 層。CNN 的歸納偏誤(局部性、平移等變)在視覺是優點,在語言卻是包袱:詞與詞的關係是長距離、稀疏、語意相關的,而不是「相鄰才算相關」。
Transformer 的做法是直接廢棄這兩條路線:既不用迴圈,也不用卷積。它讓序列中每一個位置都能直接看到所有其他位置。
1.1 Scaled Dot-Product Attention 的完整形式#
Transformer 的核心運算子是 scaled dot-product attention(Scaled Dot-Product Attention)。給定查詢矩陣 \(Q \in \mathbb{R}^{N \times d_k}\) 、鍵矩陣 \(K \in \mathbb{R}^{N \times d_k}\) 、值矩陣 \(V \in \mathbb{R}^{N \times d_v}\) ,其定義為
逐行拆解成三個步驟(這個三段式結構在第 6.2、6.3 節會一直出現,值得記牢):
- 打分(Score): \(Q K^{\top}\) 是一個 \(N \times N\) 的矩陣,其第 \((i,j)\) 項為 \(q_i \cdot k_j\) ,即第 \(i\) 個 query 與第 \(j\) 個 key 的內積。內積越大,代表兩者在某個抽象特徵空間中越相似。
- 縮放與正規化(Scaled & Normalized):除以 \(\sqrt{d_k}\) 後(推導見 1.2),沿著 key 那一維做 softmax,得到一個總和為 1 的注意力分佈 \(A \in \mathbb{R}^{N \times N}\) 。第 \(i\) 行 \(A_{i,:}\) 就是「query \(i\) 應該把多少權重分配給每一個 key \(j\) 」。
- 加權求和(Aggregate): \(A V\) 讓每一個位置 \(i\) 輸出的是所有 value 依注意力權重的加權平均。
由於 softmax 是沿 key 維度做的,** \(A\) 的每一行都機率總和為 1**。這意味著注意力機制的輸出是「凸組合」,它的量綱與 \(V\) 相同——這在實作上極為重要:整個網路不需要額外的 learned 縮放因子來穩定尺度。
1.2 為什麼必須除以 \(\sqrt{d_k}\) :一個方差推導#
這個縮放因子是 Transformer 論文中一個看起來微不足道的細節,但若拿掉它,訓練會在少數步內發散。它值得完整推導,因為它是全書第一個「為什麼這個常數長這樣」的示範,也是訓練動態(training dynamics)如何影響架構設計的第一個證據。
假設: \(q, k \in \mathbb{R}^{d_k}\) ,各分量彼此獨立,且每個分量在訓練初期都近似為均值 0、變異數 1 的隨機變數(這是初始化器與 Xavier/He 初始化的直接結果)。
第一步:內積的期望。
第二步:內積的變異數。由於各項獨立,
而
因此
第三步:softmax 為什麼怕大 logits。令 \(s_j = q \cdot k_j\) ,softmax 為
其對第 \(m\) 個 logit 的導數為
這是個關鍵公式:梯度的上界是 \(1/4\) ,且當 \(p_m \to 1\) (即某個 logit 獨佔)時,梯度趨近於 0——這就是softmax 飽和導致梯度消失。
現在回到變異數:若 \(s_j\) 的標準差是 \(\sqrt{d_k}\) ,當 \(d_k = 64\) 時標準差是 8;softmax 的指數函數是極度非線性的,標準差 8 的 logits 分佈會讓 softmax 的輸出迅速退化為 one-hot(最大 logit 與次大 logit 的差距常常超過 8 個單位差, \(e^{8} \approx 3000\) ),此時 \(p_m(1-p_m) \to 0\) ,梯度消失。
第四步:縮放的修正。若把 logits 除以 \(\sqrt{d_k}\) ,變異數變為
標準差回到 1。logits 落在合理範圍內,softmax 不會立刻飽和,梯度得以存活。
結論與延伸:縮放的目的是讓 logits 的分佈與維度無關。這個思路後來在 modern NLP 中被更徹底地推廣——例如用 LayerNorm 替代 BatchNorm、用 Pre-LN 替代 Post-LN、用 QK-Norm 強制約束 logits 的範圍(見 6.3 節 Swin V2 對 pre-LN 的討論),全都是同一個家族:在深層網路中,歸一化與縮放不是裝飾,而是訓練能不能收斂的分水嶺。
常見誤解:「除以 \(\sqrt{d_k}\) 是為了讓數值不溢出。」這是對的但不重要——雙精度浮點不會溢出。真正的原因是softmax 飽和造成的梯度消失,這是一個優化問題而不是數值問題。
1.3 多頭注意力#
單一注意力頭只能學到一種關係模式。多頭注意力(Multi-Head Attention)把 \(d\) 維的表示切成 \(h\) 份,各自獨立做注意力,再把結果拼接回來:
其中
且 \(W_i^Q, W_i^K, W_i^V \in \mathbb{R}^{d \times d_h}\) 、 \(d_h = d / h\) 。
直覺:不同的頭學習不同的關係子空間。 這是理解注意力視覺化時最重要的一件事。實驗上人們觀察到,注意力圖往往呈現分工:
- 某些頭只關注句法依存(例如代名詞指向哪個名詞);
- 某些頭只關注共指(例如兩個實體是否同一個);
- 某些頭表現為位置偏移模式(attend to the previous token),看起來像語言模型裡的 n-gram 特徵。
在視覺上同樣成立:一個頭可能專門追蹤「同一物體的不同部分」,另一個頭專門追蹤「邊界框邊緣」,還有一個頭負責「找同類別的其他實例」。這些關係在特徵空間的不同子空間裡,因此需要多個頭。
複雜度分析。多頭注意力的總計算量:
- 投影: \(4 \times O(N d^2)\) ( \(Q,K,V\) 投影加輸出投影)
- 注意力分數: \(O(N^2 d)\)
- 加權求和: \(O(N^2 d)\)
因此總計
這裡出現了本章的第一個重要張力:注意力矩陣的計算量與序列長度平方成正比。若 \(N \gg d\) (視覺中正是如此:224×224 影像若用 16×16 的 patch, \(N = 196\) 而 \(d = 768\) ;高解析度醫學影像的 \(N\) 可達數萬),則 \(O(N^2 d)\) 項將主導。這個瓶頸會在 6.3 節由 Swin Transformer 正面處理。
二、自注意力的三個關鍵性質(全書的理論骨架)#
自注意力(self-attention)就是把 \(Q, K, V\) 全部取自同一個序列的操作:
接下來的三個性質,是理解「Transformer 為何能改造視覺」以及「ViT 為何需要位置編碼」的理論骨架。它們不是彼此獨立的觀察,而是一組互相咬合的推論鏈。
2.1 性質一:置換等變性(Permutation Equivariance)#
定理 2.1(置換等變性):設 \(f_\theta\) 為自注意力層(不含位置編碼), \(P \in \mathbb{R}^{N \times N}\) 為任意置換矩陣。則
也就是說,自注意力本身無法分辨 token 的順序。
證明。自注意力可分為兩步:投影與分數計算。
第一步,投影: \(Q = XW^Q\) , \(K = XW^K\) , \(V = XW^V\) 。置換矩陣 \(P\) 滿足 \(P^{\top} P = I\) ,因此
同理 \(K' = P K\) 、 \(V' = P V\) 。
第二步,分數:注意力權重矩陣為
\((PK)^{\top} = K^{\top} P^{\top}\) ,所以
即 \(A' = P A P^{\top}\) 。這是正確的: \(A'_{i,j} = A_{\pi(i), \pi(j)}\) ,其中 \(\pi\) 是對應的置換。
第三步,輸出:
證畢。 \(\square\)
這個定理的直覺版本:注意力是對 token 集合的加權平均。加權平均對集合的排列順序完全不敏感——就像求和與求平均不在乎你把數字排成什麼順序。模型因此內在地缺少「這是第 3 個詞,那是最後一個詞」這類資訊。
對第 6.2 節的推論(伏筆):既然順序資訊不在架構裡,就必須額外注入。這就是位置編碼(positional encoding)存在的唯一理由,不是「讓模型效果更好」的經驗性技巧,而是架構的必然補完。Transformer 原論文用正弦/餘弦函數生成位置編碼,ViT 則改用可學習的位置嵌入(6.2 節詳述)。
常見誤解:「CNN 的卷積不具備平移等變性,所以它順序敏感。」這是錯的。卷積本身是平移等變(translation-equivariant)的,恰恰因為如此,CNN 不需要位置資訊就能知道物體的相對位置——這是它內建的歸納偏誤。對比之下,ViT 的注意力是位置無知(position-agnostic)的,必須靠位置編碼把位置資訊「補回來」。這個對比是理解 CNN 與 Transformer 兩種架構風格的最短路徑。
2.2 性質二:內容感知定址 vs 位置感知定址#
這是 CNN 與 Transformer 最根本的架構差異,也是全書反覆出現的主題。
| CNN(位置感知定址 location-based addressing) | 自注意力(內容感知定址 content-based addressing) | |
|---|---|---|
| 資訊如何被取用 | 固定偏移的鄰域( \(3\times3\) 、 \(5\times5\) 窗口) | 由 Q–K 相似度決定,距離無關 |
| 感受野隨深度增長 | 每層擴大 \(k\) 倍, \(L\) 層後為 \(k^L\) | 第 1 層即為全域 |
| 對物體尺度/位置 | 需靠多尺度池化、金字塔處理 | 天然尺度不變(若尺度在 patch 尺度內) |
| 能表達「這兩塊是同一物體」 | 需深層堆疊或額外模組 | 一層內即可 |
用一個具體例子說明:在影像中判斷「這根柱子的頂端與底端屬於同一根柱子」,兩者可能相隔上百像素。CNN 的路徑長度問題(路徑長度 \(L\) )與感受野增長都被迫讓這件事變得昂貴;而自注意力只要一次 Q–K 點積就能建立這個連結。
更進一步的精確論述:CNN 的每個感受野是位置決定的——第 \((i,j)\) 個位置的神經元「永遠只看得到」以 \((i,j)\) 為中心的一塊固定區域,其權重索引與位置綁定。而自注意力的每個神元的輸入集合是內容決定的——同一個投影權重套用到所有位置,但「看誰」由輸入內容決定。這兩種設計在第 4.1 節討論的「共享權重 vs 位置特定權重」光柵圖繪製上,就是 Kronecker delta 與 circulant 結構的差別。
代價:內容感知定址需要一個全局的兩兩比較,這正是 \(O(N^2)\) 複雜度的來源。局部性( \(O(N)\) )與全局性( \(O(N^2)\) )之間的取捨是整個章節的主軸。
2.3 性質三: \(O(N^2)\) 複雜度與其在高解析度影像上的瓶頸#
把 CNN 與 Transformer 放在同一個「計算量 vs 全局感受野」的座標軸上比較:
- CNN 的第 \(L\) 層卷積(kernel \(k \times k\) )計算量為 \(O(N k^2)\) ,其中 \(N\) 是特徵圖的位置總數( \(H \times W\) )。感受野隨深度增長。
- 自注意力的計算量為 \(O(N^2 d)\) ,與位置總數平方成正比。
具體數字對照。以 224×224 的影像、patch 大小 16 為例, \(N = (224/16)^2 = 14^2 = 196\) 個 token。此時注意力矩陣是 \(196 \times 196\) ,很小,完全沒有問題。
但若解析度提高:
| 影像解析度 | patch 16 的 token 數 \(N\) | 注意力矩陣項數 \(N^2\) | 注意力矩陣大小(fp16,單頭) |
|---|---|---|---|
| 224×224 | 196 | 38,416 | 75 KB |
| 448×448 | 784 | 614,656 | 1.2 MB |
| 1024×1024 | 4,096 | 16,777,216 | 32 MB |
| 2048×2048 | 16,384 | 268,435,456 | 512 MB |
這就是瓶頸的具體化。在 224×224 的 ImageNet 分類上,全域注意力「很便宜」;一旦進入高解析度場景——高解析度影像分類、醫學影像(切片動輒 512×512 或 1024×1024)、遙感衛星影像——全域注意力就會爆掉。 更糟的是,即使最終輸出只需要粗略的分類結果,中間的 \(N \times N\) 注意力矩陣仍然必須被完整算出。
這是 6.3 節 Swin Transformer 的存在理由,也是本章與下一節必須記住的因果鏈:
CNN 的局部性 → 感受野受限 → 需要全局關聯 → 引入注意力 → **複雜度變成 \(O(N^2)\) ** → 高解析度不可行 → 必須折衷
用符號表示這條因果鏈的骨架:
三、視覺領域的先行者(2017-2019):注意力進入 CNN 的內部#
注意力機制進入視覺並非一蹴而就。在 Transformer 之前,「注意力」這個概念已經在 CNN 內部以多種形式悄悄出現,這是理解歷史的關鍵:ViT 不是憑空降臨,而是站在一批「注意力化的 CNN」的肩上。
3.1 Non-local Neural Networks(Wang et al., 2017)#
CVPR 2017 的 Non-local Neural Networks 是第一批系統性地把「全局關聯算子」塞進 CNN 的工作,也是最接近自注意力的先驅。
動機:標準卷積在 \(3\times3\) 的 kernel 下只有局部感受野;要建模遠距離關係(例如影片中的動作關聯、影像中兩端的語意一致性),傳統做法是堆疊深層網路,但這樣路徑太長、難以優化。
做法:在 CNN 的某個特徵圖 \(X \in \mathbb{R}^{H \times W \times C}\) 內部,引入一個非局部運算子:
其中 \(N = H \times W\) 為所有位置數, \(i, j\) 索引位置。
- \(g(x_j) = W_g x_j\) :值的嵌入(對應 self-attention 的 \(V\) )。
- \(f(x_i, x_j) = \exp(\theta(x_i)^{\top} \phi(x_j))\) :相似度函數(對應 \(QK^{\top}\) 再 softmax)。
- \(\mathcal{C}(x) = \sum_j \exp(\theta(x_i)^{\top}\phi(x_j))\) :正規化因子,讓 \(y_i\) 成為加權平均(對應 softmax 的分母)。
與 self-attention 的關係(這是理解本章歷史的關鍵連線):若令 \(\theta(x) = W_\theta x\) 、 \(\phi(x) = W_\phi x\) 、 \(g(x) = W_g x\) ,則 \(f\) 正是 scaled dot-product attention 的指數核(除了 \(\sqrt{d_k}\) 的縮放因子)。也就是說:
Non-local 層 = 一個作用於單一特徵圖內部位置集合的 self-attention。
差別在於 Transformer 把「位置集合」換成了「token 序列」,並且允許跨層次、跨語料共享同一套算子。
計算量的處理:Non-local 的計算量是 \(O(N^2)\) ,對高解析度影像代價昂貴。論文的解法是在特徵圖上插入下採樣(例如把 \(H\times W\) 降為 \(H/2 \times W/2\) )來計算注意力圖,再上採樣回來,這樣計算量降為 \(O((N/4)^2) = O(N^2/16)\) 。
結果與影響:在影片分類(Something-Something v2、Charades)、影像分類與偵測上都帶來提升,並獲得 CVPR 2018 的「PAMI 論文獎」。這是「注意力進 CNN」的第一步。
flowchart LR
A["卷積特徵圖 H x W x C"] --> B["下採樣的 theta phi g 投影"]
B --> C["計算全局相似度 f(xi,xj)"]
C --> D["softmax 正規化 得到注意力圖"]
D --> E["加權聚合 g(xj)"]
E --> F["殘差加回 1x1 投影後的 x"]
F --> G["輸出特徵圖"]3.2 SENet(Squeeze-and-Excitation Network, Hu et al., 2018)#
SENet 是 CVPR 2018 的冠軍作品,但它與 Non-local 的關係是互補而非競爭的:Non-local 處理空間維度的全局關聯,SENet 處理通道維度的全局關聯。
結構(極簡,只有兩步):
- Squeeze(壓縮):沿空間維做全域平均池化,把 \(H \times W \times C\) 壓成 \(C\) 維向量
- Excitation(激發):用兩個 FC 層 + ReLU + Sigmoid 產生通道權重
為什麼這算「注意力」: \(s_c \in [0,1]\) 是每個通道的重加權係數,由全域上下文決定。這正是自注意力的精神——用全局資訊決定「該看哪裡」——但作用在通道而非空間上。
與本章主題的關聯:SENet 證明了「注意力即重加權」這個模式在視覺中幾乎零成本就能獲得可觀的增益。更重要的是,它確立了「先全域聚合、再動態重加權」這個模式,後來被無數模型(包括 Non-local、Swin 的相對位置偏置、多模態模型中的 cross-attention)反覆使用。它是「注意力在視覺中有效」的第一個低風險證據,讓整個領域願意接受更激進的架構改變。
3.3 GCNet(2019):一個重要的反面發現#
GCNet(Global Context Network, Yang et al., CVPR 2019)提出了一個在學術史上非常有價值的反證。
命題:Non-local 網路的全局上下文建模能力,其實可以由「單純的全域平均池化 + 位置加權的加權和」以極小的代價達成。
具體而言,GCNet 用一個共享的 1×1 卷積產生 query,再把它與全域平均池化後的 context 做外積,再施以 softmax 位置權重:
這個結果的深意:Non-local 的 \(O(N^2)\) 計算中,注意力圖 \(f(x_i,x_j)\) 其實可以近似為只依賴 \(j\) 的權重(即「這張圖的第 \(j\) 個位置平均而言有多重要」)乘上一個依賴 \(i\) 的縮放。換言之,Non-local 學到的「位置敏感」成分,其貢獻遠小於它的計算代價所暗示的程度。
這個發現的三層重要性:
- 架構層面:它說明「非局部性」本身不是難點——只要給予全域統計量,模型就能受益。難的是位置敏感的非局部性:即「對位置 \(i\) ,應該特別關注位置 \(j\) 」。
- 研究方法層面:它示範了如何用更簡單的模型去逼近更複雜的模型來診斷機制——這是 Goodhart 定律在架構研究中的具體體現。
- 歷史敘事層面:它預告了 Transformer 時代的核心命題——架構的複雜度不等於能力的來源。3.5 節的 ConvNeXt(6.3 節詳述)是這條線的最終爆發。
3.4 CCNet 與 Criss-Cross Attention(2019)#
CCNet(CCNet: Criss-Cross Attention for Semantic Segmentation, Yuan et al., ICCV 2019)針對語義分割的全局上下文化需求,提出 Criss-Cross Attention,把注意力的計算範圍從「全圖」縮減為「十字形」。
核心想法:對位置 \(i = (x, y)\) ,只在同一行與同一列的所有位置 \(j\) 上計算注意力。也就是說,一個位置只需要看它那一橫列與那一縱列上的所有像素(cross 形),而不需要看整張圖。
複雜度:從 \(O(N^2)\) 降到 \(O(N \cdot (H + W))\) ,在 \(H = W\) 時約為 \(O(N^{1.5})\) ——仍不是線性,但已經大幅改善。
代價:十字形注意力不是置換等變的(它隱含地依賴了空間的行列結構),而且它無法建模對角線方向的關係(例如一條 45 度斜線上的物體)。CCNet 論文用兩次 criss-cross 交叉來部分補償方向偏見。
歷史定位:CCNet 是「注意力範圍的局部化」這條技術路線的第一個重要成果——把全域注意力縮到一個結構化的子空間。6.3 節的 Swin Transformer 屬於同一條路線的另一種極端(把注意力縮到方形的局部窗口),但 Swin 用移位窗口保留了嚴格的可平移等變性與完整的跨窗口資訊流,這是 CCNet 沒做到的。
3.5 Self-Attention GAN(SAGAN, Zhang et al., 2019)#
SAGAN 把自注意力直接嵌入 StyleGAN 的生成器,用來解決 GAN 最典型的失效模式:長距離結構的一致性。
問題:在 GAN 中,生成器是逐層上採樣的。要畫出「一個長椅上的四條腿分別位於正確位置」,或「一張臉的兩眼對稱」,需要遠距離的像素之間協調。傳統卷積生成器的感受野隨層數緩慢增長,長距離一致性經常崩壞,表現為臉部器官錯位、多餘肢體等典型 GAN 瑕疵。
做法:在生成器的某一層之後插入一個自注意力模組,讓該層的所有空間位置互相看看:
結果:在 CelebA-HQ 與 LSUN Bedroom 上,FID 明顯優於同層級的 BigGAN(不含注意力版),並且大幅改善了長距離一致性。這是注意力第一次在生成任務上展現不可替代的價值。
為什麼這是伏筆:第 7 章將處理 GAN 與擴散模型,第 8 章則會處理 Stable Diffusion。SD 的 U-Net 中同樣使用了 Transformer 的注意力模組,而 SAGAN 是這條技術路線的先行者之一。更深層的伏筆是:自注意力能表達關係(哪個像素和哪個像素屬於同一物體),這在生成的意義上比在辨識的意義上更令人興奮——它是「關係式生成」的開端。
3.6 Relation Networks(2018):注意力作為關係推理#
Relation Networks(Relation Networks, Sung et al., CVPR 2018)把「關係模組」用於視覺推理與少樣本分類。
關係模組:給定一組物件特徵 \(\{f_i\}\) ,計算所有成對關係
再把所有關係向量聚合(取平均)成一個全域特徵送進分類器。這個 \(r_{ij}\) 本質上就是「注意力矩陣的一列」,只是沒有 softmax 正規化。
少樣本分類:在 5-shot 1-way 分類上,Relation Networks 在 miniImageNet 上達到約 62% 準確率,優於同時期的 Prototypical Networks 等方法。
歷史定位:Relation Networks 把「顯式建模物件之間的關係」這件事推到了模型設計的中心。它是 CapsNet(3.7 節)與 Transformer 之間的重要橋樑,也是第 9 章多模態模型中「關係建模」思路(物件—區域關係、區域—文字關係)的先聲。
四、最後一塊拼圖:Capsule Network 與動態路由(2017)#
在 Transformer 之前,另一條挑戰 CNN 歸納偏誤的平行路線是 Capsule Network。
4.1 問題診斷:CNN 的「平移等變」是優點也是陷阱#
Capsule Network(Sablayrolles et al., 2017, Neural Information Processing Systems)由 Hinton 推動,其核心批判是:
CNN 判定「這張圖是貓」的機制是辨識貓的某個特徵(例如耳朵的形狀)是否存在於某個位置,而不是辨識「貓這個物體」的存在。CNN 是「圖像存在性偵測器」,不是「物體存在性偵測器」。
Hinton 用一個著名的例子說明:一張圖片裡有貓的碎片(耳朵、腳、尾巴的紋理隨機散落),CNN 會判定為「貓」;而一張稍微偏斜的貓,CNN 可能判不出來。
根本原因:CNN 的池化(pooling)會丟棄位置資訊。「耳朵的紋理出現在影像的哪裡」在 CNN 的最終特徵中被抹除了——這是為了獲得平移等變性而主動支付的代價。
4.2 膠囊與動態路由#
膠囊(Capsule)是一組向量 \(\mathbf{s} \in \mathbb{R}^{d}\) ,其方向代表物體(或部分)的存在性與屬性,其模長代表「該物體存在的機率」。每個膠囊接收下層膠囊送來的預測向量 \(\hat{\mathbf{u}}_{j \to i}\) ,並用動態路由(Dynamic Routing)決定把多少權重分配給各個上層膠囊。
路由的更新規則(非負權重、歸一化的 softmax 形式):
關鍵差異:路由是逐路由步驟的動態協商(iterative agreement),而不是一次性的權重分配。這個過程在功能上扮演了「找出一致同意的物體組裝」的角色。
4.3 為什麼 CapsNet 沒有勝出?#
CapsNet 在小資料集(如 MNIST 加權基線)上表現優異,但在 CIFAR-10 等較大的基準上並沒有超越 ResNet,且訓練不穩定。常見的診斷:
- 資料效率低:每個膠囊的高維向量表示需要大量資料才能學到穩定的「姿態編碼」。
- 動態路由的訓練動態不友善:路由的 softmax 與迭代讓梯度路徑複雜,容易陷入不穩定或特徵塌陷。
- 無現成的硬體友好實現:路由涉及迭代迴圈與不規則的資料流,不像卷積那樣能整塊並行。
但它的思想影響深遠。「顯式建模部分—整體關係」這件事,在 Transformer 中以另一種形式獲得新生:
| Capsule Network | Transformer |
|---|---|
| 膠囊 = 一組實例化的部分 | token = 一個 patch(或其投影) |
| 部分—整體關係 = 動態路由的權重 | 注意力權重 = token 之間的關聯 |
| 路由的「一致同意」 | 多頭注意力的「不同關係子空間」 |
| 物體的存在性與姿態 | token 的語意內容與位置編碼 |
換句話說,ViT 的 token 化把「部分—整體關係」的建模從一個動態過程,改成了一個靜態的全域注意力,簡單、可並行、可微、且享有 GPU 的全部好處。這是本章一個重要的思想史閉環。
五、為什麼 Transformer 必須在視覺上「重塑」?#
到 2019 年底,注意力在視覺中「有效」這件事已經確立,但沒有人敢說「用 Transformer 取代 CNN」。原因是 CNN 的歸納偏誤實在太強大了。
5.1 CNN 歸納偏誤的四項優點#
| 歸納偏誤 | CNN 的機制 | 帶來的好處 |
|---|---|---|
| 局部性(locality) | \(k \times k\) 卷積核 | 參數共享於空間,參數量少,樣本效率高 |
| 平移等變性(translation equivariance) | 共享核 + 池化 | 對平移不敏感,資料效率高 |
| 層級式特徵(hierarchical features) | 層層下採樣加深 | 越深層的感受野越大、特徵越抽象 |
| 尺度不變性(部分) | 影像金字塔 / 多尺度訓練 | 對物體大小變化更穩健 |
這些優點總結為一句話:CNN 把「世界是空間局部、且平移等變的」這個先驗直接寫進了架構裡。因此:
- 參數共享讓 CNN 只需要相對少的樣本就能學到合理的特徵;
- 平移等變讓同一個「貓」的數千個不同位置版本共享同一套偵測器,等價於資料增強;
- 層級結構讓模型天然支援多尺度偵測(第 5 章的 FPN 就是建立在此)。
5.2 CNN 歸納偏誤的失效場景#
但在下列任務上,這些優點變成了限制:
- 語義分割的全局上下文需求:ADE20K、COCO-Stuff 這類語意分割中,「天空」這個類別的判斷需要參照整張圖(如果圖的上半部都是天空,整張圖就是天空)。CNN 的局部感受野是硬性障礙,全域資訊只能靠非常深的堆疊與膨脹卷積(dilated convolution)勉強達成。
- 長距離幾何關係:一輛車的車頭與車尾、柱子的頂與底、棋盤的對角線關係,都可能跨越整張影像。這些關係在 CNN 中需要路徑長度 \(O(\text{距離})\) 的訊息傳遞。
- 多標籤 / 密集預測:需要每個位置同時考慮遠端線索。
- 動態的、可資料適應的結構:CNN 的特徵偵測器(同一組卷積核)是固定的,不同類別共用;而「物體由哪些部分構成」在不同類別間差異極大(狗有尾巴,車有輪子)。
5.3 Transformer 的代價:更少的先驗 → 需要更多資料#
Transformer 的答案是把所有結構性先驗拿掉,只留下「注意力 + 位置編碼」。代價直接體現在資料效率上:
移除歸納偏誤 = 擴大假設空間 = 需要更多資料來把空間收斂到好解。
這是 ViT 時代的核心張力,也是 6.2 節的主題:
- ViT 用 ImageNet-1k(130 萬張)訓練,不如 ResNet。
- ViT 用 JFT-300M(3 億張)預訓練後,大幅超越 ResNet。
換言之,Transformer 並沒有使歸納偏誤變得無用,而是把它從「硬編碼在架構裡」改成了「必須從資料裡學」。 這個改變在資料豐富時是純利(模型更通用、遷移更強),在資料貧乏時是純損(這也是為什麼在同一張 ImageNet 上,ResNet 更受歡迎的實務原因,也是為什麼 DeiT 需要蒸餾)。
5.4 視覺 Transformer 需要解決的三個「翻譯」問題#
把 NLP 的 Transformer 搬到影像上,需要解決三個不對等:
| NLP | 影像 | 需要的改變 |
|---|---|---|
| 序列 = 詞的序列,長度 \(10^2 \sim 10^4\) | 序列 = 像素,長度 \(10^4 \sim 10^6\) | 必須切塊降維 → patch embedding(6.2 節) |
| 詞有明確的先後順序 | 像素是空間網格,順序由座標定義 | 必須注入位置 → 位置編碼(6.2 節) |
| Transformer 只有幾層、 \(N\) 小 | 需要多尺度特徵以支援偵測/分割 | 需要階層式架構 → hierarchical design(6.3 節) |
六、本節小結#
- Transformer(2017)提供了三樣東西:scaled dot-product attention、多頭機制、以及「用內容驅動的定址取代位置驅動的定址」這個根本轉向。
- 除以 \(\sqrt{d_k}\) 的原因是梯度而非數值:內積變異數為 \(d_k\) ,softmax 在大 logits 下飽和、 \(\partial p_m / \partial s_m = p_m(1-p_m) \to 0\) 。縮放使 logits 方差回到 1。
- 三個關鍵性質:置換等變(⇒ 必須有位置編碼)、內容感知定址(⇒ 能建模長距離與形狀)、 \(O(N^2)\) 複雜度(⇒ 高解析度瓶頸 ⇒ 6.3 節的折衷)。
- 先行者不是可有可無的:Non-local(自注意力進 CNN)、SENet(通道重加權)、GCNet(重要反面發現)、CCNet(注意力範圍局部化)、SAGAN(注意力進生成)、Relation Networks(關係推理)、Capsule(部分—整體建模)共同鋪平了道路。
- 核心張力:Transformer 用「移除歸納偏誤」換取「更高的上限」,代價是資料效率;這將在 6.2 節以 JFT-300M vs ImageNet-1k 的對比被量化。
timeline
title 注意力機制進入視覺的足跡 2017-2020
2017 : Transformer 問世 : Non-local Networks : Capsule Network
2018 : SENet 通道注意力 : Relation Networks 關係推理
2019 : GCNet 全域上下文 : CCNet 十字形注意力 : SAGAN 注意力生成
2020 : ViT 純 Transformer 影像分類 : MAE 掩碼自編碼器
2021 : DeiT 蒸餾資料效率 : Swin 階層式局部注意力本節參考文獻#
- Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS 30.
- Wang, X., et al. (2017). Non-Local Neural Networks. CVPR 2017.
- Sablayrolles, S., et al. (2017). Dynamic Routing Between Capsules. NeurIPS 2017.
- Hu, J., Shen, L., & Sun, G. (2018). Squeeze-and-Excitation Networks. CVPR 2018.
- Sung, H., et al. (2018). Learning to Compare: Relation Network for Few-Shot Learning. CVPR 2018.
- Yang, Y., et al. (2019). GCNet: Global Context Networks. CVPR 2019.
- Yuan, Y., & Wang, J. (2019). CCNet: Criss-Cross Attention for Semantic Segmentation. ICCV 2019.
- Zhang, H., et al. (2019). Self-Attention Generative Adversarial Networks. ICML 2019.
- Dosovitskiy, A., et al. (2020). An Image Is Worth 16x16 Words. ICLR 2021.
- He, K., et al. (2021). Masked Autoencoders Are Scalable Vision Learners. CVPR 2022.
- Touvron, H., et al. (2021). Training Data-Efficient Image Transformers & Distillation Through Attention. ICML 2021.
- Liu, Z., et al. (2021). Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. ICCV 2021.