An Image is Worth 16x16 Words Transformers for Image Recognition at Scale
记录论文《An Image is Worth 16x16 Words Transformers for Image Recognition at Scale》阅读过程中的一些思考。
简介
论文获取:arXiv | 网盘备份 | 参考博文 | 参考视频(Yi Zhu)
ViT 证明了将图像切分为 patch 序列后,纯 Transformer 无需卷积即可在大规模数据下达到甚至超越 CNN 的图像分类性能。
概念
图块嵌入 / Patch Embedding
对于输入图像 $\mathbf{x} \in \mathbb{R}^{H \times W \times C}$ ,将其切分为 $N$ 个固定大小的非重叠图块(patch),若每个图块尺寸为 $P \times P$ ,则图块 $\mathbf{x}_p \in \mathbb{R}^{N \times (P^2 \cdot C)}$ 的数量为 $N = \frac{HW}{P^2}$ 。
每个图块被展平为一个 $P^2 \cdot C$ 维向量后,通过一个可学习的线性投影(即矩阵 $\mathbf{E} \in \mathbb{R}^{(P^2 \cdot C) \times D}$ )映射到 $D$ 维的图块嵌入向量,即
$$\mathbf{z}_0^i = \mathbf{x}_p^i \mathbf{E}, \quad i = 1, \ldots, N$$
在实现上,这等价于一个卷积核大小和步长均为 $P$ 的卷积操作。
衡准
图块嵌入是解决如何将 2D 图像输入标准 Transformer 这样的 1D 序列模型的问题,即如何将图像"分词"。
论文标题 “An Image is Worth 16x16 Words” 直接点明了解决思路:一张图像被视为 $N$ 个 $16 \times 16$ 的"视觉词元"。
探微
Q1: 图块嵌入与 CNN 提取特征有什么本质区别?
A: 图块嵌入仅做一次线性投影,不引入“任何”空间归纳偏置(如局部性、平移等变性),图块之间的空间关系完全交由后续的 Self-Attention 学习。而 CNN 通过层层卷积逐步构建从局部到全局的层次化特征。
这里进一步有个疑问:图块本身的尺寸 $P$ 只要大于 $1$ 似乎也不能说完全没有局部性假设吧?
论文的消融试验(Table 2)中体现的更小的图块计算预算充足时效果更好,印证了更少的归纳偏置在大数据下模型泛化性更好。
Q2: 图块大小 $P$ 的选取有什么影响?
A: $P$ 越小,序列长度 $N = \frac{HW}{P^2}$ 越大。由于 Self-Attention 的计算复杂度为 $O(N^2)$ ,更小的 $P$ 意味着更细的粒度但更高的计算代价。论文消融实验表明,更小的图块(如 $P=14$ 或 $P=16$ )在计算预算充足时效果更好,但 $P=32$ 在计算受限时是更优的折中。
Q3: 为什么说线性投影等价于卷积操作?
A: 设 Conv2d 层拥有 $D$ 个卷积核,每个卷积核 $\mathbf{w}_j \in \mathbb{R}^{C \times P \times P}$($j = 1, \ldots, D$),步长为 $P$ ,则每个卷积核窗口恰好覆盖一个图块,且窗口之间无重叠。对于第 $i$ 个图块,第 $j$ 个卷积核的输出为
$$o_{i,j} = \sum_{c,p,q} \mathbf{w}_{j,c,p,q} \cdot \mathbf{x}_{p}^{i}{}_{c,p,q}$$
这与将图块展平为 $P^2 \cdot C$ 维向量后乘以投影矩阵 $\mathbf{E}$ 的第 $j$ 列完全等价。因此整个卷积层的权重张量 $\mathbf{W} \in \mathbb{R}^{D \times C \times P \times P}$ 展平后即对应投影矩阵 $\mathbf{E} \in \mathbb{R}^{(P^2 \cdot C) \times D}$ 。
类别标记 / [class] Token
沿用 BERT 的做法,在图块嵌入序列前拼接一个可学习的类别嵌入(class embedding),即 $\mathbf{z}_0^0 = \mathbf{x}_{class}$ 。经过 Transformer Encoder 的多层处理后,该标记在最后一层的输出 $\mathbf{z}_L^0$ 被用作整个图像的全局表示,送入分类头进行预测,即
$$\mathbf{y} = \text{LN}(\mathbf{z}_L^0)$$
其中 $\text{LN}$ 为 Layer Norm 。
衡准
[class] Token 用于充当全局信息的"聚合器"。它没有对应任何具体图块,而是通过 Self-Attention 与所有图块交互来收集全局语义。
探微
Q1: 为什么不直接对所有图块的输出做全局池化(Global Average Pooling, GAP)?
A: 论文实验了两种方案——[class] Token 和 GAP。结果表明两者在经过适当的学习率调整后性能相当。作者沿用 [class] Token 主要是为了与标准 Transformer 保持一致。但后续的一些工作(如 DeiT)在某些设置下发现 GAP 同样有效甚至更优。
位置嵌入 / Position Embedding
与经典 Transformer 使用固定的正余弦位置编码不同, ViT 采用可学习的 1D 位置嵌入 $\mathbf{E}_{pos} \in \mathbb{R}^{(N+1) \times D}$ ,在输入 Transformer Encoder 前加到图块嵌入序列上,即
$$\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}$$
其中 $N+1$ 包含了 [class] Token 对应的位置。
衡准
参见。
探微
Q1: 为什么 ViT 使用 1D 位置嵌入而不是 2D ?
A: 图块本身虽然排列在 2D 网格上,但展平为序列后只需 1D 索引。论文消融实验(Table 8)对比了无位置编码、1D 可学习、2D 可学习、以及相对位置编码,结论是:
- 没有位置编码时性能显著下降(说明位置信息很重要)
1D可学习编码与2D可学习编码性能几乎无差异
作者推测这是因为 ViT 处理的是图块级别而非像素级别的序列,分辨率相对较低(如 $14 \times 14 = 196$ 个图块),1D 编码有足够的容量学到空间结构。
Q2: ViT 的位置嵌入学到了什么?
A: 论文对学到的位置嵌入做了可视化(Figure 7)。具体做法是:对于每一个 patch 位置 $i$ ,计算其位置嵌入向量与所有 $N$ 个位置的嵌入向量之间的余弦相似度,得到 $N$ 个标量值,再将这 $N$ 个值按原始 $\sqrt{N} \times \sqrt{N}$ 的 2D 网格排列,形成一张热力图。图中每个小方格即为某个选定 patch 与所有其他 patch 的相似度分布,中间高亮处即为该 patch 自身位置(与自身的余弦相似度为 $1$)。
从可视化结果可以观察到清晰的 2D 空间结构——相邻位置的嵌入向量更相似,同行/同列的位置也呈现出有规律的关联模式。这说明模型虽然只使用了 1D 索引,但自动地从数据中学到了 2D 空间关系。

