论文: An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale
作者: Alexey Dosovitskiy 等,Google Research
会议: ICLR 2021
论文地址: arXiv:2010.11929

摘要

《An Image is Worth 16×16 Words》提出了 Vision Transformer,简称 ViT。它将图像切分为固定尺寸的 Patch,把每个 Patch 当作一个视觉 Token,再直接输入标准 Transformer Encoder 完成图像分类。

这篇论文最重要的结论不是“Transformer 也能处理图像”,而是:

当预训练数据和模型规模足够大时,几乎不引入视觉专用结构的纯 Transformer,也可以在图像识别任务上达到甚至超过强卷积神经网络。

ViT 改变了计算机视觉长期依赖 CNN 的技术路线,并为后续的 CLIP、MAE、DINO、SAM、视觉语言模型和多模态大模型奠定了基础。


1. 研究背景

在 ViT 之前,计算机视觉的主流架构几乎完全由 CNN 主导,包括:

  • LeNet
  • AlexNet
  • VGG
  • ResNet
  • EfficientNet

与此同时,Transformer 已经在 NLP 中取得成功,并逐渐成为 BERT、GPT、T5 等模型的统一基础架构。

然而,直接将 Transformer 用于图像仍面临三个问题:

  1. 图像输入维度过高。 若把每个像素视为 Token,序列长度会非常大。
  2. 自注意力复杂度为 O(N2)O(N^2) 高分辨率图像会造成难以承受的计算成本。
  3. Transformer 缺少 CNN 的视觉归纳偏置。 它不天然具备局部性和平移等变性。

因此,此前大量视觉 Transformer 工作仍保留 CNN Backbone,或者只在局部模块中引入 Attention。

ViT 的突破在于,它几乎完全移除了卷积结构,并证明标准 Transformer Encoder 可以直接处理图像 Patch 序列。


2. 核心思想:把图像转换为 Token 序列

ViT 的核心思想可以概括为:

把一张图像切成多个固定大小的 Patch,每个 Patch 相当于 NLP 中的一个 Word Token。

假设输入图像大小为:

H×W×CH \times W \times C

其中:

  • HH:图像高度
  • WW:图像宽度
  • CC:通道数
  • PP:Patch 边长

图像会被切分为:

N=H×WP2N = \frac{H \times W}{P^2}

个 Patch。

例如,对于一张 224×224224 \times 224 的 RGB 图像,使用 16×1616 \times 16 的 Patch:

N=224×22416×16=14×14=196N = \frac{224 \times 224}{16 \times 16} = 14 \times 14 = 196

因此,一张图像会被转换为 196 个视觉 Token。

每个 Patch 的原始维度为:

16×16×3=76816 \times 16 \times 3 = 768

将其展平后,再通过线性层映射到 Transformer 的隐藏维度。


3. 模型整体结构

ViT 的处理流程如下:

Image

Split into fixed-size patches

Flatten each patch

Linear projection / Patch embedding

Add class token and position embedding

Transformer Encoder

Take class-token representation

MLP classification head

Class prediction

除了输入 Token 的构造方式不同,ViT 与标准 BERT 风格的 Transformer Encoder 基本一致。

3.1 Patch Embedding

输入图像记为:

xRH×W×C\mathbf{x} \in \mathbb{R}^{H \times W \times C}

切分并展平后得到 Patch 序列:

xpRN×(P2C)\mathbf{x}_p \in \mathbb{R}^{N \times (P^2C)}

每个 Patch 通过可学习的线性投影矩阵 E\mathbf{E} 映射到 DD 维:

xpiE,ER(P2C)×D\mathbf{x}_p^i \mathbf{E}, \quad \mathbf{E} \in \mathbb{R}^{(P^2C) \times D}

从实现角度看,Patch Embedding 也可以等价地使用:

Conv2D(
  kernel_size = patch_size,
  stride = patch_size
)

完成切块和线性映射。

3.2 Class Token

ViT 在 Patch 序列最前面加入一个可学习的 Class Token:

xclass\mathbf{x}_{class}

完整输入序列为:

z0=[xclass;xp1E;xp2E;;xpNE]+Epos\mathbf{z}_0 = [ \mathbf{x}_{class}; \mathbf{x}_p^1\mathbf{E}; \mathbf{x}_p^2\mathbf{E}; \cdots; \mathbf{x}_p^N\mathbf{E} ] + \mathbf{E}_{pos}

