广哥在硅谷 · 用思考抵达清晰,用行动靠近自由
ICLR 2021 · GOOGLE BRAIN

Vision Transformer
一张图片值 16×16 个词

An Image is Worth 16×16 Words · Curated Chinese Edition
Dosovitskiy et al. · Google 中文精校版 9 章 · 约 30 分钟阅读
📋 内容摘要

2020 年 10 月,Google Brain 团队用一招极简的"把图像切成 16×16 的 Patch",把原本为文字设计的 Transformer 几乎原样地搬到了计算机视觉。在足够大的数据上预训练,Vision Transformer(ViT)超过了 SOTA 的 CNN,而所需的训练算力反而更少。这篇论文是 Transformer 横跨模态的关键一跃——它证明了一个深刻的事实:足够大规模的训练,能压倒人为设计的归纳偏置。本文是该论文的中文精校版。

章节目录
  1. 引言 · 为什么视觉需要 Transformer
    Why CV needs Transformers
  2. 核心思想:把图像切成 Patch
    The Patch Embedding Trick
  3. Vision Transformer 架构
    ViT Architecture
  4. 归纳偏置的得与失
    Inductive Bias Trade-off
  5. 三个模型尺寸 + 实验设置
    Model Variants & Setup
  6. 关键发现:大规模预训练才是王道
    Scale Trumps Inductive Bias
  7. 数据集大小决定一切
    Data Requirements
  8. ViT 内部到底学到了什么
    Inspecting ViT
  9. 总结:CV 的范式转移之始
    A Paradigm Shift in CV
CHAPTER 01 · MOTIVATION

引言:为什么视觉需要 Transformer

From NLP success to CV revolution
📌 本节核心要点

Transformer 已经成为 NLP 的事实标准——超过 1000 亿参数的模型不断刷新性能。但在计算机视觉里,卷积神经网络(CNN)仍然是统治者。这篇论文挑战的核心问题是:视觉真的需要卷积吗?还是只是历史惯性?

NLP Paradigm CNN Dominance Pre-train + Fine-tune

自注意力架构——特别是 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 亿张图像——故事就完全反转了。

广哥在硅谷◆ ◆ ◆
CHAPTER 02 · IDEA

核心思想:把图像切成 Patch

An image is worth 16×16 words
📌 本节核心要点

标准 Transformer 接收 1D token 序列作为输入。要处理 2D 图像,ViT 做了一件极简的事:把图像 reshape 成 patch 序列——一个 $224 \times 224$ 的图像,用 $16 \times 16$ 的 patch 切,可以得到 $14 \times 14 = 196$ 个 patch。每个 patch 展平后用一个可学习的线性投影映射到 $D$ 维。这就是论文标题的字面含义——"一张图片值 16×16 个词"

Patch Embedding Sequence of Tokens Linear Projection

标准 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。

— THE SIMPLEST POSSIBLE IDEA, AND IT WORKS
广哥在硅谷◆ ◆ ◆
CHAPTER 03 · ARCHITECTURE

Vision Transformer 架构

ViT in 4 equations
📌 本节核心要点

ViT 几乎是原汁原味的 Transformer 编码器。两个改动:第一,仿照 BERT,在 patch 序列前面拼一个可学习的 [class] token,用它在最后输出位置的表示做分类;第二,加上1D 可学习的位置嵌入。整个模型用四个方程就能完整描述。

[class] Token Position Embedding LayerNorm GELU

整体架构非常优雅。ViT 借鉴了 BERT 的 [class] token 设计——在 patch 嵌入序列最前面拼一个可学习的嵌入向量 $x_{class}$,它在 Transformer 编码器输出端的状态 $z_L^0$ 充当整个图像的表示 $y$。

无论预训练还是微调,分类头都接在 $z_L^0$ 上。预训练时分类头是一个带一个隐层的 MLP,微调时简化为一个线性层。

位置信息怎么注入?论文用标准的 1D 可学习位置嵌入——他们试过更复杂的 2D 位置嵌入,发现性能提升不明显。

整个 ViT 可以用下面四个方程完整描述

$$z_0 = [\,x_{class};\ x_p^1 E;\ x_p^2 E;\ \cdots;\ x_p^N E\,] + E_{pos}$$ $$z'_\ell = \text{MSA}(\text{LN}(z_{\ell-1})) + z_{\ell-1}, \quad \ell = 1 \ldots L$$ $$z_\ell = \text{MLP}(\text{LN}(z'_\ell)) + z'_\ell, \quad \ell = 1 \ldots L$$ $$y = \text{LN}(z_L^0)$$

翻译一下:

· 方程 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 系也采纳的更稳定的做法。

广哥在硅谷◆ ◆ ◆
CHAPTER 04 · INDUCTIVE BIAS

归纳偏置的得与失

What ViT gives up — and gains
📌 本节核心要点

CNN 把"局部性、平移等变性、二维邻域结构"这些归纳偏置烧进了每一层。ViT 只在两个时刻用到 2D 结构:开头切 patch 时、微调时调整位置嵌入。其他所有空间关系都得从数据里学这是 ViT 的劣势——数据少时泛化差;也是它的潜力——数据足时不被人为约束

Locality Translation Equivariance 2D Neighborhood

这一节作者讨论了一个深刻的问题:归纳偏置(inductive bias)

