Paper Summary
- 整体总结:
- ViT(Vision Transformer)已经成为计算机视觉必不可少的组件了,目前围绕 ViT 已经有了许多变体,本文是 ViT 相关的第一篇文章
- ViT 核心:将 Transformer 用在图像领域
- 与之前在计算机视觉中使用自注意力的工作不同
- 除了初始的 patch 提取步骤外,ViT 没有向架构引入特定于图像的归纳偏置 (image-specific inductive biases)
- 理解:这里所谓的归纳偏置就是类似 平移等变性和局部性 等 CNN 对图像领域的核心假设
- ViT 将图像建模为一系列 patches,并使用与 NLP 中相同的标准 Transformer 编码器进行处理
- 这种简单但可扩展的策略,在与大规模数据集上的预训练相结合时,效果出人意料地好
- 除了初始的 patch 提取步骤外,ViT 没有向架构引入特定于图像的归纳偏置 (image-specific inductive biases)
- 与之前在计算机视觉中使用自注意力的工作不同
- 注:本文之前的状况:
- 在视觉领域,注意力机制要么与卷积网络结合使用,要么用于替换卷积网络的某些组件,同时保持其整体结构不变
- 本文表明这种对 CNN 的依赖并非必要,直接应用于图像块序列的纯 Transformer 可以在图像分类任务上表现良好
- Vision Transformer (ViT) 相比卷积网络更好,同时训练所需的计算资源要少得多
Introduction and Discussion
- 基于自注意力的架构(特别是 Transformer),已成为自然语言处理中的首选模型
- 主导方法是在大型文本语料库上进行预训练,然后在较小的特定任务数据集上进行微调 (2019)
- 得益于 Transformer 的计算效率和可扩展性,训练具有前所未有规模的模型(超过 100B 参数)已成为可能 (2020;2020)
- 且随着模型和数据集的增长,性能仍未出现饱和迹象
- 在计算机视觉中,卷积架构仍然占主导地位 (1989;2012;2016)
- 受 NLP 成功经验的启发,多项工作尝试将类似 CNN 的架构与自注意力相结合 (2018;2020),有些则完全替换了卷积 (2019;2020a)
- 完全替换了卷积的这一类模型理论上是高效的,但由于使用了专门的注意力模式,尚未在现代硬件加速器上有效扩展
- 结论:在当前大规模图像识别中,经典的 ResNet 类架构仍然是 SOTA (2018;2020;2020)
- 受 NLP 成功经验的启发,多项工作尝试将类似 CNN 的架构与自注意力相结合 (2018;2020),有些则完全替换了卷积 (2019;2020a)
- 本文尝试将标准的 Transformer 直接应用于图像,并进行尽可能少的修改
- 本文将图像分割成块 (patches),并将这些块的线性嵌入序列作为 Transformer 的输入
- 图像块的处理方式与 NLP 应用中的 Token(词)相同
- 本文以监督方式训练模型进行图像分类
- ViT 效果与数据量级有关:
- 数据量不足时:
- 当在中型数据集(如未使用强正则化的 ImageNet)上训练时,这些模型的准确率适中,比同等大小的 ResNet 低几个百分点
- 这一看似不及预期的结果可能是意料之中的:Transformer 缺乏 CNN 固有的一些归纳偏置 (inductive biases),例如平移等变性和局部性,因此在数据量不足的情况下无法很好地泛化
- 理解:这里所谓的归纳偏置就是类似 平移等变性和局部性 等 CNN 对图像领域的核心假设
- 数据量充足时:
- 如果模型在更大的数据集(14M-300M 张图像)上训练,情况就会发生变化:大规模训练胜过归纳偏置
- 当在足够规模的数据上进行预训练并迁移到数据点较少的下游任务时, ViT 获得了出色的结果
- 在公共 ImageNet-21k 数据集或内部的 JFT-300M 数据集上预训练时,ViT 在多个图像识别基准上接近或超越了 state of the art
- 最佳模型在 ImageNet 上达到了 \(88.55\%\) 的准确率,在 ImageNet-Real 上达到了 \(90.72\%\),在 CIFAR-100 上达到了 \(94.55\%\),在包含 19 个任务的 VTAB 套件上达到了 \(77.63\%\)
- 如果模型在更大的数据集(14M-300M 张图像)上训练,情况就会发生变化:大规模训练胜过归纳偏置
- 数据量不足时:
Related Work
- 详情见原文
- Transformer 已成为许多 NLP 任务中的 SOTA 方法
- 基于 Transformer 的大型模型通常先在大型语料库上进行预训练,然后针对手头任务进行微调:
- BERT (2019) 使用去噪自监督预训练任务
- GPT 系列工作使用语言建模作为其预训练任务 (2018;2019;2020)
- 基于 Transformer 的大型模型通常先在大型语料库上进行预训练,然后针对手头任务进行微调:
- 像素粒度的 Transformer:
- 将自注意力直接应用于图像需要每个像素关注其他每个像素(注意:这里是每个像素,而像素是很多很多的)
- 由于计算成本与像素数量呈二次关系,这无法扩展到实际的输入尺寸
- 为了在图像处理中应用 Transformer,过去已经尝试了几种近似方法
- Parmar 等人 (2018) 仅对每个查询像素的局部邻域应用自注意力,而不是全局
- 这种局部多头点积自注意力块可以完全替代卷积 (2019;2019;2020)
- Sparse Transformers (2019) 采用可扩展的近似方法来处理全局自注意力 ,以便应用于图像
- 另一种扩展注意力的方法是将其应用于不同大小的块中 (2019),极端情况下仅沿单个轴应用 (2019;2020a)
- 理解:这里
- 许多这些专门的注意力架构在计算机视觉任务上展示了有希望的结果,但需要复杂的工程才能在硬件加速器上高效实现
- 块粒度的 Transformer
- (2020) 的模型从输入图像中提取大小为 \(2 \times 2\) 的块,并在其上应用完全的自注意力
- 该模型与 ViT 非常相似,但 ViT 更进一步,证明了大规模预训练使 vanilla Transformer 能够与最先进的 CNN 竞争(甚至更好)
- (2020) 使用了 \(2 \times 2\) 像素的小块大小,这使得该模型仅适用于小分辨率图像,而也处理中等分辨率的图像
- 将卷积神经网络与各种形式的自注意力结合的方法:
- 通过增强特征图用于图像分类 (2019),或使用自注意力进一步处理 CNN 的输出
- 用于目标检测 (2018;2020)、视频处理 (2018;2019)、图像分类 (2020)、无监督目标发现 (2020) 或统一文本-视觉任务 (2020c;2019;2019)
- image GPT (iGPT) (2020a) 在降低图像分辨率和颜色空间后将 Transformer 应用于图像像素
- iGPT 模型以无监督方式作为生成模型进行训练,然后可以对生成的表示进行微调或线性探查以用于分类性能,在 ImageNet 上达到了 \(72\%\) 的最大准确率
- 工作为越来越多探索超出标准 ImageNet 数据集的更大规模图像识别的研究增添了新的内容
- 使用额外的数据源可以在标准基准上达到 SOTA 的结果 (2018;2019;2020)
- Sun 等人 (2017) 研究了 CNN 性能如何随数据集大小扩展
- Djolonga 等人 (2020) 对从大规模数据集(如 ImageNet-21k 和 JFT-300M)进行的 CNN 迁移学习进行了实证探索
- 也关注后两个数据集,但训练的是 Transformer,而不是先前工作中使用的基于 ResNet 的模型
Method
- 在模型设计上,尽可能严格地遵循原始 Transformer (2017)
- 这种刻意简化的设置的一个优点是,可扩展的 NLP Transformer 架构及其高效实现几乎可以开箱即用
Vision Transformer
- 模型概述如图 1 所示

