视觉 Transformer · ViTVision Transformer
不卷积、不池化——把图像切成 patch 当「单词」,第 7 步的 Transformer 编码器原样看图,注意力第一眼就是全局的。
视觉 Transformer · 交互演示
为什么学这步?
第 7 步的 Transformer 统治了文本,ViT 证明同一架构也能统治视觉:把图像当句子读。它与 ML 第 12 步 CNN 代表两种哲学——CNN 内置「局部+平移」归纳偏置,ViT 几乎不带假设、靠数据和全局注意力硬学。
📌 发生了什么
- 图像切 patch → 线性嵌入
- 加位置嵌入保留空间信息
- 注意力全局交换信息 → 分类头
⚠️ 常见陷阱
- 省略位置嵌入→注意力分不清 patch 位置
- patch 越小词元越多,计算量按 N² 膨胀
- 小数据集上 ViT 常输给 CNN(缺归纳偏置)
✅ 本章小结
- 图像=patch 序列,Transformer 直接看
- 全局注意力 vs CNN 局部感受野
- 少偏置、大数据、强扩展性
📐 从词元到注意力:ViT 前向一图流
H×W 图像切成 N=(H/P)(W/P) 个 P×P patch,每个展平成 P² 维向量,经同一矩阵 E 投影为 d 维词元,叠加位置嵌入后送入 L 层 Transformer 编码器(与第 7 步完全相同:多头注意力 + 残差 + LayerNorm + FFN)。
注意力的核心仍是 Q·Kᵀ/√d:Q[i]·K[j] 越大,patch i 越「关注」patch j。/√d 防止 d 大时点积过大把 softmax 压进饱和区(推导见第 6 步)。残差捷径让深层可训(第 9 步),LayerNorm 稳定分布(第 3 步)。
与 CNN 对比:卷积层 k×k 感受野只能靠堆叠逐层扩大;注意力第一层就是全图范围——这就是演示②中热力图「满格」的原因。
🎛 patch 大小 × 词元数 × 计算量
注意力矩阵是 N×N:词元数翻倍,计算量约翻四倍。拖动上方 patch 滑块亲自感受。
| 图像 | patch | 词元 N | 注意力 N² |
|---|---|---|---|
| 8×8(本页) | 2×2 | 16 | 256 |
| 8×8(本页) | 4×4 | 4 | 16 |
| 224×224(ImageNet) | 16×16 | 196 | 38,416 |
| 224×224(ImageNet) | 8×8 | 784 | 614,656 |
💡 ViT 论文选 16×16 正是在「粒度」与「N² 计算量」间的折中;Swin Transformer 等后续工作用窗口注意力缓解平方膨胀。
💻 本页引擎核心
切块 + 自相似注意力(js/vit-core.js 逻辑节选):
// 图像 → N 个 patch(行主序),每块 P×P 展平
function extractPatches(img, H, W, P) { /* 网格行主序切块 */ }
// 自注意力(单头):Q=T·Wq, K=T·Wk, V=T·Wv
// score[i][j] = Q[i]·K[j] / √d → 行 softmax → attn
// out[i] = Σ_j attn[i][j] · V[j]
function selfAttention(tokens, Wq, Wk, Wv) { /* 见引擎 */ }
// 分类:拼接词元(含位置嵌入)→ softmax 线性头
// 本页演示 Wq=Wk=αI(自相似),真实 ViT 的 Wq/Wk/Wv 全部学习得到
💡 分类读出方式:原论文在序列前加可学习 [CLS] 词元、以其输出分类;DeiT 等用均值池化——但那是「训练后」的词元(已经注意力交换过信息)。本页词元未训练,均值池化会抹掉空间布局,故演示用拼接(线性头准确率 ~84%,池化仅 ~13%,正好体会读出方式的重要性)。
📚 参考文献与延伸阅读
- Dosovitskiy et al. (2020), An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale, ICLR 2021 — ViT 原论文:大数据预训练下超越 CNN
- Vaswani et al. (2017), Attention Is All You Need — Transformer 原论文,ViT 的编码器直接搬自这里(见 第 7 步)
- Touvron et al. (2021), Training Data-Efficient Image Transformers — DeiT:蒸馏 + 强增强让 ViT 在 ImageNet 规模也能训好
- 回顾 → 第 6 步 · 注意力机制:Q/K/V 与缩放点积;ML 第 12 步 · CNN:局部卷积的归纳偏置;第 9 步 · ResNet:编码器块里的残差捷径
📝 课后练习
检验你的理解——答对为止