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 大小为,那么图像被划分为 个 patch。

每个 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 也能做得更好,关键在于大规模数据预训练。