- 标准 Transformer 接收的输入是一个 1D 的 Token 嵌入序列
- 定义 2D 图像:
$$ \mathbf{x} \in \mathbb{R}^{H \times W \times C} $$ - 将上述图像重塑为一系列展平的 2D 图像块
$$ \mathbf{x}_p \in \mathbb{R}^{N \times (P^2 \cdot C)} $$- \((H, W)\) 是原始图像的分辨率
- \(C\) 是通道数
- \((P, P)\) 是每个图像块的分辨率
- \(N = HW / P^2\) 是产生的图像块数量,也是 Transformer 的有效输入序列长度
- Transformer 在其所有层中使用恒定的隐向量尺寸 \(D\),因此本文将图像块展平,并使用一个可训练的线性投影将其映射到 \(D\) 维(公式 1)
- 本文将此投影的输出称为图像块嵌入 (patch embeddings)
- 类似于 BERT 的
[class]Token,本文在向嵌入后的图像块序列 \((\mathbf{z}_0^0 = \mathbf{x}_{\text{class} })\) 前添加一个可学习的嵌入,其在 Transformer 编码器输出端的状态 \((\mathbf{z}_L^0)\) 用作图像表示 \(\mathbf{y}\)(公式 4)- 在预训练和微调期间,一个分类头 (classification head) 被附加到 \(\mathbf{z}_L^0\) 上
- 分类头在预训练时通过一个带有一个隐藏层的 MLP 实现,在微调时通过一个单线性层实现
- 位置嵌入 (position embeddings) 被添加到图像块嵌入中以保留位置信息
- 本文使用标准的可学习 1D 位置嵌入
- 注:因为本文作者没有观察到使用更高级的 2D 感知位置嵌入能带来显著的性能提升(附录 D.4)
- 得到的嵌入向量序列作为编码器的输入
- 本文使用标准的可学习 1D 位置嵌入
- Transformer 编码器 (2017) 由多头自注意力 (MSA, multiheaded self-attention, 见附录 A) 和 MLP 块的交替层组成(公式 2, 3)
- 在每个块之前应用层归一化 (LN, Layernorm),在每个块之后应用残差连接 (2019; 2019)
$$
\begin{array}{rlr}\mathbf{z}_0 &= [\mathbf{x}_{\text{class} };\mathbf{x}_p^1\mathbf{E};\mathbf{x}_p^2\mathbf{E};\dots ;\mathbf{x}_p^N\mathbf{E}] + \mathbf{E}_{pos}, \quad \quad & \mathbf{E}\in \mathbb{R}^{(P^2\cdot C)\times D},\mathbf{E}_{pos}\in \mathbb{R}^{(N + 1)\times D}\\
\mathbf{z}’_\ell &= \text{MSA}(\text{LN}(\mathbf{z}_{\ell - 1})) + \mathbf{z}_{\ell - 1}, & \ell = 1\dots L\\
\mathbf{z}_\ell &= \text{MLP}(\text{LN}(\mathbf{z}’_\ell)) + \mathbf{z}’_\ell, & \ell = 1\dots L\\
\mathbf{y} &= \text{LN}(\mathbf{z}_L^0)
\end{array} \tag {4}
$$- 注:这里 MSA 本质就是 Transformer 中的 MHA
- 在每个块之前应用层归一化 (LN, Layernorm),在每个块之后应用残差连接 (2019; 2019)
Inductive bias,归纳偏置
- Vision Transformer 的图像特定归纳偏置比 CNN 少得多
- 在 CNN 中,局部性、二维邻域结构和平移等变性被融入到整个模型的每一层中
- 在 ViT 中,只有 MLP 层是局部的和平移等变的,而自注意力层是全局的
- 二维邻域结构的使用非常少:
- 在模型开始时通过将图像切割成图像块,以及在微调时为不同分辨率的图像调整位置嵌入(如下所述)
- 除此之外,初始化时的位置嵌入不携带任何关于图像块二维位置的信息,所有图像块之间的空间关系都必须从头学习
Hybrid Architecture
- 作为原始图像块的替代方案,输入序列可以从 CNN 的特征图中形成 (1989)
- 在这种混合模型中,图像块嵌入投影 \(\mathbf{E}\)(公式 1)被应用于从 CNN 特征图中提取的图像块
- 作为一种特殊情况,图像块的空间尺寸可以是 1x1,这意味着输入序列是通过简单地展平特征图的空间维度并投影到 Transformer 维度而获得的
- 分类输入嵌入和位置嵌入如上所述被添加
Fine-Tuning And Higher Resolution
- 在大型数据集上预训练 ViT,然后微调到(较小的)下游任务
- 移除预训练的预测头,并附加一个零初始化的 \(D \times K\) 前馈层
- \(K\) 是下游类别的数量
- 理解:此时相当于用前馈层作为分类头,实现多分类任务
- 以比预训练更高的分辨率进行微调通常是有益的 (2019; 2020)
- 当输入更高分辨率的图像时,保持图像块大小不变,这会导致更长的有效序列长度
- 理论上 Vision Transformer 可以处理任意的序列长度(直到内存限制)
- 但预训练的位置嵌入可能不再有意义
- 可以考虑根据预训练位置嵌入在原始图像中的位置,对其进行 2D 插值
- 注:这种分辨率调整和图像块提取是 Vision Transformer 中手动注入关于图像 2D 结构的归纳偏置的唯一两个点
Experiments
- 本文评估了 ResNet、Vision Transformer (ViT) 以及混合模型的表示学习能力
- 为了解每个模型的数据需求,本文在不同规模的数据集上进行了预训练,并评估了许多基准任务
- 在考虑模型预训练的计算成本时,ViT 表现得非常出色,以更低的预训练成本在大多数识别基准上达到了最先进的水平
- 最后使用自监督进行了一个小型实验,并表明自监督 ViT 为未来带来了希望
Setup
Datasets
- 为探索模型的可扩展性,使用了
- 1)包含 1k 个类别和 1.3M 张图像的 ILSVRC-2012 ImageNet 数据集(下文中简称为 ImageNet)
- 2)1)的超集 ImageNet-21k 包含 21k 个类别和 14M 张图像 (2009)
- 3)JFT (2017):包含 18k 个类别和 303M 张高分辨率图像
- 遵循 Kolesnikov 等 (2020) 的做法,针对下游任务的测试集对预训练数据集进行了去重
- 本文将这些数据集上训练的模型迁移到几个基准任务上:
- 使用原始验证标签和清理后的 ReaL 标签的 ImageNet (2020),CIFAR-10/100 (2009),Oxford-IIIT Pets (2012),以及 Oxford Flowers-102 (2008)。对于这些数据集,预处理步骤遵循 Kolesnikov 等 (2020)
Model Variants
- 基于 BERT (2019) 使用的配置来设置 ViT 配置,如表 1 总结

