2020 年 10 月,Google Brain 团队用一招极简的"把图像切成 16×16 的 Patch",把原本为文字设计的 Transformer 几乎原样地搬到了计算机视觉。在足够大的数据上预训练,Vision Transformer(ViT)超过了 SOTA 的 CNN,而所需的训练算力反而更少。这篇论文是 Transformer 横跨模态的关键一跃——它证明了一个深刻的事实:足够大规模的训练,能压倒人为设计的归纳偏置。本文是该论文的中文精校版。
Transformer 已经成为 NLP 的事实标准——超过 1000 亿参数的模型不断刷新性能。但在计算机视觉里,卷积神经网络(CNN)仍然是统治者。这篇论文挑战的核心问题是:视觉真的需要卷积吗?还是只是历史惯性?
自注意力架构——特别是 Transformer——已经成了 NLP 的不二之选。主流做法是"先在大语料上预训练,再在小任务数据集上微调"。得益于 Transformer 的高效与可扩展性,业界已经训出了超过 1000 亿参数的模型,而且性能还看不到饱和的迹象。
但在计算机视觉领域,卷积架构仍然是霸主。从 1989 年 LeCun 到 2012 年 AlexNet,再到 2016 年 ResNet——一脉相承。受 NLP 成功的启发,许多工作尝试把 CNN 和自注意力结合,甚至完全用注意力替换卷积。但这些方案要么没在现代加速硬件上跑出规模,要么需要特别复杂的注意力模式才能高效。在大规模图像识别上,类 ResNet 架构依然是 SOTA。
这篇论文的尝试很大胆:把标准的 Transformer 直接用在图像上,做最少的修改。具体做法是——把图像切成多个 patch,每个 patch 的线性嵌入序列作为 Transformer 的输入。图像 patch 被当成 NLP 里的 token(单词)一样处理。然后用监督学习方式训练图像分类。
在中等规模数据集(如 ImageNet)上、没有强正则化的情况下,ViT 的准确率比同规模 ResNet 差几个百分点。这个看似令人失望的结果其实可以预期:Transformer 缺少 CNN 自带的归纳偏置(平移等变性、局部性),因此在数据不够时泛化不好。
但只要把训练数据规模扩大到 1400 万到 3 亿张图像——故事就完全反转了。
标准 Transformer 接收 1D token 序列作为输入。要处理 2D 图像,ViT 做了一件极简的事:把图像 reshape 成 patch 序列——一个 $224 \times 224$ 的图像,用 $16 \times 16$ 的 patch 切,可以得到 $14 \times 14 = 196$ 个 patch。每个 patch 展平后用一个可学习的线性投影映射到 $D$ 维。这就是论文标题的字面含义——"一张图片值 16×16 个词"。
标准 Transformer 接收一个 1D 的 token 嵌入序列。要处理 2D 图像,ViT 做的事情极其直接:把图像 $x \in \mathbb{R}^{H \times W \times C}$ 重塑成一个展平的 2D patch 序列 $x_p \in \mathbb{R}^{N \times (P^2 \cdot C)}$,其中 $(P, P)$ 是每个 patch 的分辨率,$N = H W / P^2$ 是 patch 数量——也就是 Transformer 的有效输入序列长度。
Transformer 在所有层里用恒定的隐向量维度 $D$,所以我们把 patch 展平后,用一个可训练的线性投影把它映射到 $D$ 维。论文把这个投影的输出称为 "patch embeddings"。
一张 224×224 的图像,
切成 14×14 = 196 个 16×16 的 patch,
每个 patch 当作一个 "词"。
剩下的事,交给 Transformer。
ViT 几乎是原汁原味的 Transformer 编码器。两个改动:第一,仿照 BERT,在 patch 序列前面拼一个可学习的 [class] token,用它在最后输出位置的表示做分类;第二,加上1D 可学习的位置嵌入。整个模型用四个方程就能完整描述。
整体架构非常优雅。ViT 借鉴了 BERT 的 [class] token 设计——在 patch 嵌入序列最前面拼一个可学习的嵌入向量 $x_{class}$,它在 Transformer 编码器输出端的状态 $z_L^0$ 充当整个图像的表示 $y$。
无论预训练还是微调,分类头都接在 $z_L^0$ 上。预训练时分类头是一个带一个隐层的 MLP,微调时简化为一个线性层。
位置信息怎么注入?论文用标准的 1D 可学习位置嵌入——他们试过更复杂的 2D 位置嵌入,发现性能提升不明显。
整个 ViT 可以用下面四个方程完整描述:
翻译一下:
· 方程 1:把所有 patch 嵌入 + class token 拼起来,加上位置嵌入,得到第 0 层输入
· 方程 2:每一层先 LayerNorm,再过多头自注意力(MSA),再残差连接
· 方程 3:同一层接着 LayerNorm,再过 MLP(两层带 GELU 激活),再残差连接
· 方程 4:最终输出是 class token 在最后一层的表示,再过一个 LayerNorm
注意一个细节:LayerNorm 放在了每个 block 之前(即 "Pre-Norm" 而非原 Transformer 的 "Post-Norm")。这是后续 BERT/GPT 系也采纳的更稳定的做法。
CNN 把"局部性、平移等变性、二维邻域结构"这些归纳偏置烧进了每一层。ViT 只在两个时刻用到 2D 结构:开头切 patch 时、微调时调整位置嵌入。其他所有空间关系都得从数据里学。这是 ViT 的劣势——数据少时泛化差;也是它的潜力——数据足时不被人为约束。
这一节作者讨论了一个深刻的问题:归纳偏置(inductive bias)。
CNN 是把图像专用的归纳偏置烧进了网络结构的——局部性、二维邻域结构、平移等变性。每一层都自带这些假设。这意味着 CNN 在小数据上能用相对少的样本学到合理的图像表示。
ViT 放弃了大部分这种归纳偏置。在 ViT 里,只有 MLP 层是局部和平移等变的;自注意力层是全局的。二维邻域结构被用得非常"节省"——只在两个时刻:第一,模型开头把图像切成 patch 的时候;第二,微调时为不同分辨率调整位置嵌入。除此之外,位置嵌入在初始化时不携带任何关于 patch 2D 位置的信息——所有 patch 之间的空间关系,都要从头学。
论文还提了一个"混合架构"作为对照:用 CNN 的特征图作为 Transformer 的输入,相当于把 patch embedding 替换成对 CNN 特征图的 patch 提取。后面的实验会比较纯 ViT 和混合架构。
ViT 配置参照 BERT,提供三档:Base / Large / Huge。命名约定 ViT-L/16 表示 "Large" 变体 + $16 \times 16$ patch 大小。patch 越小,序列越长,算力越贵(序列长度反比于 patch 边长的平方)。
ViT 的三档配置直接借了 BERT 的设计:
| 模型 | 层数 | 隐维度 $D$ | MLP 维 | 头数 | 参数量 |
|---|---|---|---|---|---|
| ViT-Base | 12 | 768 | 3072 | 12 | 86 M |
| ViT-Large | 24 | 1024 | 4096 | 16 | 307 M |
| ViT-Huge | 32 | 1280 | 5120 | 16 | 632 M |
命名约定:ViT-L/16 表示 "Large" 变体 + $16 \times 16$ 的 patch 大小。注意 Transformer 的序列长度反比于 patch 边长的平方——所以 patch 越小,模型计算成本越高。
CNN 基线方面,作者用 ResNet 但做了几处修改——把 Batch Normalization 换成 Group Normalization、用 standardized convolutions——记为 "ResNet (BiT)"。混合架构则用 ResNet50 的中间特征图作为 ViT 的输入。
训练用 Adam,$\beta_1 = 0.9$、$\beta_2 = 0.999$,batch size 4096,weight decay $0.1$。微调时改用带动量的 SGD,batch size 512。预训练在三个数据集上做对比:ImageNet(1.3M 图像)、ImageNet-21k(14M)、JFT-300M(303M,Google 内部数据集)。下游迁移到 ImageNet、CIFAR-10/100、Oxford Pets、Oxford Flowers,以及 19 任务的 VTAB 基准。
论文最重磅的对比,是把最大的两个 ViT 模型(ViT-H/14 和 ViT-L/16)跟当时的 SOTA 卷积模型——Big Transfer (BiT) 和 Noisy Student——放在一起比。
结果在 JFT-300M 预训练下,ViT-H/14 在 ImageNet 上达到 88.55%、CIFAR-100 上 94.55%、VTAB 上 77.63%——几乎所有数据集上都超过了 BiT-L。更惊人的是训练成本:ViT-H/14 用了 2500 TPUv3-core-days,而 BiT-L 用了 9900,Noisy Student 用了 12300。也就是说 ViT 用了不到 BiT-L 三分之一的算力,达到了更好的结果。
ViT-L/16 更夸张——只用 680 TPUv3-core-days,性能就和 BiT-L 相当。如果换用更小的公开数据集 ImageNet-21k 来预训练 ViT-L/16,只需要标准云上的 8 核 TPUv3 训练大约 30 天,依然能跑出极有竞争力的结果。这意味着大多数实验室都能复现 ViT 的训练。
在足够大的预训练数据上,
ViT 用 1/4 的算力,
就能全面超过最好的 ResNet。
作者做了一个关键实验:把 ViT 和 ResNet 在不同规模的预训练数据上对比——9M、30M、90M、300M 张图像。结论一目了然:
这印证了一个深刻判断:卷积的归纳偏置在小数据上有用,但大数据足够时,让模型直接从数据里学,反而更好甚至有利。
这一节是整篇论文最有"哲学意味"的部分。作者问了一个问题:ViT 缺少 CNN 的归纳偏置——那它到底需要多少数据才能赢?
他们做了两组实验。
第一组,在三个不同大小的预训练数据集上训 ViT 和 BiT-ResNet,然后都微调到 ImageNet。结果(论文 Figure 3)非常清晰:
· 用 ImageNet 单独预训练(1.3M 图像)——ViT-Large 比 ViT-Base 更差,因为大模型缺数据时反而过拟合。
· 用 ImageNet-21k 预训练(14M 图像)——两个 ViT 尺寸性能相当。
· 用 JFT-300M 预训练(300M 图像)——大模型的优势完全显现,ViT-H 远超 ViT-L 远超 ViT-B。
第二组,在 JFT 的 9M、30M、90M 子集和全量 300M 上对比 ViT 与 ResNet(不加额外正则化)。结果 ViT 在 9M 上明显输给同等算力的 ResNet50;但到 90M+ 就反超。
在小数据上,卷积的归纳偏置是有用的拐杖。
但在大数据上,这副拐杖反而成了枷锁——
让模型从数据里自己学规律,更好。
这个发现的意义远超 ViT 本身。它说明——在过去几十年里——许多被视为"必要"的人工设计,其实只是数据不足时的临时拐杖。当算力和数据足够大时,让模型自己从数据中学到规律,往往比手工注入归纳偏置更强。这是后续大模型时代(GPT-3、GPT-4、Claude)背后的核心信念。
对 ViT 内部表示的分析揭示了三件有趣的事:
要理解 ViT 是怎么处理图像数据的,作者分析了它的内部表示。
第一层的 patch embedding 滤波器——展平 patch 之后被线性投影到低维空间。可视化前 28 个主成分,会发现它们像合理的基函数——边缘、纹理之类的低层视觉特征。和 CNN 第一层 Gabor 滤波器很相似。这说明 ViT 自己学到了类 CNN 的浅层视觉特征。
位置嵌入也很神奇。作者发现,模型学到了用位置嵌入的相似性来编码图像中的距离——越近的 patch,嵌入越相似。而且行列结构明显出现,更大网格上还能看到正弦曲线般的结构。这就是为什么手工设计的 2D 位置嵌入没带来提升——模型自己学出来了。
最有意思的是注意力距离分析。作者基于注意力权重,计算了每个头平均整合信息的图像空间距离——类似于 CNN 里的"感受野"。发现:
· 一些注意力头在最低层就关注整张图像的大部分,证明 ViT 真的在使用全局信息
· 另一些头在低层始终关注局部——类似于 CNN 的早期卷积层
· 网络越深,注意力距离普遍越远——模型从局部走向全局
而且,从全局来看,模型确实会关注与分类语义相关的图像区域。
ViT 这篇论文的真正意义,不在于刷了多少 SOTA,而在于它用最少的修改证明了 Transformer 是模态无关的。从这篇论文之后,CV 进入了 Transformer 时代——DETR、SwinT、DINO、CLIP、SAM、Diffusion Transformer……几乎所有 2021 年后的视觉大模型,都建立在 ViT 的肩膀上。
2020 年 10 月,这篇论文出现的时候,业界对它有许多怀疑——"图像和语言不一样"、"卷积才是视觉之神"、"Transformer 在小数据上根本不行"。一年之后,所有这些怀疑都被现实击碎了。
ViT 的真正意义,不在于它刷了多少 SOTA,而在于它证明了一件事:Transformer 是模态无关的通用架构。只要数据足够大,几乎不需要为新模态做架构上的特化。这个结论后来在音频(Audio Spectrogram Transformer)、视频(Video Transformer)、多模态(CLIP)、甚至蛋白质(AlphaFold 的 EvoFormer)上一遍遍被验证。
从这篇论文之后,CV 进入了 Transformer 时代——DETR、Swin Transformer、DINO、CLIP、SAM、扩散 Transformer(DiT)……几乎所有 2021 年后的视觉大模型,都建立在 ViT 的肩膀上。
这篇论文没说一句"我们要统一所有模态",
但它把这件事用实验做了出来。
从 NLP 到 CV,再到音频、视频、多模态——
Transformer 真正成了 AI 的通用底层架构。
如果说 2017 年的《Attention Is All You Need》是 AI 的第一次大爆炸,那么 2020 年的 ViT 就是第二次冲击波——它让 Transformer 从语言走向视觉,再走向一切。今天,当你用 ChatGPT 看图、用 Midjourney 生图、用 Sora 生视频——它们的底层都流着 ViT 的血。
下一次,我们会接着讲 CLIP——OpenAI 怎么用 4 亿张图文对,把 ViT 和文本 Transformer 联姻,开启了"零样本视觉理解"的时代。