深度學習 · 電腦視覺

Vision Transformer (ViT)

把圖片切成一塊塊小方格,像一句話的單字一樣排成序列,丟進 Transformer——讓每一塊在第一層就「看見」全圖。

影像切 patchPatch Embedding[CLS]位置編碼全域注意力vs CNN

💡一句話定義

Vision Transformer(ViT)= 把原本用於文字的 Transformer 搬到影像:將圖切成固定大小的小塊(patch)當成一串序列,丟進自注意力(Self-Attention),直接學影像的全域關係。

在超大資料集上預訓練後,ViT 常能超越最頂尖的 CNN,也成了現代多模態模型的標準影像編碼器。

🧩為什麼要切成 patch?

Transformer 本來是處理「一串單字」的。影像是 2D 像素矩陣,且像素太多(224×224 就有 5 萬多個),直接餵進去會讓自注意力的 O(N²) 運算爆炸。ViT 的解法:把圖切成小方塊(如 16×16),一張圖就變成 N 個 patch——就像一句話有 N 個單字一樣,數量剛好可以處理。

🎮互動:patch 怎麼變成向量

把滑鼠移到左側圖片的 3×3 patch 上:對應的嵌入向量會亮起、連一條線過去,並顯示「攤平 → 線性投影 → 加位置編碼」的過程。最前面橘色的是 [CLS] token。

Vision Transformer (ViT) 互動演示
1. 輸入影像 (Image) 3x3 Patches Flatten & Project 2. 嵌入向量 (Patch Embeddings) [CLS] 0 加上位置編碼 (+ Position Embedding) 3. Transformer Encoder L x Layers (MSA + MLP) MLP Head Class: House
請移動滑鼠到左側圖片上,觀察 Patch 如何轉換為向量。

🔩三個關鍵零件

🧱Patch Embedding
把每塊 patch 攤平,做線性投影變成一個向量(就像一個「單字」)。
🏷️[CLS] Token
一個可學習的向量,跟著所有 patch 一起進網路,最後用它彙整全圖做分類。
📍位置編碼
Transformer 不知道 patch 在空間上誰跟誰相鄰,要加位置編碼補上這個資訊。

🌐全域注意力 vs 局部卷積

這是 ViT 和 CNN 最核心的差別:

面向CNNViT
看的範圍卷積核只看局部,堆多層才看到全圖自注意力第一層就看見所有 patch
歸納偏置(局部性、平移不變、權重共享)(幾乎沒有先天假設)
資料需求較省,小資料也能學需要大量資料或大型預訓練
強項局部紋理、資料有限時穩健全域關聯、規模化、易與多模態整合

🍽️歸納偏置弱 → 資料飢渴

CNN 天生就「假設」影像有局部性與平移不變(歸納偏置強),所以小資料也學得動。ViT 幾乎不帶這些假設,什麼都要自己從資料學——歸納偏置弱,因此需要更多資料或預訓練才追得上、甚至超越 CNN。資料有限、想省算力時,CNN 仍是穩健選擇;實務上兩者也常混用。

🚀應用場景

大規模影像分類(在 ImageNet-21k、JFT-300M 等超大資料集預訓練後常勝過 ResNet)、多模態模型(CLIP、Gemini 等——Transformer 能同時吃圖與文,ViT 成為標準影像編碼器)、偵測與分割(Swin Transformer 等層次化變體,能處理不同尺度)。

自我檢測

Q1. 圖片怎麼變成 Transformer 的輸入?
切成固定大小的 patch(如 16×16),每塊攤平後做線性投影成向量(patch embedding),加上位置編碼與一個 [CLS] token,再送進 Transformer 編碼器。
Q2. 為什麼要切 patch,不直接餵像素?
像素太多,自注意力是 O(N²) 會爆炸。切成 patch 後數量大減,一張圖變成 N 個「單字」,剛好能被 Transformer 處理。
Q3. ViT 和 CNN 最大的差別?
CNN 有強歸納偏置(局部性、平移不變、權重共享),卷積只看局部;ViT 靠自注意力建模全域關係、歸納偏置弱,通常需要更多資料或預訓練才贏過 CNN。
Q4. [CLS] token 和位置編碼各是做什麼的?
[CLS] 是一個可學習向量,用來彙整全圖資訊做最終分類;位置編碼補上「patch 在空間中誰跟誰相鄰」的資訊,因為 Transformer 本身沒有順序概念。

🎯重點整理

📝 iPAS 考點提醒

Vision Transformer(ViT)把 Transformer 用到影像,iPAS 中級科目一進階考點。重點:將影像切成小區塊(patch)當作序列、用自注意力建模全局關係,在大資料下可超越 CNN。易混點:ViT 缺 CNN 的歸納偏置(局部性、平移不變),需大量資料或預訓練才好;CNN 抓局部、ViT 看全局,各有所長且常被結合。情境:大規模影像分類與多模態模型骨幹。

想練情境題與詳解 → AI 學習與考證地圖

❓ 常見問題

ViT 是什麼?

Vision Transformer,把 Transformer 用到影像:將圖切成小塊(patch)當成序列丟進自注意力,直接學影像的全域關係。

ViT 和 CNN 最大差別?

CNN 有卷積的局部性與權重共享、歸納偏置強;ViT 靠自注意力建模全域關係、歸納偏置弱,通常需要更多資料或預訓練才贏過 CNN。

圖片怎麼變成 Transformer 的輸入?

切成固定大小的 patch(如 16x16),每塊攤平做線性投影成向量(patch embedding),加上位置編碼與一個分類 token,再進編碼器。

ViT 的優缺點?

優點:能捕捉長距全域關係、規模化效果好、易與多模態整合。缺點:資料需求大、計算量隨 patch 數增加,小資料上不如 CNN。

什麼時候選 ViT 或 CNN?

有大量資料或可用大型預訓練模型時 ViT 很強;資料有限、要省算力,CNN 仍是穩健選擇,實務上也常混用。

🧭 相關主題

← 返回 AI 學習與考證地圖