经过 Transformer Encoder 后,取最终 Class Token 的表示用于分类:

y=LN(zL0)\mathbf{y} = \mathrm{LN}(\mathbf{z}_L^0)

这个设计与 BERT 的 [CLS] Token 高度相似。

3.3 Position Embedding

自注意力本身对 Token 顺序不敏感,因此 ViT 需要加入位置编码,以保留 Patch 的空间位置信息。

论文采用可学习的一维位置嵌入:

EposR(N+1)×D\mathbf{E}_{pos} \in \mathbb{R}^{(N+1) \times D}

作者还比较了不同二维位置编码方案,但实验显示,更复杂的位置编码并没有带来显著收益。

这说明模型可以在大规模训练中自行学习相当一部分二维空间关系。

3.4 Transformer Encoder

ViT 使用标准 Transformer Encoder,每一层包含:

  1. Layer Normalization
  2. Multi-Head Self-Attention
  3. Residual Connection
  4. Layer Normalization
  5. MLP
  6. Residual Connection

其计算过程可以写为:

z=MSA(LN(z1))+z1\mathbf{z}'_\ell = \mathrm{MSA}(\mathrm{LN}(\mathbf{z}_{\ell-1})) + \mathbf{z}_{\ell-1} z=MLP(LN(z))+z\mathbf{z}_\ell = \mathrm{MLP}(\mathrm{LN}(\mathbf{z}'_\ell)) + \mathbf{z}'_\ell

MLP 通常由两层全连接网络和 GELU 激活函数组成。


4. ViT 模型规格

论文主要定义了三种规模:

模型层数隐藏维度MLP 维度Attention Heads参数量
ViT-Base12768307212约 86M
ViT-Large241024409616约 307M
ViT-Huge321280512016约 632M

模型名称通常还会包含 Patch 大小,例如:

  • ViT-B/16
  • ViT-B/32
  • ViT-L/16
  • ViT-H/14

其中 BLH 表示 Base、Large、Huge,数字表示 Patch 的边长。


5. Patch 大小与计算成本

Patch 大小决定了视觉 Token 数量。

224×224224 \times 224 图像为例:

Patch 大小Token 网格Patch Token 数
32×3232 \times 327×77 \times 749
16×1616 \times 1614×1414 \times 14196
8×88 \times 828×2828 \times 28784

Patch 越小:

  • 保留的局部细节越多
  • 序列长度越长
  • Attention 计算成本越高

由于自注意力复杂度约为:

O(N2D)O(N^2D)

当 Token 数从 196 增长到 784 时,Attention 矩阵规模会增长约 16 倍。

因此,Patch 大小本质上是精度、细粒度视觉信息和计算成本之间的权衡。


6. 论文真正的关键:大规模预训练

ViT 并不是在所有数据规模下都优于 CNN。

论文发现:

  • 在 ImageNet 这类中等规模数据集上直接训练时,ViT 的表现通常不如强 CNN。
  • 在 ImageNet-21k 或 JFT-300M 等大规模数据集上预训练后,ViT 的迁移学习性能显著提升。
  • 随着数据规模和模型规模增长,ViT 的收益比 CNN 更明显。

这揭示了 ViT 的核心特征:

ViT 的优势高度依赖大规模数据、模型容量和计算资源。

CNN 内置了较强的视觉先验:

  • 局部感受野
  • 权重共享
  • 平移等变性

这些先验使 CNN 在中小规模数据上更容易训练。

ViT 的先验更少,因此需要更多数据自行学习图像中的局部性、空间结构和对象关系;但归纳偏置更弱,也让它在大规模训练中拥有更高的模型上限。


7. 实验设计与主要结果

论文在多个预训练数据集上训练 ViT:

  • ImageNet
  • ImageNet-21k
  • JFT-300M

随后在多个下游任务上进行微调,包括:

  • ImageNet
  • CIFAR-10
  • CIFAR-100
  • Oxford-IIIT Pets
  • Oxford Flowers-102
  • VTAB

论文报告的代表性结果是:在大规模 JFT-300M 预训练后,ViT-H/14 在 ImageNet 上达到约 88.55% Top-1 Accuracy,超过当时多种强 CNN 和混合架构。

但更有价值的结论不是单个准确率,而是以下趋势。

7.1 数据越大,ViT 越有优势

