ViT论文阅读笔记
论文标题:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 论文链接:arXiv:2010.11929
一、研究动机:图像分类是否必须依赖 CNN?
Transformer 在 NLP 领域大杀四方后,研究者自然希望将其引入视觉任务。但此前的工作往往是将 Transformer 和 CNN 相结合(比如在 CNN 基础上加注意力模块),很少有完全放弃 CNN的尝试。
本文作者提出了一个大胆的想法:能否像处理文本那样,直接将图像“切分成单词”,交给 Transformer 处理?
他们的答案是Yes,只要你用足够大的数据集进行预训练。
二、核心思想:图像 = patch 序列
论文中提出的模型叫做 Vision Transformer(ViT),其核心思想非常简洁:
- 将图像划分为固定大小的 patch(例如 16x16)
- 将每个 patch 展平后进行线性投影(即得到 patch embedding)
- 加入位置编码(Positional Embedding)
- 加一个特殊的
[CLS]
token 用于分类任务 - 把所有 patch embedding + CLS token 输入标准 Transformer 编码器
这就像是把图像当作一串“单词”处理,完全复用 NLP 中的 Transformer 架构。
三、模型结构
1. Patch Embedding
假设输入图像大小为
每个 patch 展平成一维向量后,使用一个线性层映射到固定维度D,形成 patch embedding。
:可学习的分类 token :位置编码,保持序列顺序信息
2. Transformer Encoder
ViT 直接使用标准的 Transformer Encoder,包括多层如下结构:
- Multi-Head Self-Attention + 残差连接 + LayerNorm
- MLP(两层 FC + GELU) + 残差连接 + LayerNorm
公式如下:
最终我们取输出中 [CLS]
token 对应的向量做分类。
四、为什么 ViT 一开始表现不佳?
Transformer 相比 CNN 缺乏图像特有的归纳偏置(inductive bias):
- CNN 具备局部感受野和平移等变性
- Transformer 是全局注意力机制,对空间结构不敏感
因此,在小数据集(如 ImageNet)上训练 ViT,会严重过拟合,表现不如 ResNet。
但 ViT 的关键优势在于:更强的可扩展性。
五、训练规模决定成败
作者发现,只要你能使用足够大的数据集(比如:
- ImageNet-21k(1400 万图像)
- JFT-300M(3 亿图像,Google 内部)
ViT 就能显著超越 ResNet 等 CNN:
模型 | ImageNet Top-1 (%) | CIFAR-100 (%) | Params | 训练资源 (TPU core-days) |
---|---|---|---|---|
ViT-H/14 | 88.55 | 94.55 | 632M | 2500 |
BiT-L/152 | 87.54 | 93.51 | 928M | 9900 |
EfficientNet-L2 | 88.5 | - | 480M | 12300 |
六、一些细节设计
- 位置编码:使用标准 1D 可学习位置编码,2D 编码并未提升性能
- 高分辨率 fine-tuning:ViT 可以在高于 pretrain 的分辨率上 fine-tune(比如训练时 224,fine-tune 用 384),性能会提升
- 可解释性:注意力热图显示 ViT 能关注图像中关键区域
- 自监督预训练:ViT 在 Masked Patch Prediction 上初步尝试有提升,但仍不及有标签预训练
七、总结与展望
ViT 是一项划时代的工作,它首次证明了:
图像分类任务不必依赖卷积,Transformer 也能做得更好,关键在于大规模数据预训练。