- “Base”和“Large”模型直接采用自 BERT,本文增加了更大的“Huge”模型
- 在下文中,本文使用简短的符号来表示模型大小和输入图像块大小:
- 例如,ViT-L/16 表示“Large”变体,输入图像块大小为 \(16\times 16\)
- 注:Transformer 的序列长度与图像块大小的平方成反比 ,因此具有更小图像块大小的模型计算成本更高
- 在下文中,本文使用简短的符号来表示模型大小和输入图像块大小:
- 对于基线 CNN,使用 ResNet (2016),但将批量归一化层 (2015) 替换为组归一化 (2018),并使用了标准化卷积 (2019)
- 这些修改改善了迁移性能 (2020),将修改后的模型记为“ResNet (BiT)”
- 对于混合模型,将中间特征图馈送到 ViT,图像块大小为一个“像素”
- 为了试验不同的序列长度
- (i) 采用标准 ResNet50 第 4 阶段的输出
- (ii) 移除第 4 阶段,将相同数量的层放在第 3 阶段(保持总层数不变),并采用这个扩展后的第 3 阶段的输出
- 注: (ii) 会产生 4 倍长的序列长度,以及一个计算成本更高的 ViT 模型
Training & Fine-tuning
- 使用 Adam (2015) 训练所有模型,包括 ResNets
- 设置 \(\beta_{1} = 0.9\),\(\beta_{2} = 0.999\),批大小为 4096,并应用 0.1 的高权重衰减
- 注:作者实验中发现这对所有模型的迁移都有用(附录 D.1 表明,与常见做法相反,在本文设置中,Adam 对 ResNets 的效果略优于 SGD)
- 本文使用线性学习率预热和衰减,详见附录 B.1
- 对于微调,本文对所有模型使用带动量的 SGD,批大小为 512,见附录 B.1.1
- 对于表 2 中的 ImageNet 结果,本文以更高分辨率进行了微调:
- ViT-L/16 为 512,ViT-H/14 为 518,并且还使用了 Polyak & Juditsky (1992) 平均,因子为 0.9999 (2019; 2020b)
- ViT-L/16 为 512,ViT-H/14 为 518,并且还使用了 Polyak & Juditsky (1992) 平均,因子为 0.9999 (2019; 2020b)
Metrics
- 通过 few-shot 或微调准确率报告下游数据集上的结果
- 微调准确率反映了模型在相应数据集上微调后的性能
- few-shot 准确率通过求解一个正则化最小二乘回归问题获得,该问题将(冻结的)训练图像子集的表示映射到 \(\{- 1,1\}^{K}\) 目标向量
- 这种公式化允许作者以封闭形式获得精确解
- 虽然本文主要关注微调性能,但有时本文会使用线性 Few-shot 准确率进行快速的即时评估,因为微调成本太高
Comparison To State of the art
- 首先将最大的模型(ViT-H/14 和 ViT-L/16)与文献中最先进的 CNN 进行比较
- 第一个比较点是 Big Transfer (BiT) (2020)
- Big Transfer 使用大型 ResNet 进行有监督迁移学习
- 第二个是 Noisy Student (2020)
- Noisy Student 是一个大型 EfficientNet,使用半监督学习在 ImageNet 和移除标签的 JFT-300M 上训练
- 目前,Noisy Student 是 ImageNet 上的 SOTA 模型,BiT-L 是本文报告的其他数据集上的最先进模型
- 注:所有模型均在 TPUv3 硬件上训练,本文报告了预训练每个模型所需的 TPUv3 核心天数 (TPUv3-core-days),即用于训练的核心数乘以训练天数
- 第一个比较点是 Big Transfer (BiT) (2020)
- 表 2 显示了结果
- 在 JFT-300M 上预训练的较小的 ViT-L/16 模型在所有任务上均优于 BiT-L(在同一数据集上预训练),同时所需的训练计算资源大大减少
- 更大的模型 ViT-H/14 进一步提升了性能,尤其是在更具挑战性的数据集上(ImageNet、CIFAR-100 和 VTAB 套件)
- 注:该模型预训练所需计算量仍然远少于先前的先进模型
- 注:预训练效率不仅可能受到架构选择的影响,还可能受到其他参数的影响,例如训练计划、优化器、权重衰减等
- 本文在第 4.4 节中对不同架构的性能与计算量进行了受控研究
- 最后,在公共 ImageNet-21k 数据集上预训练的 ViT-L/16 模型在大多数数据集上也表现良好,同时预训练所需的资源更少:使用一个标准 8 核的云 TPUv3 训练大约需要 30 天

