視覺 Transformer(vision transformer, ViT)
視覺 Transformer 把征服了語言領域的架構——Transformer,它處理一串詞元(token)的方式是讓每個詞元都去看其他所有詞元——幾乎原封不動地搬到影像上。關鍵的訣竅是:別再把影像想成一格一格的像素,而把它想成一個由「圖塊(patch)」組成的短句。你把影像切成一格格的小方塊圖塊(常見是 16x16 像素),把每個圖塊變成一個向量詞元,再把得到的序列餵進一疊標準的 Transformer 編碼器區塊。核心模型裡完全沒有卷積(convolution)。
精確地說:一張高 H、寬 W、有 C 個色彩通道的輸入影像,被切成 N = HW/P² 個邊長為 P、互不重疊的圖塊。每個圖塊被攤平並線性投影到一個固定的嵌入維度 D(這就是圖塊嵌入,patch embedding)。接著在最前面接上一個可學習的類別詞元(class token),再加上可學習的位置嵌入讓模型知道每個圖塊原本的位置,然後這串 N+1 個向量通過 L 個相同的編碼器區塊,每個區塊由多頭自注意力(multi-head self-attention)與一個逐詞元的 MLP 組成,並配上殘差連接與層正規化(layer normalization)。類別詞元的最終狀態被送進一個小小的分類頭。開創性的論文(Dosovitskiy 等人,2021,《An Image is Worth 16x16 Words》)證明了這個樸素的配方能追平甚至打敗卷積網路。
決定性的但書是資料量。卷積網路內建了很強的假設——局部性、平移等變性、由粗到細的階層——這些 ViT 都沒有;ViT 必須從範例中把這些規律「學」出來。因此當只用 ImageNet-1k(約 130 萬張影像)訓練時,ViT 會輸給規模相當的 ResNet,但當在大得多的語料上預訓練(ImageNet-21k 有 1400 萬張,或私有的 JFT-300M 有 3 億張)時,它便反超,並隨著規模繼續變強。這正是 ViT 最重要的一課:內建偏好弱,但資料與算力夠多,就能勝過內建偏好強的模型。
ViT 把電腦視覺重新組織到一個統一的「詞元序列」骨幹之上,幾乎所有現代系統都承襲自它:DETR 風格的偵測器、CLIP 內部的影像與文字編碼器、遮罩影像自監督(BEiT、MAE)、擴散模型的條件骨幹(DiT),以及可提示的 Segment Anything Model(SAM),全都建立在「對圖塊做 Transformer」之上。因此,理解 ViT 是理解當代視覺的入口。
一張 224x224 的 RGB 影像若用 16x16 的圖塊,會得到 (224/16)² = 196 個圖塊詞元;再加上一個類別詞元,就是把一條長度為 197 的序列餵進編碼器。
常見的誤解是以為 ViT 單純就是「比 CNN 好」。在資料量不大、用預設訓練設定時並非如此——它的優勢要在大規模預訓練、或 DeiT 那套強增強/正則化/蒸餾配方下才會浮現。這個架構的價值在於可擴展性與統一性,而不是免費送你更高的準確率。