在较小数据集上,卷积网络通常更具数据效率。

当预训练数据扩大到 ImageNet-21k 和 JFT-300M 后,ViT 的表现快速提升,并超过强 CNN 基线。

7.2 模型扩展性较好

随着模型参数量和训练数据增加,ViT 的性能持续提升。

这一特性使其非常适合 Foundation Model 路线:

More data
  +
Larger model
  +
More compute

Better transferable representations

7.3 迁移学习能力强

经过大规模预训练后,ViT 在多个下游图像分类任务上表现稳定,说明它学习到的并不只是某个数据集的分类规则,而是可迁移的通用视觉表示。


8. ViT 学到了什么

论文对 Attention 和中间表示进行了可视化分析。

8.1 低层 Attention 具有局部性

尽管 ViT 没有显式卷积层,一些浅层 Attention Head 仍会关注邻近 Patch。

这意味着模型可以通过数据自行学习类似卷积局部感受野的行为。

8.2 高层 Attention 具有全局性

部分 Attention Head 从较浅层开始就能够建立长距离依赖。

相比之下,CNN 通常需要堆叠多层卷积,才能获得较大的有效感受野。

8.3 Position Embedding 学到二维结构

虽然论文使用的是一维可学习位置向量,但训练后,不同位置嵌入之间的相似度呈现明显的二维空间模式。

相邻 Patch 的位置表示更加相似,说明模型自行恢复了图像网格结构。


9. ViT 与 CNN 的本质区别

维度CNNViT
基本单元像素邻域、卷积核Patch Token
信息交互局部卷积逐层扩展Self-Attention 全局交互
归纳偏置
数据效率中小数据集较好通常依赖大规模预训练
扩展性良好大规模下通常更突出
全局建模依赖网络深度单层即可建立长距离关系
架构统一性视觉专用可与语言、多模态共享 Transformer 范式

CNN 的优势在于以较低数据成本编码视觉规律。

ViT 的优势在于减少手工设计的视觉假设,让模型在大规模数据中学习更通用的表示。


10. 论文的创新点

10.1 证明纯 Transformer 可以处理图像

ViT 几乎不依赖卷积结构,仅通过 Patch Embedding 将图像转换为序列,再使用标准 Transformer。

10.2 将 NLP 的预训练—微调范式迁移到视觉

其训练范式与 BERT、GPT 类似:

Large-scale pretraining

Task-specific fine-tuning

这推动计算机视觉从“针对任务设计网络”转向“预训练通用视觉 Backbone”。

10.3 揭示视觉模型的 Scaling 潜力

ViT 显示出随着数据、模型和算力扩大而持续获益的能力,为后续视觉基础模型提供了直接证据。

10.4 统一视觉和语言的建模接口

图像和文本都可以表示为 Token 序列并交给 Transformer 处理,为图文联合建模提供了统一架构基础。


11. 局限性

11.1 数据需求高

原始 ViT 在中小规模数据集上的训练效率不如 CNN。

这是其最明显的局限,也是后续 DeiT、DINO、MAE 等工作重点解决的问题。

11.2 高分辨率计算成本高

当图像分辨率上升或 Patch 变小时,Token 数迅速增长,而全局 Self-Attention 的复杂度是平方级。

这限制了原始 ViT 在检测、分割和高分辨率任务中的直接应用。

11.3 缺少多尺度层级结构

标准 CNN 会自然形成多尺度特征图,而原始 ViT 在各层通常维持相同 Token 分辨率。

这对目标检测和语义分割等密集预测任务并不理想。

Swin Transformer 后来通过窗口注意力和层级式特征结构改善了这一问题。

11.4 Patch 化可能损失细粒度信息

每个 Patch 在进入 Transformer 前会被压缩为一个向量。较大的 Patch 可能损失边缘、纹理和小目标信息。

11.5 训练成本较高

论文的最佳结果依赖超大规模私有数据集 JFT-300M 和大量算力,早期很难被普通研究团队完整复现。


12. 后续工作与技术演进

ViT 之后,视觉 Transformer 快速发展。