- 图 2 将 VTAB 任务分解为各自的任务组,并与该基准上之前的 SOTA 方法进行了比较:
- BiT、VIVI(一个在 ImageNet 和 Youtube 上共同训练的 ResNet (2020))和 S4L(在 ImageNet 上进行有监督加半监督学习 (2019a))
- ViT-H/14 在自然 (Natural) 和结构化 (Structured) 任务上优于 BiT-R152x4 和其他方法
- 在专业化 (Specialized) 任务上,前两个模型的性能相似
Pre-training Data Requirements,预训练的数据需求
- Vision Transformer 在大型 JFT-300M 数据集上预训练时表现良好
- 与 ResNets 相比,ViT 对视觉的归纳偏置较少,那么数据集大小有多关键?进行了两个系列的实验
第一个实验:在规模递增的数据集上预训练 ViT 模型
- ImageNet、ImageNet-21k 和 JFT300M
- 为了提升在较小数据集上的性能,本文优化了三个基本的正则化参数:权重衰减、Dropout 和标签平滑
- 图 3 显示了微调到 ImageNet 后的结果(其他数据集上的结果见表 5)
- 当在最小的数据集 ImageNet 上预训练时,尽管进行了(适度的)正则化,ViT-Large 模型的性能仍不如 ViT-Base 模型
- 使用 ImageNet-21k 预训练时,它们的性能相似
- 只有在使用 JFT-300M 时,才看到更大模型带来的全部好处
- 图 3 还展示了不同大小的 BiT 模型所跨越的性能区域
- BiT CNN 在 ImageNet 上优于 ViT,但随着数据集变大,ViT 实现了反超
- 当在最小的数据集 ImageNet 上预训练时,尽管进行了(适度的)正则化,ViT-Large 模型的性能仍不如 ViT-Base 模型
第二个实验:在 JFT-300M 数据集的随机子集(9M、30M 和 90M,以及完整数据集)上训练 ViT 模型
- 本文没有对较小的子集进行额外的正则化,而是在所有设置中使用相同的超参数
- 注:本文评估的是模型的内在属性,而不是正则化的效果
- 但本文使用了 early-stopping,并报告训练期间达到的最佳验证准确率
- 图 4 包含了结果,为了节省计算量,本文报告 Few-shot 线性准确率而非完整的微调准确率
- 在较小的数据集上,Vision Transformer 比计算成本相当的 ResNet 更容易过拟合
- 例如,ViT-B/32 比 ResNet50 稍快,且 ViT-B/32 在 9M 子集上的表现要差得多
- 在 90M+ 子集上表现更好
- 注:ResNet152x2 和 ViT-L/16 也是如此
- 这个结果强化了直觉:卷积归纳偏置对较小的数据集有用,但对于较大的数据集,直接从数据中学习相关模式就足够了,甚至是有益的
- 在较小的数据集上,Vision Transformer 比计算成本相当的 ResNet 更容易过拟合
- ImageNet 上的 Few-shot 结果(图 4)以及 VTAB 上的低数据量结果(表 2)对于极低数据量的迁移来说似乎很有希望
- 对 ViT Few-shot 特性的进一步分析是未来工作的一个令人兴奋的方向
- 对 ViT Few-shot 特性的进一步分析是未来工作的一个令人兴奋的方向
Scaling Study
- 本文通过评估从 JFT-300M 迁移的性能,对不同模型进行了受控的扩展性研究
- 在这种设置下,数据大小不会成为模型性能的瓶颈,本文评估了每个模型的性能与预训练成本的关系
- 模型集合包括:
- 7 个 ResNets,R50x1,R50x2,R101x1,R152x1,R152x2,预训练 7 个 epoch
- R152x2 和 R200x3 预训练 14 个 epoch
- 6 个 Vision Transformers,ViT-B/32,B/16,L/32,L/16,预训练 7 个 epoch
- L/16 和 H/14 预训练 14 个 epoch
- 5 个混合模型,R50+ViT-B/32,B/16,L/32,L/16 预训练 7 个 epoch
- R50+ViT-L/16 预训练 14 个 epoch(对于混合模型,模型名称末尾的数字代表的不是图像块大小,而是 ResNet 主干网络中的总降采样率)
- 图 5 包含了迁移性能与总预训练计算量的对比(关于计算成本的详细信息,请参见附录 D.5)
- 每个模型的详细结果在附录的表 6 中提供
- 可以观察到几种模式
- 第一,在性能/计算量的权衡上,Vision Transformer 主导了 ResNet
- 为了达到相同的性能(在 5 个数据集上平均),ViT 使用的计算量大约减少 \(2 - 4\) 倍
- 第二,在小的计算预算下,混合模型的性能略优于 ViT,但对于更大的模型,这种差异消失了
- 这一结果有点出乎意料,因为人们可能期望卷积局部特征处理能在任何规模下帮助 ViT
- 第三,在尝试的范围内,Vision Transformer 似乎没有出现饱和(未来前景无限)
- 第一,在性能/计算量的权衡上,Vision Transformer 主导了 ResNet
Inspecting Vision Transformer,审视 ViT
- 为理解 Vision Transformer 如何处理图像数据,本文分析了其内部表示
- Vision Transformer 的第一层将展平的图像块线性投影到一个低维空间(公式 1)
- 图 7(左)显示了学习到的嵌入滤波器的前几个主成分
- 这些成分类似于每个图像块内部精细结构的低维表示的合理基函数

