乔木博客
全部
AI工具
AI教程
AI生成
AI资讯
健脑房
播客解读
论文学习
一张图片等于196个词:Google的傻实验,怎么终结了CNN的时代
论文学习
·
2026年5月11日
·
771 次阅读
·
约 35 分钟
论文原文:An Image is Worth 16x16 Words: Transformers for Image Recognition at ScalearXiv:https://arxiv.org/abs/2010.11929发布日期:2020-10-22作者:Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov et al.(Google Brain)
2020 年秋天,Google Brain 的一组研究员做了一件在同行眼里有点奇怪的事情。
他们没有精心设计什么视觉专用的新模块,没有改进卷积层,也没有在 ResNet 的基础上做精妙的结构改造。
他们只是把 NLP 里用的 Transformer 直接搬过来,然后问了一个听起来很"傻"的问题:
如果把一张图片切成一个个 16×16 的小格子,把每个格子当成一个词,然后把整个"句子"输入 Transformer,会发生什么?
当时计算机视觉界的主流判断是:应该不会有什么好事。
Transformer 是处理序列数据的工具,它没有 CNN 那种内置的局部感知能力,不知道"旁边的像素更相关"这件事。
而且,自注意力的计算量是序列长度的平方,如果把像素逐个输入,224×224 的图片就有 50176 个元素,计算量是 50176²,完全不可行。
即便切成格子缩减了序列长度,在 ImageNet 这种"小"数据集上,缺乏卷积归纳偏置的 Transformer 肯定会输给精雕细琢了十年的 ResNet。
但他们还是认真做了。
用的是 Google 内部 3 亿张图的 JFT-300M 数据集,用的是当时能调动的最大算力。
结果是,这个"傻"实验在 2020 年彻底改变了视觉 AI 的走向。
此后四五年里,它影响了几乎每一个重要的视觉基础模型,从目标检测到图像生成,从医学影像到自动驾驶,Transformer 开始取代 CNN 成为新的基础设施。
CNN 统治的视觉世界,和一个越来越大的问题
要理解 ViT 为什么重要,先得感受一下它出现之前,计算机视觉是什么状态,以及那个状态里潜伏着什么矛盾。
从 2012 年 AlexNet 在 ImageNet 上以 16 个百分点的优势击败传统方法,深度卷积网络就成了视觉 AI 的代名词。
接下来的八年,视觉研究的主线几乎只有一条:设计更好的 CNN。
2014 年,VGGNet 证明越深越好,把网络推到了 16-19 层。
同年,GoogLeNet 用 Inception 模块把宽度和深度同时推高,参数量反而更少。
2015 年,ResNet 用残差连接解决了梯度消失,把深度一口气推到 152 层,并在 ImageNet 上拿到了 3.57% 的错误率,超越了人类水平。
2016 年到 2018 年,Dense Connection、SE 网络、MobileNet、ShuffleNet,各种精心设计的卷积模块接连出现,在准确率和效率之间反复权衡。
到 2019 年,EfficientNet 用神经架构搜索找到了宽度、深度、分辨率的最优组合,在 ImageNet 上达到了 88% 以上的准确率。
卷积神经网络(CNN):一种专门处理网格状数据的神经网络。核心操作是用小的卷积核在图像上滑动,每次只感知一个局部区域。这种设计自带两种"先天优势":局部感知(相邻像素比远处像素更相关)和平移不变性(无论目标出现在图片哪个位置都能识别)。这两种特性是专门为图像数据定制的归纳偏置,是 CNN 在视觉任务上的核心竞争力。
CNN 确实好用。
它对图片的两个基本属性做了合理的预设:图片里的语义内容通常是局部的,而且出现在哪个位置都应该被认出来。
这两个预设编码进架构,大大减少了模型需要从数据里学习的东西,所以即使数据不多,CNN 也能收敛得很好。
与此同时,NLP 领域在 2017 年已经完成了一场彻底的革命。
"Attention is All You Need"发表,提出了 Transformer 架构。
它的核心是自注意力机制:序列里的每个位置都可以直接关注所有其他位置,不受距离限制。
这和 CNN 的局部感知恰恰相反,是一种全局的、密集的信息交换方式。
自注意力机制(Self-Attention):Transformer 的核心操作。对于序列中的每个位置,计算它与所有其他位置的相关性分数,然后按分数加权求和,得到当前位置的新表示。让每个位置都能直接和任意远距离的位置交互,没有局部感受野的限制。计算代价是序列长度的平方,所以直接用在像素级别的大图上会非常昂贵。
2018 年,BERT 用 Transformer 做双向语言预训练,在 11 项 NLP 任务上同时刷新记录。
2019 年,GPT-2 展示了生成式 Transformer 在大规模数据下的惊人能力。
Transformer 在 NLP 里的成功有一个共同特征:规模越大越好,数据越多越好,而且没有饱和的迹象。
这和 CNN 在视觉上的表现形成了对比。
CNN 的准确率提升越来越依赖精心的架构设计,每一个百分点都需要大量工程投入。
而 Transformer 在 NLP 里,只要堆更多参数、喂更多数据,效果就能提升,架构本身几乎不需要改。
一个问题自然而然浮出来了:
如果说 CNN 的局部感知归纳偏置是在数据少的时候用来弥补数据不足的手段,那当数据多到足够多,能不能把这个手段扔掉,直接用 Transformer?
在 ViT 之前,大家都在试中间路线
在 Dosovitskiy 团队的工作之前,已经有很多人尝试把 Transformer 引入视觉,但几乎没有人做得彻底。
有人把自注意力加在 CNN 提取的特征图上,用 Transformer 做长距离建模,卷积还在;
有人在每个像素周围开一个小窗口做局部注意力,绕开了计算代价问题,但也放弃了全局交互;
有人在小分辨率图片(32×32)上做全局自注意力,证明了可行性,但这个分辨率根本无法用于真实图像识别;
2020 年的 DETR 把 ResNet 后接 Transformer 用于目标检测,效果很好,但卷积依然是骨架。
这些工作有一个共同特征:都是"半路混血",CNN 做特征提取,Transformer 做某种后处理或辅助模块。
没有人真正试过把 CNN 整个拿掉。
不是大家不想,是大家觉得不需要。
CNN 在视觉上已经够好了,而且有充分的理论解释:视觉数据确实具有局部性和平移不变性,把这些特性编码进架构是合理的设计。
从奥卡姆剃刀的角度,改动越少越好,不应该为了用 Transformer 而无故扔掉有效的归纳偏置。
这种保守的逻辑,在计算量有限、数据有限的时候是完全正确的。
但它暗藏了一个前提:数据始终有限。当这个前提被 JFT-300M 打破,一切都不一样了。
Google Brain 这次要做的,就是用规模去冲破这个前提。
把图片切成一串词
ViT 的核心设计用一句话就能说完:把图片切成 16×16 的格子,每个格子当一个词,输入标准 Transformer。
这句话背后有几个具体的工程决策,每一个都有讲究。
为什么是 16×16,而不是 8×8 或 32×32?
这是一个计算代价和分辨率的权衡。
一张 224×224 的图片:
如果切成 8×8 的格子,每张图变成 784 个 token,注意力计算量是 784²,大约 60 万次操作,太贵。
如果切成 16×16 的格子,每张图变成 196 个 token,注意力计算量是 196²,约 3.8 万次操作,可以接受。
如果切成 32×32 的格子,每张图只有 49 个 token,太粗糙,细节信息丢失太多。
16×16 是当时能跑起来、精度也够用的折中点。
Patch(图块):ViT 把图片切成固定大小的正方形小块。一张 224×224 的图片用 16×16 的格子切割,得到 196 个 Patch(14 列×14 行)。每个 Patch 包含 768 个数值(16×16 像素×3 颜色通道),展平后通过可学习的线性变换映射成一个 D 维向量,这个过程称为 Patch Embedding。
得到 196 个向量之后,在最前面额外加一个特殊的可学习向量,叫做[CLS] token,序列总长变成 197。
这 197 个向量送进 Transformer Encoder,经过 12 层(Base 版本)或 24 层(Large 版本)的处理,从[CLS]位置的输出向量读出分类结果。
[CLS] Token(分类标记):放在序列第一位的特殊可学习向量,不对应任何 Patch,专门用于聚合整张图片的信息做分类。训练结束时,它的输出向量通过线性层转成类别概率。这个设计直接借鉴自 BERT,在 NLP 里对应"整段话的整体语义",在 ViT 里对应"整张图片是什么类别"。
看这张架构图,从左到右清晰展示了整个流程:图片被切成小格子,每格变成一个向量,加上位置编码,加上[CLS]前缀,送进 Transformer Encoder,最后从[CLS]位置接分类头。
整个结构里,没有卷积,没有池化,没有任何视觉专用的组件,就是一个标准的 NLP Transformer Encoder,完整地从 BERT 的代码改过来的。
三个设计细节,各有来头
位置编码:模型学出来的坐标感
Transformer 本身无法区分输入的顺序,196 个 Patch 对它来说完全等价。
所以 ViT 给每个 Patch 加了一个位置编码向量,告诉它"你是第几块"。
位置编码(Position Embedding):附加在每个 Patch 向量上的可学习向量,用来告诉模型各 Patch 的位置信息。ViT 用简单的 1D 可学习位置嵌入,共 197 个(196 个 Patch 加 1 个[CLS]位置),通过训练自动优化,不需要手工设计正弦波公式。
有人质疑:图片是二维的,1D 位置编码能捕捉到行列结构吗?论文试了 2D 位置编码,效果和 1D 相近。
原因在这张图里:
这张图里每个格子代表一个 Patch 位置,颜色表示该位置的编码向量与其他所有位置编码的余弦相似度,越暖越相似。
仔细看,空间上相邻的 Patch,编码更相似;同一行或同一列的 Patch,颜色模式明显接近,隐约能看出行列结构,甚至在大格子尺寸时还能看到正弦波状的周期性。
模型没有被告知"这是二维图片",它自己从 196 个位置的共现模式里学出来了图片的空间结构。
这是一个很漂亮的结果:你不需要手工注入二维先验,数据量足够的时候,模型会自己发现它。
感受野:浅层局部,深层全局,ViT 自己安排的分工
CNN 有一个被研究了很多年的特性:不同层的感受野不同,浅层看小范围,深层看大范围。这是卷积核叠加出来的自然结果,写死在架构里。
ViT 没有这种硬编码,但它学出了类似的规律。
这张散点图横轴是层数,纵轴是平均注意力距离(注意力加权的空间跨度)。
每个点代表某一层的某个注意力头。可以看到:浅层里有不少注意力头集中在小范围,看的是局部信息;深层的注意力头则几乎全部扩展到全图范围,关注全局语义。
没有人告诉 ViT 该怎么安排这种分工,它自己在训练过程中学到了局部和全局的分层处理方式。
这件事本身就说明,视觉信息的"从局部到全局的层级结构"是图像数据里内在的规律,不依赖卷积这个特定的实现形式,Transformer 也能捕捉到它。
这张图里还有一个细节值得注意:浅层里同时存在"注意力距离非常小"和"注意力距离非常大"的头。
也就是说,ViT 在第一层就可以选择性地做全局交互,而 CNN 的浅层感受野天然受限,等到深层才能积累出全局视野。
这种从第一层就能"想看哪里看哪里"的灵活性,在需要全局线索的任务上是真实的优势,比如判断图片里两个物体的相对位置,或者理解需要整体背景的场景语义。
ViT 的三个型号
论文提出了三个规模的 ViT,配置直接沿用 BERT 的体系:
型号
Transformer 层数
隐层维度
注意力头数
参数量
ViT-Base(B)
12
768
12
86M
ViT-Large(L)
24
1024
16
307M
ViT-Huge(H)
32
1280
16
632M
B 和 L 直接对应 BERT-Base 和 BERT-Large 的规格,方便和 NLP 领域的成果横向对比。
Huge 是这篇论文新加的规格,专门为大规模预训练场景设计。
在命名上,ViT-L/16 代表 Large 版本用 16×16 的 Patch,ViT-H/14 代表 Huge 版本用 14×14 的 Patch。
Patch 越小,一张图被切成的块越多,序列越长,自注意力计算量越大,但每块捕获的图片细节越丰富。
Fine-tuning(微调):ViT 在大数据集上预训练完成后,针对目标任务用少量标注数据继续训练的过程。微调时会以比预训练更高的分辨率输入图片,比如 ViT-L/16 在预训练时用 224×224,微调时换用 512×512。更高分辨率让每个 Patch 覆盖更小的图片区域,序列更长,细节更丰富,ViT 通过二维插值调整预训练好的位置编码,适应新的序列长度。
微调时还有一个细节:预训练时的分类头(MLP)会被替换成针对目标类别数的新线性层。
整个预训练模型的参数都参与微调更新,不只是最后一层。
这和 CV 领域以前"固定特征提取器,只训练最后一层"的做法不同,全参数微调让 ViT 能够针对新任务调整所有层的表示。
最关键的发现:规模压倒一切
读完前面的架构介绍,你可能还没觉得这有什么了不起的。
把图片切成格子当词处理,这个想法说出来不超过一句话,设计上也没有什么出人意料的创新。
ViT 论文真正重要的贡献,不在架构上,而在于它用实验清晰地展示了一个结论:
在足够多的数据下,没有卷积归纳偏置的 Transformer,可以超越精心设计了十年的 CNN。
在 ImageNet(1.28M 图片)上单独预训练,ViT 各个规格都跑不赢 ResNet。
这在意料之中。CNN 的归纳偏置在数据少的时候就是优势,Transformer 没有这个先验,需要更多数据来弥补。
但当预训练数据换成 ImageNet-21k(14M 图片),ViT 和 ResNet 已经差不多;换成 JFT-300M(3 亿图片),ViT 全面超越。
归纳偏置(Inductive Bias):模型在设计上预先嵌入的关于任务结构的假设。CNN 的归纳偏置包括局部感知(相邻像素更相关)和平移不变性(目标位置无关)。这些假设在视觉数据上是正确的,所以 CNN 在小数据上能快速收敛。ViT 几乎没有视觉专用的归纳偏置,必须从数据里从头学习这些模式,因此需要更多数据。
这张图用曲线展示了这个转折:纵轴是迁移到 ImageNet 后的准确率,横轴代表预训练数据集规模。
BiT(ResNet 系列)在左边领先,曲线平缓;
ViT 在右边的大数据区域反超,而且斜率更陡,随数据增加提升更快。
为什么会这样?
CNN 的局部感知是一种先验知识的"快捷方式":我提前告诉模型,你不用学"相邻像素相关"这件事,我把它编码进架构了。这在数据少的时候很有价值,省掉了从数据里悟这件事的学习代价。
但这个快捷方式是有代价的:它限制了模型能表达的特征范围。
Transformer 没有这种限制。
它需要从数据里自己学习所有规律,包括局部感知、全局关系、尺度不变性。
这要求更多数据,但当数据量上来,Transformer 学到的表示更通用,扩展性更强。
用一个比喻来说:CNN 是有师傅带的学徒,从第一天就被告知"打铁要这样使劲",上手快,但一直在师傅教的框架里操作;Transformer 是自学成才的匠人,前期摸索期更长,但没有框架限制,最终能做出师傅没教过的东西。
归纳偏置是数据稀缺时代的产物,数据充裕时,它的价值让位给了规模。
这是 ViT 最核心的洞察,也是它影响至今的根本原因。
论文还做了一组更细致的消融实验:用 JFT-300M 的不同子集(9M、30M、90M、300M)训练 ViT 和 ResNet,对比在相同规模下谁更好用。
结论很清晰:在 9M 子集上,ViT-B/32 明显差于 ResNet50;到了 90M,ViT 开始追平;到了全量 300M,ViT 全面超越,而且越大的 ViT 规格相对优势越大。
消融实验(Ablation Study):通过逐一去掉或改变某个设计组件,来测量该组件对整体性能的贡献。ViT 的消融实验包括:不同数据规模下的表现对比、不同位置编码方式(1D/2D/无位置编码)的对比、[CLS] token 和全局平均池化的对比。这类实验是现代深度学习论文的标配,用来证明每个设计决策都有其必要性。
这组实验彻底回答了"ViT 为什么在 ImageNet 上不如 ResNet"的问题:不是因为架构有问题,而是因为数据不够。给足数据,Transformer 就能从中学出 CNN 靠先验建立的一切,而且学得更好。
这个结论在 2020 年还显得有些理论性,但它为后来四年里大模型浪潮在视觉领域的扩展提供了最重要的理论依据:不需要为视觉专门设计架构,只需要规模。
数字说话
模型
预训练数据
ImageNet
CIFAR-100
VTAB(19 任务)
预训练算力
BiT-L(ResNet152x4)
JFT-300M
87.54%
93.51%
76.29%
9900 TPU 天
Noisy Student(EfficientNet-L2)
JFT+IN
88.4%
—
—
12300 TPU 天
ViT-L/16
JFT-300M
87.76%
93.90%
76.28%
680 TPU 天
ViT-H/14
JFT-300M
88.55%
94.55%
77.63%
2500 TPU 天
ViT-L/16(公开数据)
ImageNet-21k
85.30%
93.25%
72.72%
230 TPU 天
最值得关注的不只是准确率,还有算力那一列。
当时的最强模型 Noisy Student 用了 12300 个 TPUv3-core 天,BiT-L 用了 9900 个。
ViT-H/14 只用了 2500 个 TPU 天,就以 88.55% 超过了 Noisy Student 的 88.4%。
ViT-L/16 更夸张,680 个 TPU 天,和 BiT-L(9900)相比少了 14 倍,却达到了更高的 87.76%。
这是一个重要的信号。
视觉领域长期存在一个认知:要提高准确率就得堆更多精心设计的卷积块、更复杂的训练策略、更多的数据增强手段。
ViT 说的是另一件事:用更通用的架构、更多的数据,效果更好,计算更省。
这种"换了个方向,反而更省"的现象,和 NLP 里 Transformer 取代 LSTM 的过程如出一辙,也和后来大模型时代的规律完全一致。
效率不是靠把现有方法做得更极致得来的,而是靠找到更匹配问题本质的方法得来的。
这种效率优势不是因为 ViT 本身多聪明,而是因为 Transformer 天然适合大规模并行计算,在大数据和大算力下比 CNN 扩展性更好。
这张图把所有模型放在同一坐标系里比较,横轴是预训练算力,纵轴是迁移准确率。
ViT(蓝点)稳定分布在 ResNet(橙点)的左上方,意味着同样的算力 ViT 效果更好。
这张图在 2020 年发出来,直接改变了很多研究团队对 Transformer 用于视觉的态度。
ViT 在"看"什么:三组内部解析
论文里有几组可视化实验,帮助我们理解 ViT 究竟学到了什么,它的内部是怎么工作的。
第一组:Patch 嵌入学到了什么
ViT 第一层要做的事是把每个 16×16 的格子变成一个向量。
这个线性变换是可学习的,训练结束后,它究竟学到了什么样的特征提取器?
这张图展示了 ViT-L/32 的 Patch 嵌入矩阵的前几个主成分,可视化成对 16×16 图块的响应图。
它们看起来很像 CNN 第一层的卷积核:有横向和纵向的边缘检测,有不同频率的纹理响应,有颜色通道的分离。
完全没有卷积操作,ViT 自己学出了类似卷积核的低层特征提取器。
这不是设计的,是从数百万次梯度更新里自然涌现的。
第二组:位置编码的空间结构
这在前面已经展示过,ViT 通过可学习位置编码自己学出了图片的二维空间结构。近处的格子位置编码相似,同行同列的格子有共同的特征。
第三组:注意力在看哪里
这是最直观的一组实验。
这组图展示了经过训练的 ViT 在分类不同图片时,[CLS] token 对各个 Patch 位置的注意力权重。颜色越亮代表注意力越集中。
看个典型案例:识别狗的时候,高注意力集中在狗的头部和身体轮廓;即便背景复杂、目标被遮挡,模型也能把注意力导向语义上最关键的区域。
没有人告诉 ViT 应该看哪里,它在做图像分类的过程中,自发学会了视觉注意力的分配方式。
而且这个注意力是全局的,从第一层开始,每个 Patch 就已经能"看到"图片的任何一个角落,不需要像 CNN 那样层层叠加扩大感受野。
混合架构:先用 CNN 打底,再用 Transformer
论文还提出了一种折中方案,叫做混合架构(Hybrid Architecture):不完全扔掉 CNN,而是用一个 ResNet 先提取特征图,然后把特征图的每个位置当成 ViT 的 Patch 输入,再走 Transformer Encoder。
这本质上是让 CNN 做"局部特征提取",Transformer 做"全局关系建模",继承了双方的优点。
混合架构(Hybrid ViT):结合 CNN 和 Transformer 的视觉模型。用 ResNet 的前几层提取特征图,把特征图的每个空间位置当作一个"Patch",然后送入 Transformer Encoder。比纯 ViT 多了 CNN 的局部归纳偏置,在小数据或小模型规模下通常比纯 ViT 效果更好。
实验结果显示:在小模型规模和小数据量下,混合架构优于纯 ViT,因为 CNN 的局部先验在数据不足时确实有帮助。但随着模型规模和数据量的增大,这种差距逐渐消失,最大规模下纯 ViT 和混合架构的效果相当。
这个结果恰好从另一个角度印证了核心发现:CNN 的局部先验是数据不足时的补偿,数据充足时这种补偿变得不必要。
混合架构是一种过渡方案,适合那些没有足够数据用纯 Transformer 的场景。
从这篇论文往后看,混合架构的路线很快被大家抛弃了,因为数据和算力的规模化解决了需要它的场景;
但它在 2021 年出现的 Swin Transformer 里留下了影子,Swin 的分层设计和局部窗口注意力,某种程度上是在不同规模数据下折中 CNN 归纳偏置的另一种方式。
混合架构的"中间路线"在视觉领域走了差不多一年就退场了,但它揭示了一个普遍的设计原则:在资源约束下,适当保留任务相关的先验知识是合理的;当资源限制被打破,先验的价值就会重新被审视。
这个逻辑不只适用于 CNN 归纳偏置,在更多领域的工程决策里都是一样的。
一个还没做完的实验:自监督预训练
论文末尾有一个值得单独提一句的探索性实验,关于自监督预训练。
BERT 在 NLP 里最核心的贡献之一,是它不需要任何人工标注的数据,只需要对文本做"遮盖词语并预测"这个自监督任务,就能学到强大的通用表示。
自然有人想问:ViT 能不能用类似的方式做自监督预训练?
论文里做了初步尝试:随机遮盖图片的一部分 Patch,让模型预测被遮盖 Patch 的内容(平均像素颜色),这是"Masked Patch Prediction",直接对应 BERT 的 Masked Language Modeling。
结果是:自监督预训练的 ViT-B/16 在 ImageNet 上达到 79.9%,比完全从头训练提升了 2 个百分点,但比有监督预训练低了 4 个百分点左右。
论文承认这个差距还相当大,把自监督的探索留给了未来的工作。
Masked Patch Prediction(遮盖块预测):ViT 的自监督预训练方法探索,随机遮盖图片中部分 Patch,让模型预测被遮盖 Patch 的内容。这是对 BERT 的 Masked Language Modeling 在视觉领域的直接移植尝试。2020 年的初步实验效果不理想,但两年后 MAE 大幅改进了这个思路,使用了更高的遮盖比例(75%)和像素级别的重建目标,最终让自监督 ViT 达到了和有监督预训练相当甚至更强的效果。
这个"失败"的实验在 2022 年得到了翻案。
Kaiming He 的 MAE 把遮盖比例从 15% 提高到 75%,把预测目标从平均颜色改为实际像素值,效果暴增。
MAE-ViT-H 在 ImageNet 上达到 87.8%,不需要任何标注数据,比有监督预训练的 ViT 还强。
这说明自监督的思路是对的,2020 年只是还没找到正确的做法。
迁移到 19 种不同任务上:泛化能力的真实考验
最后一个值得单独展开的实验,是 VTAB 迁移测试。
VTAB(Visual Task Adaptation Benchmark)是一套特别严苛的评估体系:19 个多样视觉任务,每个任务只有 1000 张标注数据。
任务跨度极大:自然图片分类(Pets、CIFAR)、医学图像(视网膜疾病)、卫星图像(土地利用类型)、空间推理(物体的三维方位)。
VTAB 的难点在于,预训练时从未见过这些类型的任务,必须靠通用表示能力迁移过去。
这个测试的核心问题是:在 3 亿张普通图片上预训练的 ViT,面对从没见过的任务类型(比如识别视网膜病变,或者判断物体在三维空间里的位置),能不能快速适应?
结果是 ViT-H/14 在 19 任务整体上达到 77.63%,超过 BiT-L(76.29%)。
在 Natural 类(最接近预训练数据分布的任务)上领先明显,在 Structured 类(几何推理)上依然超越。
这说明一件事:ViT 学到的特征表示不是对自然图片过拟合的,它具备真正的通用性。
这种通用性来自 Transformer 全局注意力的特性,它不会把特征局限在某种固定的局部模式里,而是能根据任务需要灵活地关注图片的任何部分。
从某种意义上,这是 ViT 和 BERT 之间最深的相似:两者都是靠大规模预训练学到了通用表示,在下游任务上只需要少量微调就能适应,而不是从头学习每个任务专用的特征。
这件事放在 2020 年的背景下特别有意思。
当时 NLP 领域已经有了"预训练+微调"的成熟范式,几乎所有任务都在用 BERT 系列的预训练模型做起点。
但视觉领域的迁移学习还停留在"ImageNet 预训练 ResNet"的模式,换任务时通常需要不少数据,而且预训练模型的通用性有上限。
ViT 的出现,配合足够大的预训练数据,把"视觉预训练"的通用性提升到了接近 NLP 的水平。
后来 MAE 把这件事进一步推进,让 ViT 不需要标注数据就能学到通用表示,这才是真正意义上和 BERT 平行的视觉预训练范式。
写在后面
2020 年 ViT 出来的时候,视觉界做 CNN 的人其实没太慌。
理由充分:你需要 JFT-300M,那是 Google 的私有数据,其他人哪来?
而且 88% 的 ImageNet 准确率,EfficientNet-L2 也能到 88.4%,凭什么要换一个需要用 10 倍数据的新架构?
这种反应在当时是合理的。
新架构要被接受,需要回答两个问题:效果真的更好吗,以及普通人也能用吗。
ViT 对第一个问题回答清晰,但对第二个问题,2020 年的答案还不够有力。
JFT-300M 的门槛让 ViT 显得像是 Google 自己玩的游戏,和外部研究者关系不大。
更何况,视觉领域有大量成熟的基于 CNN 的工具链和预训练权重,切换架构意味着要重新训练,重新验证,重新适配下游任务。
在没有强烈动机的情况下,没有人愿意轻易推倒重来。
但接下来发生的事情,比很多人预想的快得多。
2021 年,Facebook AI 的 DeiT 团队(Hugo Touvron 等人)发表了第一篇关键的后续工作。他们用蒸馏训练和强力数据增强,让 ViT 不需要 JFT-300M,只用公开的 ImageNet 1.28M 就能训练出竞争力强的模型,直接消除了"数据太贵"的顾虑。
同年,微软亚研的 Swin Transformer 引入分层特征图和滑动窗口注意力,把 ViT 的全局注意力限制在局部窗口内,既保留了 Transformer 的表达能力,又解决了密集预测任务(目标检测、语义分割)的效率问题。
接下来两年,Swin 成了视觉领域用得最广的骨干网络。
还是 2021 年,OpenAI 把 ViT 和文字训练放进了 CLIP:用 4 亿个图片文字对做对比学习,让图像编码器和文本编码器在同一个嵌入空间里对齐。
CLIP 的图像编码器就是 ViT,而 CLIP 打开了零样本图像识别和多模态的大门。
从这一刻起,ViT 不只是视觉分类模型,它成了多模态系统的基础组件。
到 2022 年,Kaiming He 带着 MAE(Masked Autoencoders)回来了。
做法是遮住图片 75% 的区域,让 ViT 重建被遮盖的 Patch,不需要任何人工标注,纯自监督预训练,ImageNet 准确率达到 87.8%。
MAE 用的是 ViT-Huge,在 8 块 GPU 上训练 1600 个 epoch 就能完成,成本比 JFT-300M 的有监督预训练低一个量级以上。ViT 不再是有钱人的玩具了。
2023 年,Meta AI 的 SAM(Segment Anything Model)用 ViT-Huge 做图像编码器,在 11 亿张图片上训练,实现了通用图像分割,任意图片上的任意物体都能被圈出来,只需要一个点击或框选提示。
同年,DiT(Diffusion Transformer)把扩散模型里的 U-Net 替换成 Transformer,性能更强,扩展性更好,成为文生图模型的新范式。
Stable Diffusion 3 和后续的 FLUX 都用了 DiT 架构,而它的根基就是 ViT。
现在是 2026 年,已经几乎找不到一个主流的视觉基础模型,里面不包含 Transformer 了。
但 ViT 告诉我们的,不只是"Transformer 可以用在视觉上"。
更深的洞察是:归纳偏置和数据规模之间,存在一种可替换的关系。
CNN 把局部感知和平移不变性硬编码进架构,这是"用结构先验弥补数据不足"的策略,在数据稀缺时代极其有效。
但当数据多到 3 亿张,Transformer 可以直接从数据里学到这些规律,而且学到的表示更通用、更灵活,扩展性更强。
这个规律,从视觉开始,但远不止于视觉。
你现在用的大语言模型,它能回答这么多问题,处理这么多任务,背后是同一套逻辑:放弃针对特定领域手工设计的先验,放大数据和算力的规模,让模型自己发现规律。
CNN 对视觉的精心定制,语音识别里的声学模型,推荐系统里的特征工程,这些"领域知识"正在一个个被"更多数据加更大模型"替代掉。
只是这件事需要有人先证明一次。
2020 年,Dosovitskiy 把图片切成 196 个格子,用 3 亿张图片,证明了这件事在视觉上成立。
论文题目叫"An Image is Worth 16x16 Words",16×16 是 Patch 的尺寸。
但这个标题背后真正的含义,不是在比较图片和词语,而是在说:图片,也可以被当成一种语言来学习。理解语言的方法,也可以用来理解图片。理解图片的方法,和理解语言的方法,在足够大的规模下,会走向同一个地方。
之后的故事,就是这个证明一路扩散开去。
论文原文:An Image is Worth 16x16 Words: Transformers for Image Recognition at ScalearXiv:https://arxiv.org/abs/2010.11929发布日期:2020-10-22作者:Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov et al.(Google Brain)
© 2026
·
向阳乔木