CNN 是把图像专用的归纳偏置烧进了网络结构的——局部性、二维邻域结构、平移等变性。每一层都自带这些假设。这意味着 CNN 在小数据上能用相对少的样本学到合理的图像表示。

ViT 放弃了大部分这种归纳偏置。在 ViT 里,只有 MLP 层是局部和平移等变的;自注意力层是全局的。二维邻域结构被用得非常"节省"——只在两个时刻:第一,模型开头把图像切成 patch 的时候;第二,微调时为不同分辨率调整位置嵌入。除此之外,位置嵌入在初始化时不携带任何关于 patch 2D 位置的信息——所有 patch 之间的空间关系,都要从头学

论文还提了一个"混合架构"作为对照:用 CNN 的特征图作为 Transformer 的输入,相当于把 patch embedding 替换成对 CNN 特征图的 patch 提取。后面的实验会比较纯 ViT 和混合架构。

广哥在硅谷◆ ◆ ◆
CHAPTER 05 · MODELS

三个模型尺寸 + 实验设置

Base / Large / Huge
📌 本节核心要点

ViT 配置参照 BERT,提供三档:Base / Large / Huge。命名约定 ViT-L/16 表示 "Large" 变体 + $16 \times 16$ patch 大小。patch 越小,序列越长,算力越贵(序列长度反比于 patch 边长的平方)。

ViT-Base/16 ViT-Large/16 ViT-Huge/14

ViT 的三档配置直接借了 BERT 的设计:

模型层数隐维度 $D$MLP 维头数参数量
ViT-Base1276830721286 M
ViT-Large241024409616307 M
ViT-Huge321280512016632 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 基准。

广哥在硅谷◆ ◆ ◆
CHAPTER 06 · KEY FINDING

关键发现:大规模预训练才是王道

Scale trumps inductive bias
📌 本节核心要点
SOTA JFT-300M TPUv3-core-days

论文最重磅的对比,是把最大的两个 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。

— THE PAPER'S MOST SHOCKING NUMBER
广哥在硅谷◆ ◆ ◆
CHAPTER 07 · DATA SCALE

数据集大小决定一切

When does ViT win?
📌 本节核心要点

作者做了一个关键实验:把 ViT 和 ResNet 在不同规模的预训练数据上对比——9M、30M、90M、300M 张图像。结论一目了然

这印证了一个深刻判断:卷积的归纳偏置在小数据上有用,但大数据足够时,让模型直接从数据里学,反而更好甚至有利。

Scaling Law Inductive Bias Few-Shot Transfer

这一节是整篇论文最有"哲学意味"的部分。作者问了一个问题: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+ 就反超

在小数据上,卷积的归纳偏置是有用的拐杖。
但在大数据上,这副拐杖反而成了枷锁——
让模型从数据里自己学规律,更好。

— THE DEEP LESSON OF VIT

这个发现的意义远超 ViT 本身。它说明——在过去几十年里——许多被视为"必要"的人工设计,其实只是数据不足时的临时拐杖。当算力和数据足够大时,让模型自己从数据中学到规律,往往比手工注入归纳偏置更强。这是后续大模型时代(GPT-3、GPT-4、Claude)背后的核心信念。

广哥在硅谷◆ ◆ ◆
CHAPTER 08 · INSIDE VIT

ViT 内部到底学到了什么

Inspecting Vision Transformer
📌 本节核心要点

对 ViT 内部表示的分析揭示了三件有趣的事:

Attention Distance Receptive Field 2D Topology

要理解 ViT 是怎么处理图像数据的,作者分析了它的内部表示。

第一层的 patch embedding 滤波器——展平 patch 之后被线性投影到低维空间。可视化前 28 个主成分,会发现它们像合理的基函数——边缘、纹理之类的低层视觉特征。和 CNN 第一层 Gabor 滤波器很相似。这说明 ViT 自己学到了类 CNN 的浅层视觉特征。

位置嵌入也很神奇。作者发现,模型学到了用位置嵌入的相似性来编码图像中的距离——越近的 patch,嵌入越相似。而且行列结构明显出现,更大网格上还能看到正弦曲线般的结构。这就是为什么手工设计的 2D 位置嵌入没带来提升——模型自己学出来了。

最有意思的是注意力距离分析。作者基于注意力权重,计算了每个头平均整合信息的图像空间距离——类似于 CNN 里的"感受野"。发现:

· 一些注意力头在最低层就关注整张图像的大部分,证明 ViT 真的在使用全局信息
· 另一些头在低层始终关注局部——类似于 CNN 的早期卷积层
· 网络越深,注意力距离普遍越远——模型从局部走向全局

而且,从全局来看,模型确实会关注与分类语义相关的图像区域

广哥在硅谷◆ ◆ ◆
CHAPTER 09 · LEGACY

总结:CV 的范式转移之始

A paradigm shift in computer vision
📌 本节核心要点

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 的通用底层架构

— THE BEGINNING OF THE MULTIMODAL ERA

如果说 2017 年的《Attention Is All You Need》是 AI 的第一次大爆炸,那么 2020 年的 ViT 就是第二次冲击波——它让 Transformer 从语言走向视觉,再走向一切。今天,当你用 ChatGPT 看图、用 Midjourney 生图、用 Sora 生视频——它们的底层都流着 ViT 的血。

下一次,我们会接着讲 CLIP——OpenAI 怎么用 4 亿张图文对,把 ViT 和文本 Transformer 联姻,开启了"零样本视觉理解"的时代。