- 这些成分类似于每个图像块内部精细结构的低维表示的合理基函数
- 图 7(左)显示了学习到的嵌入滤波器的前几个主成分
- 在投影之后,一个学习到的位置嵌入被添加到图像块表示中
- 图 7(中)显示,模型学习了在位置嵌入的相似性中编码图像内的距离,即更近的图像块倾向于具有更相似的位置嵌入
- 此外:行-列结构出现了
- 同一行/列的图像块具有相似的嵌入
- 理解:Position Embedding 看起来已经被隐含的学到了
- 最后,对于更大的网格,有时会显现出一种正弦结构(附录 D)
- 位置嵌入学习表示二维图像拓扑结构
- 这一事实解释了为什么手工制作的二维感知嵌入变体没有带来改进(附录 D.4)
- 位置嵌入学习表示二维图像拓扑结构
- 自注意力使 ViT 即使在最底层也能整合整个图像的信息
- 本文研究了网络在多大程度上利用了这种能力
- 基于注意力权重计算了整合信息的图像空间中的平均距离(图 7,右)
- 这个“注意力距离”类似于 CNN 中的感受野大小
- 发现:
- 一些头在最底层就已经关注到图像的大部分区域,这表明模型确实使用了全局整合信息的能力
- 其他注意力头在低层始终具有很小的注意力距离
- 这种高度局部化的注意力在混合模型(在 Transformer 之前应用了 ResNet)中不太明显(图 7,右),表明它可能起到了与 CNN 中早期卷积层类似的功能
- 注意力距离随着网络深度增加而增加
- 从全局来看,模型关注的图像区域与分类任务语义相关(图 6)
- 一些头在最底层就已经关注到图像的大部分区域,这表明模型确实使用了全局整合信息的能力
Self-Supervision,自监督
- Transformer 在 NLP 任务中的成功很大程度上不仅源于其出色的可扩展性,还源于大规模的自监督预训练 (2019; 2018)
- 本文还对用于自监督的掩码图像块预测 (masked patch prediction) 任务进行了初步探索,模仿了 BERT 中使用的掩码语言建模任务
- 通过自监督预训练,较小的 ViT-B/16 模型在 ImageNet 上达到了 \(79.9\%\) 的准确率,比从头开始训练显著提高了 \(2\%\),但仍比有监督预训练低 \(4\%\)
- 附录 B.1.2 包含了更多细节
- 注:本文将对对比预训练 (2020b; 2020; 2019; Hé2020) 的探索留给未来的工作
附录 A:MultiHead Self-Attention,多头自注意力
- 标准的 qkv 自注意力 (SA, (2017)) 中,对于输入序列 \(\mathbf{z}\in \mathbb{R}^{N\times D}\) 中的每个元素,计算序列中所有值 \(\mathbf{v}\) 的加权和
- 注意力权重 \(A_{ij}\) 基于序列中两个元素之间的成对相似性及其各自的查询 \(\mathbf{q}^i\) 和键 \(\mathbf{k}^j\) 表示
$$\begin{array}{rlr}\left[\mathbf{q},\mathbf{k},\mathbf{v}\right] = \mathbf{z}\mathbf{U}_{qkv} & \mathbf{U}_{qkv}\in \mathbb{R}^{D\times 3D_h}, & (5)\ A = \text{softmax}\left(\mathbf{q}\mathbf{k}^\top /\sqrt{D_h}\right) & A\in \mathbb{R}^{N\times N}, & (6)\ \text{SA}(\mathbf{z}) = Av. & & \end{array} \tag {7}$$ - 多头自注意力 (MSA) 是 SA 的扩展,在其中并行运行 \(k\) 个自注意力操作(称为“头”),并投影它们的拼接输出
- 为了在改变 \(k\) 时保持计算量和参数数量恒定,\(D_h\) (公式 5) 通常设置为 \(D / k\)
$$\text{MSA}(\mathbf{z}) = [\text{SA}_1(z);\text{SA}_2(z);\dots ;\text{SA}_k(z)]\mathbf{U}_{msa}\qquad \mathbf{U}_{msa}\in \mathbb{R}^{k\cdot D_h\times D} \tag {8}$$
- 为了在改变 \(k\) 时保持计算量和参数数量恒定,\(D_h\) (公式 5) 通常设置为 \(D / k\)
附录 B:Experiment Details
B.1 Training
- 表 3 总结了作者针对不同模型的训练设置
- 发现:在 ImageNet 上从头开始训练模型时,强正则化是关键
- Dropout(如果使用)在每个密集层之后应用,除了 qkv 投影层以及在将位置嵌入添加到 patch 嵌入之后直接应用
- 混合模型使用与其对应的 ViT 模型完全相同的设置进行训练
- 最后,所有训练均在 224 分辨率下进行
- 表 3:训练的超参数
- 所有模型均以 4096 的批量大小和 10k 步的学习率预热进行训练
- 对于 ImageNet,本文发现额外应用全局范数为 1 的梯度裁剪是有益的
- 训练分辨率为 224
B.1.1 Fine-Tuning
- 使用带动量为 0.9 的 SGD 微调所有 ViT 模型
- 本文对学习率进行小范围网格搜索,学习率范围见表 4
- 使用训练集中的小子集(Pets 和 Flowers 为 10%,CIFAR 为 2%,ImageNet 为 1%)作为开发集,并在剩余数据上进行训练
- 为了获得最终结果,在整个训练集上进行训练,并在相应的测试数据上进行评估
- 对于微调 ResNet 和混合模型,使用完全相同的设置,唯一的例外是 ImageNet,在学习率扫描中增加了另一个值 0.06
- 对于 ResNet,也运行 Kolesnikov 等人 (2020) 的设置,并在此次运行和作者的扫描中选择最佳结果
- 除非另有说明,否则所有微调实验均在 384 分辨率下运行(以不同于训练的分辨率进行微调是常见做法 (2020))
- 将 ViT 模型迁移到另一个数据集时,本文会移除整个头(两个线性层),并将其替换为一个零初始化的、输出目标数据集所需类别数的线性层
- 本文发现这比简单地重新初始化最后一层更稳健一些
- 对于 VTAB,遵循 Kolesnikov 等人 (2020) 的协议,并对所有任务使用相同的超参数设置
- 使用 0.01 的学习率并训练 2500 步 (表 4)
- 通过对两个学习率和两个调度进行小范围扫描,并选择在 200 个示例的验证集上具有最高 VTAB 分数的设置来选定此设置
- 遵循 Kolesnikov 等人 (2020) 中使用的预处理,除了本文不使用特定于任务的输入分辨率
- 相反,本文发现 Vision Transformer 从对所有任务采用高分辨率 \((384 \times 384)\) 中获益最多
- 表 4:微调的超参数
- 所有模型均使用余弦学习率衰减、批量大小为 512、无权重衰减以及全局范数为 1 的梯度裁剪进行微调
- 除非另有说明,否则微调分辨率为 384
B.1.2 Self-Supervision
- 采用掩码 patch 预测目标进行初步的自监督实验
- 破坏 \(50\%\) 的 patch 嵌入,通过将其嵌入替换为可学习的 [mask] 嵌入 \((80\%)\)、随机的其他 patch 嵌入 \((10\%)\) 或保持不变 \((10\%)\)
- 注:此设置与 Devlin 等人 (2019) 用于语言的设置非常相似
- 使用每个被破坏 patch 的相应 patch 表示来预测其 3 位平均颜色(即总共 512 种颜色)
- 破坏 \(50\%\) 的 patch 嵌入,通过将其嵌入替换为可学习的 [mask] 嵌入 \((80\%)\)、随机的其他 patch 嵌入 \((10\%)\) 或保持不变 \((10\%)\)
- 在 JFT 上以 4096 的批量大小训练了自监督模型 100 万步(约 14 个 epoch)
- 使用 Adam,基础学习率为 \(2 \cdot 10^{-4}\),预热 10k 步并采用余弦学习率衰减
- 作为预训练的预测目标,本文尝试了以下设置:
- 1)仅预测平均 3 位颜色(即 512 种颜色的 1 个预测)
- 2)并行预测 \(16 \times 16\) 个 patch 的 \(4 \times 4\) 下采样版本及 3 位颜色(即 16 个 512 种颜色的预测)
- 3)使用 L2 对整个 patch 进行回归(即对 3 个 RGB 通道进行 256 次回归)
- 令人惊讶的是,所有方法都运行良好(L2 稍差一些)
- 注:本文仅报告选项 1)的最终结果,因为它显示出最佳的 few-shot 性能
- 本文还尝试了 Devlin 等人 (2019) 使用的 \(15\%\) 破坏率,但根据本文的 few-shot 指标,结果也稍差
- 最后,作者指出,本文掩码 patch 预测实例化不需要大量的预训练也不需要像 JFT 这样的大型数据集就能在 ImageNet 分类上带来类似的性能提升
- 也就是说,在 10 万预训练步骤后下游性能的提升出现递减,并且在 ImageNet 上进行预训练时也看到了类似的提升
附录 C:Additional Results
- 本文报告了与论文中图表相对应的详细结果
- 表 5 对应论文中的图 3,显示了在不同规模的数据集(ImageNet、ImageNet-21k 和 JFT-300M)上预训练的不同 ViT 模型的迁移性能