工作主要贡献论文
DeiT使用蒸馏和训练策略提升 ViT 的数据效率Training Data-Efficient Image Transformers & Distillation through Attention
Swin Transformer使用窗口注意力和层级结构支持检测、分割Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
BEiT引入类似 BERT 的视觉 Masked ModelingBEiT: BERT Pre-Training of Image Transformers
MAE使用高比例遮挡和重建任务进行自监督预训练Masked Autoencoders Are Scalable Vision Learners
DINO / DINOv2通过自蒸馏学习高质量通用视觉特征DINO / DINOv2
CLIP使用图文对比学习构建开放词汇视觉模型Learning Transferable Visual Models From Natural Language Supervision
SigLIP改进图文对比学习目标和训练效率Sigmoid Loss for Language Image Pre-Training
SAM以 ViT 为核心视觉编码器构建通用分割模型Segment Anything

这些工作分别解决了 ViT 的数据效率、高分辨率、层级特征、自监督训练和跨模态对齐问题。


13. 对多模态大模型的影响

ViT 为现代视觉语言模型提供了最关键的视觉 Token 化机制。

典型多模态架构通常是:

Image

ViT-like visual encoder

Visual tokens

Projector / Adapter / Resampler

Large Language Model

Multimodal response

这条技术路线的核心前提来自 ViT:

图像可以被转换成一组上下文化的 Token 表示,再与语言 Token 在统一 Transformer 体系中交互。

因此,ViT 不只是图像分类模型,也是视觉基础模型和多模态模型的架构起点之一。


14. 为什么 ViT 是里程碑论文

ViT 的历史价值主要体现在四个方面。

14.1 改变了视觉主干网络

CNN 不再是图像建模的唯一主流选择,Transformer 成为视觉 Backbone 的核心方案。

14.2 推动视觉进入 Foundation Model 时代

视觉模型开始采用大规模预训练、统一表示和下游迁移的路线。

14.3 统一 NLP、CV 与多模态架构

文本、图像、音频和视频可以被转换为 Token,并由类似的 Transformer 架构处理。

14.4 强化了 Scaling 路线

ViT 证明,减少任务特定结构、扩大数据和模型规模,可以获得更强的通用能力。


15. 工程实现要点

一个最小化 ViT 实现需要以下组件:

PatchEmbedding
ClassToken
PositionEmbedding
TransformerEncoder
LayerNorm
ClassificationHead

伪代码如下:

def forward(image):
    patches = split_into_patches(image)
    tokens = linear_projection(flatten(patches))

    cls = repeat(class_token, batch_size=image.batch_size)
    tokens = concat([cls, tokens], dim=1)
    tokens = tokens + position_embedding

    encoded = transformer_encoder(tokens)
    cls_output = layer_norm(encoded[:, 0])

    return classification_head(cls_output)

训练时需要特别关注:

  • AdamW 优化器
  • Weight Decay
  • Learning Rate Warmup
  • 数据增强
  • 较长训练周期
  • 大规模预训练
  • 微调时的位置编码插值

当输入分辨率变化时,Patch 数量也会变化,因此通常需要对二维位置嵌入执行插值。


16. 综合评价

维度评价
创新性极高
架构简洁性极高
原始模型的数据效率一般
扩展能力极强
工业影响极高
学术影响极高
历史地位深度学习里程碑

ViT 的核心价值不在于设计了复杂的新模块,而在于验证了一个极其简洁但影响深远的假设:

图像不一定需要使用卷积网络建模。只要把图像转换为合适的 Token 序列,标准 Transformer 就可以学习强大的视觉表示。


17. 结论

《An Image is Worth 16×16 Words》完成了计算机视觉架构范式的重要转换:

CNN-centric vision

Transformer-based vision

Vision foundation models

Unified multimodal models

论文提出的原始 ViT 仍存在数据需求高、全局 Attention 成本高和缺少层级特征等问题,但这些不足并没有削弱它的历史价值。

相反,后续大量工作正是围绕这些问题展开,并最终形成了今天的视觉基础模型和多模态大模型生态。

从长期影响看,ViT 可以与《Attention Is All You Need》、BERT 和 GPT 系列的代表性论文并列,是理解现代 AI 架构演进不可绕过的基础论文。


参考资料

  1. Dosovitskiy, A. et al. An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale. ICLR 2021.
  2. Vaswani, A. et al. Attention Is All You Need. NeurIPS 2017.
  3. Touvron, H. et al. Training Data-Efficient Image Transformers & Distillation through Attention. ICML 2021.
  4. Liu, Z. et al. Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. ICCV 2021.
  5. He, K. et al. Masked Autoencoders Are Scalable Vision Learners. CVPR 2022.