IT 论文精读 · PAPER 5
Dosovitskiy 等 · Google Research · ICLR 2021
2020 年,Google 的一队研究员提出 ViT(Vision Transformer,视觉 Transformer),干了一件当时听起来有点鲁莽的事:把专门处理文字的 Transformer(ChatGPT 用的那种大脑)原封不动拿来看图——不用任何专门为图像设计的零件。结果是:只要先让它看过足够多的图,它就能超过统治视觉领域八年的老霸主 CNN。今天你让 AI「看图说话」,它用的那双眼睛多半就是 ViT。
以前看图的 CNN,像拿着放大镜读一幅画:先贴得很近看清一小块的笔触,再退后一步把小块拼成局部,再退后一步拼出整体——「先看邻居、由近及远」是写死在它骨子里的规矩。ViT 不拿放大镜:它把整幅画剪成一百多张小方块,全部摊在桌面上,像读一句一百多个词的话那样一口气读完。任何两块之间都能直接对上眼神:左上那块毛茸茸的、右下那块像尾巴的,第一眼就能凑到一起商量——「咱俩合起来,是不是一只猫?」
旧世界里,文字有文字的模型、图像有图像的模型,各带各的祖传手艺,互不相通。ViT 说:图也可以当「话」读——把小方块当单词,看图和读文章就能用同一种大脑。这句话的分量在几年后才完全显出来:既然是同一种大脑,图和文字就能真正「想到一块儿」——后来能看图的 ChatGPT、听一句话就画图的 AI,都踩在这一步上。
就两步。第一步,把图变成「词」:整张图切成一个个小方块,每块压成一串数字,就像把一个单词做成一张词卡;再给每张卡标上「你原来坐在第几行第几列」的座位号——不标的话,模型看到的就只是一袋打乱的拼图块。第二步,让这串词卡过 Transformer:每一层里,每块都和其余所有块互相打量、交换看法——毛茸茸的块从「尖耳朵」那块得到印证,一层层下来,散块的线索慢慢拼成一个判断:这是一只猫。
CNN 天生带一本「看图说明书」:先看邻居、别管远处。图少的时候,说明书是拐杖——CNN 学得又快又稳,ViT 这张白纸反而磕磕绊绊,成绩更差。可图一多(上亿张),说明书就成了枷锁:有些线索本来就要跨越整幅图才看得见,而白纸没有条条框框,看的图够多、全都自己悟了出来,于是反超。也诚实说一句代价:这份反超得先喂上亿张图、烧大把算力,当年普通实验室根本训不起——省数据的训法是后来的人补上的。
把图剪成小方块、当一句话喂给 Transformer;见的图足够多时,不带任何看图的祖传规矩反而更强。从此看图和读字共用同一种大脑,多模态 AI 的大门被这篇论文推开。
想看切块喂入的结构图、「先验换数据」的交叉实验和真实数字? → 切到精读版
ViT(Vision Transformer)把一张图切成 16×16 的小块(patch)、每块当一个「词」,组成一句「视觉句子」喂给几乎原封不动的标准 Transformer;并用实验证明:当预训练数据大到上亿张图时,这个不带图像专属设计的模型能超过最强的 CNN(ImageNet top-1 准确率 88.55%)、预训练算力还更省——视觉从此与语言共用同一种架构,多模态大模型的地基由此铺下。
作者是 Dosovitskiy、Beyer、Kolesnikov 等十二人,来自 Google Research(Brain 团队),发表于 ICLR 2021(2020 年 10 月放出)。它上承 Transformer(Paper 1)与 BERT 的「预训练–微调」范式、以及 AlexNet→ResNet 的深度视觉路线;下启 CLIP、MAE、DINO、SAM、DiT——今天多模态大模型的「眼睛」,大多就是 ViT 一族。
到 2020 年,NLP 已经统一到「Transformer + 越做越大的预训练」:模型和数据一起放大、性能持续上涨,还看不到饱和。而视觉仍是 CNN 的天下。不是没人想把自注意力搬进视觉,但此前的尝试要么和卷积混着用、要么为省算力设计各种特殊的局部/稀疏注意力——这些花式结构在现成硬件加速器上跑不快,也一直没能规模化。
最朴素的方案——让每个像素当一个 token——直接被算力判了死刑:自注意力要两两互看,计算量随 token 数平方增长,一张 224×224 的图就是 5 万多个像素,平方之后是天文数字。
于是问题变成:一个尽量不做改动的标准 Transformer,能不能直接做视觉?要什么条件,才能打赢深耕八年、自带图像先验的 CNN?
ViT 全篇第一个、也几乎是唯一一个图像专属操作:把 224×224 的图切成 16×16 的小块(patch),共 (224/16)² = 196 块。每块拉直成 16×16×3 = 768 个数字,过一层可学习的线性投影,得到一个 patch embedding——地位完全等同于 NLP 里的词向量。一刀下去,序列长度从 5 万降到 196,平方复杂度立刻可负担。这就是标题「一张图值 16×16 个词」的字面含义。
再补上两样 NLP 的老零件:① 每个位置加一个可学习的位置编码(position embedding),告诉模型这块原来在图里的哪儿——不加的话,它看到的只是一袋顺序打乱的拼图块;② 学 BERT 在句首放一个 [CLS] 分类 token,它一路参与所有层的互看、汇总全图信息,最后由它的输出接一个小分类头给出「这是什么」。
然后——没有然后了。后面就是一个标准 Transformer 编码器(多头自注意力 + MLP,每个子层外套残差连接,见 Paper 1/2),一行都不用改。这份「懒」是刻意的:架构不动,NLP 世界里关于 Transformer 的全部放大经验、训练技巧和高效实现,视觉一夜之间全部继承。
CNN 的强,来自焊死在结构里的三条归纳偏置:局部性(先看邻居)、平移等变(猫挪到哪儿都是猫)、层级(小特征拼大特征)。这些假设对图像基本正确,等于先替模型答对了一半——数据少时是巨大优势。
ViT 几乎把它们全拆了:自注意力从第一层起就能全局互看,「该看多近、看多远」不再由结构规定,而是交给数据去教。整个模型里残留的 2D 手工痕迹只有两处:切 patch 这一刀,以及微调换分辨率时对位置编码做的一次 2D 插值。
论文最重要的实验就是量化这场「先验 vs 数据」的交易:只用 ImageNet(130 万图)预训练时,ViT 明显不如同量级的 ResNet——白纸输给了说明书;到 ImageNet-21k(1400 万)大致打平;到 JFT-300M(3 亿)全面反超,而且模型越大越吃香。结论一句话:足够大的预训练,胜过手工归纳偏置。
有意思的是,训练完的 ViT 自己长出了类似 CNN 的习惯:低层的一部分注意力头只看邻近的 patch(像卷积),另一部分却从第一层就看全图——后者是 CNN 结构上做不到的;位置编码也自发学出了行列邻近结构。先验没有被硬塞进结构,但被数据教了出来。
一是架构统一。图像和文字变成了同一种「token 序列」,后面接同一种模型。CLIP 用一个 ViT 加一个文本 Transformer 做图文对比学习,直接开出多模态时代;今天能看图的对话大模型,视觉编码器基本都是 ViT 一族。
二是 NLP 的规模化经验整体平移进视觉。MAE 把 BERT 的「完形填空」搬到图像(遮住大部分 patch 让模型补全),DINO 系列做出视觉自监督表征,SAM(「分割一切」)的图像编码器是 ViT-H,图像生成的骨干网络也从 U-Net 换成了 Transformer(DiT,Sora、Stable Diffusion 3 一系的地基)。
三是方法论。它把「归纳偏置 vs 数据规模」从一句哲学口号变成可测量的实验问题,此后「少一点手工设计、多一点数据和算力」成为整个领域的默认方向。
① 一句话:把图切成 16×16 小块当「词」,喂给不改一行的标准 Transformer;预训练数据够大时,不带视觉先验反而更强。
② 痛点:视觉被 CNN 垄断,此前的注意力方案要么混卷积、要么跑不快;逐像素注意力因平方复杂度不可行。
③ 机制一:patch embedding——(224/16)² = 196 块、每块线性投影成向量,+ 位置编码 + [CLS] token,序列长度从 5 万降到 196。
④ 机制二:拆掉 CNN 的局部性/平移/层级先验,用大规模预训练买回来——130 万图输、1400 万平、3 亿反超。
⑤ 结果:ViT-H/14 在 ImageNet 88.55% 超最强 CNN;ViT-L/16 用约 1/15 的预训练算力反超 BiT-L;公开数据配方 85.30%。
⑥ 模型自己学出「低层局部看与全局看并存」——先验可以不用焊死,由数据教出来。
⑦ 影响:视觉与语言同架构,CLIP / MAE / DINO / SAM / DiT 全踩在它上面,多模态大模型的眼睛。
⑧ 局限:小数据不行(DeiT 后来用技巧补救);高分辨率平方开销(Swin 又请回先验);ConvNeXt 质疑「架构必要性」。