- 表 6 对应论文中的图 5,显示了不同规模的 ViT、ResNet 和混合模型的迁移性能,以及它们预训练的预估计算成本
附录 D:Additional Analysis
D.1 SGD vs. Adam for ResNets
- ResNet 通常使用 SGD 进行训练,而本文使用 Adam 优化器则非常规
- 本文比较了在 JFT 上用 SGD 和 Adam 预训练的两个 ResNet(50x1 和 152x2)的微调性能
- 对于 SGD,本文使用 Kolesnikov 等人 (2020) 推荐的超参数
- 结果呈现在表 7 中
- Adam 预训练在大多数数据集上和平均表现上均优于 SGD 预训练
- 这证明了选择 Adam 作为在 JFT 上预训练 ResNet 的优化器的合理性
- 注:绝对数值低于 Kolesnikov 等人 (2020) 报告的值,因为本文仅预训练了 7 个 epoch,而不是 30 个
D.2 Transformer Shape
- 本文对 Scaling Transformer 架构的不同维度进行了消融实验,以找出哪些维度最适合扩展到非常大的模型
- 图 8 显示了不同配置下 ImageNet 上的 5-shot 性能
- 所有配置均基于一个具有 8 层、\(D = 1024\)、\(D_{MLP} = 2048\) 和 patch 大小为 32 的 ViT 模型,即所有线的交点
- 结论:
- Scaling 深度带来的改进最大,直到 64 层都非常明显
- 但在 16 层之后已经可以看到收益递减,开始明显,后续逐步变成对数趋势
- 缩放网络的宽度似乎带来的变化最小
- 减小 patch 大小从而增加有效序列长度,显示出惊人地稳健的改进,且未引入参数
- 注:图中 Patch Size 应该是表达计算成本为 X 轴的,不是其绝对值
- Scaling 深度带来的改进最大,直到 64 层都非常明显
- 这些发现表明,计算量可能比参数数量更能预测性能,并且如果可能的话,缩放应侧重于深度而非宽度
- 总的来说,按比例缩放所有维度会带来稳健的改进
- 总的来说,按比例缩放所有维度会带来稳健的改进
D.3 Head Type and Class Token
- 为尽可能接近原始的 Transformer 模型
- 本文使用了额外的 [class] token,并将其作为图像表示
- 然后通过一个小型 MLP 将该 token 的输出转换为类别预测,该 MLP 在单个隐藏层中使用 tanh 作为非线性激活函数
- 此设计继承自用于文本的 Transformer 模型,本文在整篇论文中都使用它
- 最初尝试仅使用图像 patch 嵌入,对其进行全局平均池化 (GAP),然后接一个线性分类器(就像 ResNet 的最终特征图一样),效果非常差
- 本文发现:
- 这既不是由于额外的 token,也不是由于 GAP 操作
- 相反,性能差异完全可以通过对不同学习率的需求来解释,详见图 9
D.4 Position Embedding
- 本文对使用位置嵌入编码空间信息的不同方式进行了消融实验
- 本文尝试了以下情况:
- 不提供位置信息 (Providing no positional information) :将输入视为一个无序的 patch 集合 (a bag of patches)
- 一维位置嵌入 (1-dimensional positional embedding) :将输入视为按光栅扫描顺序 (raster order) 排列的 patch 序列(本文所有其他实验的默认设置)
- 二维位置嵌入 (2-dimensional positional embedding) :将输入视为二维平面上的 patch 网格
- 在这种情况下,学习两组嵌入,每组对应一个坐标轴,即 X 轴嵌入 (X-embedding) 和 Y 轴嵌入 (Y-embedding),每个的维度大小为 \(D/2\)。然后,根据 patch 在输入中的坐标,作者拼接 X 和 Y 的嵌入来得到该 patch 的最终位置嵌入
- 相对位置嵌入 (Relative positional embeddings) :考虑 patch 之间的相对距离而不是它们的绝对位置来编码空间信息
- 使用一维相对注意力 (1-dimensional Relative Attention),其中定义了所有可能的 patch 对之间的相对距离
- 对于每一对给定的 patch(一个作为 query,另一个作为注意力机制中的 key/value),有一个偏移量 \(p_q - p_k\),每个偏移量关联一个嵌入
- 然后简单地运行一个额外的注意力,使用原始的 query(query 的内容),但使用相对位置嵌入作为 keys
- 然后将来自相对注意力的 logits 作为一个偏置项 (bias term),并在应用 softmax 之前将其加到主注意力(基于内容的注意力)的 logits 上
- 除了不同的空间信息编码方式,本文还尝试了将这些信息整合到模型中的不同方法
- 对于一维和二维位置嵌入,本文尝试了三种不同的情况:
- (1) 在模型的主干(Stem)之后,将输入馈送到 Transformer 编码器之前(本文中所有其他实验的默认设置)
- (2) 在每层开始时学习并添加位置嵌入到输入中
- (3) 在每层开始时添加学习到的位置嵌入到输入中(层之间共享)
- 表 8 总结了在 ViT-B/16 模型上进行的此消融研究的结果
- 没有位置嵌入的模型与有位置嵌入的模型性能之间存在巨大差距,但不同编码位置信息的方式之间几乎没有区别
- 推测:ViT 的 Transformer 编码器在 patch 级别的输入上操作,而不是像素级别,因此如何编码空间信息的差异不那么重要
- 更准确地说,在 patch 级别的输入中,空间维度远小于原始像素级别的输入,例如 \(14 \times 14\) 对比 \(224 \times 224\),并且在这种分辨率下学习表示空间关系对于这些不同的位置编码策略来说同样容易
- 即便如此,网络学习到的位置嵌入相似性的具体模式也取决于训练超参数(图 10)
- 即便如此,网络学习到的位置嵌入相似性的具体模式也取决于训练超参数(图 10)
D.5 Empirical Computation Costs,计算成本
- 计算成本详情见原始论文
D.6 Axial Attention
- 轴向注意力 (Axial Attention) (2020;2019) 是一种简单而有效的技术,用于在组织为多维张量的大型输入上运行自注意力
- 轴向注意力的一般思想是执行多个注意力操作,每个操作都沿着输入张量的单个轴进行,而不是将一维注意力应用于输入的扁平化版本
- 在轴向注意力中,每个注意力沿着特定轴混合信息,同时保持其他轴上的信息独立
- 沿着这个思路,Wang 等人 (2020b) 提出了 AxialResNet 模型,其中 ResNet50 中所有 \(3 \times 3\) 卷积核大小的卷积都被轴向自注意力(即行和列注意力)取代,并辅以相对位置编码
- 本文已经实现了 AxialResNet 作为基线模型
- 此外,本文修改了 ViT 以处理二维形状的输入,而不是一维的 patch 序列,并合并了轴向 Transformer 块 (Axial Transformer blocks)
- 其中,本文不是使用一个自注意力后接一个 MLP,而是使用一个行自注意力加一个 MLP,后接一个列自注意力加一个 MLP
- 图 13 展示了在 JFT 数据集上预训练的 Axial ResNet、Axial-ViT-B/32 和 Axial-ViT-B/16 在 ImageNet 5-shot 线性评估上的性能,与预训练计算量的关系,计算量以 FLOPs 数量(左)和推理时间(每秒样本数,右)两种形式表示
- Axial-ViT-B/32 和 Axial-ViT-B/16 在性能方面均优于其对应的 ViT-B 模型,但这需要更多的计算量
- 这是因为在 Axial-ViT 模型中,每个具有全局自注意力的 Transformer 块被两个轴向 Transformer 块(一个用于行自注意力,一个用于列自注意力)取代,并且尽管轴向情况下自注意力操作的序列长度较小,但每个 Axial-ViT 块中多了一个 MLP
- 对于 AxialResNet,尽管在准确性/计算量权衡方面看起来合理(图 13,左),但在 TPU 上,简单的实现极其缓慢(图 13,右)
- Axial-ViT-B/32 和 Axial-ViT-B/16 在性能方面均优于其对应的 ViT-B 模型,但这需要更多的计算量
D.7 Attention Distance
- 为了理解 ViT 如何使用自注意力跨图像整合信息,本文分析了不同层注意力权重所跨越的平均距离(图 11)
- 此“注意力距离”类似于 CNN 中的感受野大小
- 在较低层中,不同头之间的平均注意力距离差异很大,一些头关注图像的大部分区域,而另一些头则关注查询位置附近或周围的小区域
- 随着深度增加,所有头的注意力距离都增加
- 注:图 11 的纵轴是每个 Head 的 Attention 距离的平均观测值
- 在网络的后半部分,大多数头广泛地关注各个 token
- 随着深度增加,所有头的注意力距离都增加
- 图 11:按头和网络深度划分的注意力区域大小
- 通过平均查询像素与所有其他像素之间的距离(按注意力权重加权),为 128 个示例图像计算注意力距离
- 每个点表示在某一层的 16 个头之一在所有图像上的平均注意力距离
- 图像宽度为 224 像素
D.8 Attention Maps
- 为计算从输出 token 到输入空间的注意力图(图 6 和 14),本文使用了 Attention Rollout (2020)
- 简而言之,我们平均 ViT-L/16 在所有头上的注意力权重,然后递归地乘以所有层的权重矩阵
- 这说明了注意力在所有层中跨 token 的混合
D.9 ObjectNet Results
- 本文还按照 Kolesnikov 等人 (2020) 的评估设置,在本文的旗舰模型 ViT-H/14 上评估了 ObjectNet 基准,获得了 \(82.1\%\) 的 Top-5 准确率和 \(61.7\%\) 的 Top-1 准确率
D.10 VTAB Breakdown
- 表 9 显示了在 VTAB-1k 的每个任务上获得的分数