Q3: 在微调阶段使用更高分辨率的图像时,位置嵌入如何处理?
A: 更高分辨率意味着更多的图块数量 $N' > N$ ,而预训练的位置嵌入只有 $N+1$ 个。论文的做法是对其进行二维插值(2D interpolation)来适配新的网格大小。这是论文中为数不多手动注入 2D 归纳偏置的地方之一。
归纳偏置 / Inductive Bias
归纳偏置是指模型在架构设计中先验地对数据结构做出的假设。CNN 具有强烈的归纳偏置:
局部性(locality):- 核心假设:图像中相邻的像素点通常是相关的,而距离较远的像素点相关性较弱
- 架构体现:使用固定大小的
卷积核(Filter)在图像上滑动,每层神经元只关注局部邻域的输入
平移等变性(translation equivariance):- 核心假设:图像中某个物体或特征无论在图像的什么位置出现,其特征表示应该是相同的
- 架构体现:卷积核在所有位置
共享权重(Weight Sharing),同一卷积核在图像不同位置滑动提取特征,这意味着无论物体平移到哪里,提取的特征都相同
层次性(hierarchy):- 核心假设:图像特征具有层次性,复杂的特征有简单的特征组合而成
- 架构体现:通过堆叠多个卷积层,逐层扩大感受野,从局部到全局,网络可以先学习低级特征(如像素、边缘),逐渐学习中级特征(如纹理、形状),最后学习高级语义特征(物体部件、整体)
而 ViT 几乎不具备上述偏置——Self-Attention 是全局操作,不假设局部结构,仅在图块嵌入的切分步骤和位置嵌入的插值中引入了少量的 2D 结构先验。
衡准
这是 ViT 论文的核心讨论点之一。作者通过大量实验揭示了一个关键发现:归纳偏置与数据规模之间存在权衡。
- 在中小规模数据集(如
ImageNet-1K)上,ViT不如同等规模的CNN(如ResNet),因为缺乏归纳偏置使得模型更难从有限数据中学到有效的空间特征 - 当预训练数据规模足够大(如
JFT-300M)时,ViT的性能追上甚至超越CNN,说明大数据可以替代归纳偏置——模型能够从数据本身学到局部性和平移等变性等模式
探微
Q1: 论文中提到的混合模型(Hybrid model)是什么?
A: 混合模型用 CNN(如 ResNet50)作为骨干提取特征图,再将特征图的每个空间位置视为一个"图块"输入 Transformer 。这相当于用 CNN 的特征图替代了原始的线性图块嵌入,从而在图块嵌入阶段注入了 CNN 的归纳偏置。论文实验表明,在小数据量下混合模型优于纯 ViT,但随数据量增加差距消失。

Q2: ViT 缺乏归纳偏置对后续工作有什么启示?
A: 后续工作沿两条路线发展:
- 注入归纳偏置:如
DeiT通过知识蒸馏(Knowledge Distillation)从CNN教师传递归纳偏置使得ViT仅在ImageNet-1K上训练即可高效工作;Swin Transformer通过滑动窗口(Shifted Window)注入局部性和层次性 - 更大规模预训练:遵循
ViT的发现,用更大数据和更大模型进一步提升性能
思路
