💡一句話定義
在超大資料集上預訓練後,ViT 常能超越最頂尖的 CNN,也成了現代多模態模型的標準影像編碼器。
🧩為什麼要切成 patch?
🎮互動:patch 怎麼變成向量
把滑鼠移到左側圖片的 3×3 patch 上:對應的嵌入向量會亮起、連一條線過去,並顯示「攤平 → 線性投影 → 加位置編碼」的過程。最前面橘色的是 [CLS] token。
🔩三個關鍵零件
把每塊 patch 攤平,做線性投影變成一個向量(就像一個「單字」)。
一個可學習的向量,跟著所有 patch 一起進網路,最後用它彙整全圖做分類。
Transformer 不知道 patch 在空間上誰跟誰相鄰,要加位置編碼補上這個資訊。
🌐全域注意力 vs 局部卷積
這是 ViT 和 CNN 最核心的差別:
| 面向 | CNN | ViT |
|---|---|---|
| 看的範圍 | 卷積核只看局部,堆多層才看到全圖 | 自注意力第一層就看見所有 patch |
| 歸納偏置 | 強(局部性、平移不變、權重共享) | 弱(幾乎沒有先天假設) |
| 資料需求 | 較省,小資料也能學 | 需要大量資料或大型預訓練 |
| 強項 | 局部紋理、資料有限時穩健 | 全域關聯、規模化、易與多模態整合 |
🍽️歸納偏置弱 → 資料飢渴
🚀應用場景
✅自我檢測
Q1. 圖片怎麼變成 Transformer 的輸入?
Q2. 為什麼要切 patch,不直接餵像素?
Q3. ViT 和 CNN 最大的差別?
Q4. [CLS] token 和位置編碼各是做什麼的?
🎯重點整理
- 是什麼:把圖切 patch 當序列,丟進 Transformer 自注意力。
- 為何切 patch:像素太多、O(N²) 會爆炸;patch 像單字。
- 三零件:Patch Embedding、[CLS] token、位置編碼。
- vs CNN:全域注意力 vs 局部卷積;ViT 歸納偏置弱、需大資料。
- 應用:大規模分類、多模態編碼器、Swin 做偵測。