本文暂不涉及攻击代码实现。
ViT 攻击通常会涉及 FGSM、PGD、attention rollout 等内容。如果在没有梳理 Vision Transformer 基础结构的情况下直接进入攻击部分,后续的扰动位置、梯度传播路径和注意力变化都不容易解释清楚。因此,本文整理 ViT 的基本流程:图像如何被转换为 token,class token 的作用是什么,位置编码补充了哪些信息,以及训练阶段为什么常采用预训练模型并替换分类头。
本文主要参考 Vizuara AI Labs 的文章 Vision Transformers。文中图片直接引用原文图片链接,并在图下注明来源;正文部分为基于该文章和 ViT 论文的整理。代码实现将在后续部分单独记录。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
ViT 的建模动机
CNN 处理图像时具有明确的局部归纳偏置。卷积核在图像上滑动,每次关注一个局部窗口;浅层网络通常提取边缘、纹理、角点等低级特征,深层网络再逐步组合出物体部件和整体语义。这种设计引入了局部性和平移等变性等视觉先验,因此在中小规模数据集上通常具有较好的稳定性。
ViT 采用了不同的建模方式。它将图像划分为固定大小的 patch,并将这些 patch 视为序列 token 输入 Transformer encoder。其主要优势是可以较早地建模全局关系:在第一层 encoder 中,任意两个 patch 之间都可以通过 self-attention 建立联系,而不需要像 CNN 那样依赖多层卷积逐步扩大感受野。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
这也是研究 ViT 攻击时需要重点关注的结构差异。CNN 中的扰动往往与局部纹理、边缘特征相关;而在 ViT 中,扰动不仅可能改变 patch token 的表示,还可能通过 self-attention 影响 patch 之间的信息传递。因此,在讨论攻击方法之前,需要先明确 ViT 内部的信息流动方式。
从文本 token 到图像 token
Transformer 最初主要用于 NLP 任务。文本天然具有序列结构,句子可以被拆分为 token,每个 token 被映射为 embedding,再加入位置编码,随后输入 encoder 或 decoder。
图像并不具备类似文本 token 的天然离散单元。ViT 的处理方式是将图像划分为固定大小的 patch,将每个 patch 展平为向量,再通过线性层映射到 Transformer 所需的表示维度。经过这一步后,一张图像就被转换为一个 patch 序列。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
设输入图像为
patch 大小是 $P \times P$,那么 patch 数量是
每个 patch 展平后长度是
以常见的 $224 \times 224$ RGB 图像为例,当 patch size 取 16 时,有
即一张图像会被转换为 196 个 patch token。每个 patch 的原始展平维度为 $16 \times 16 \times 3 = 768$。ViT-Base 的 hidden size 也为 768,但二者在概念上并不相同:前者是 patch 展平后的像素维度,后者是 Transformer 内部的表示维度。
Patch embedding
划分 patch 只是图像序列化的第一步。Transformer 的输入不是原始像素块,而是 embedding,因此每个 patch 还需要经过一个可学习的线性投影。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
把第 $i$ 个 patch 记作
线性投影矩阵是
投影后得到
其中 $D$ 是 Transformer 的 hidden dimension。所有 patch 共享同一个投影矩阵。这与文本中的词向量表示有一定相似之处,但 patch embedding 并不是查表操作,而是对像素向量进行线性变换。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
部分实现会使用 kernel size 和 stride 都等于 $P$ 的卷积层完成 patch embedding。虽然形式上是卷积,但每次卷积正好覆盖一个 patch,并且 patch 之间不重叠,因此可以将其理解为一种高效实现的 patch 切分与线性投影。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
Class token
分类任务需要一个向量表示整张图像。ViT 在 patch 序列前加入一个可学习的 class token。该 token 初始时只是一个参数向量;经过多层 self-attention 后,它会聚合来自各个 patch 的信息,并作为分类头的输入。
输入序列可以写成
其中
其中额外的 1 对应 class token 的位置。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
在后续攻击分析中,class token 是一个重要观察对象。分类头通常只读取 class token 的最终输出表示。如果输入扰动改变了 class token 聚合图像信息的方式,最终 logits 也会发生相应变化。
位置编码
Transformer 的 self-attention 本身不包含顺序信息。如果只输入一组 patch embedding,模型可以获得每个 patch 的内容表示,但无法区分这些 patch 在原图中的空间位置。左上角、右下角和中心区域的空间关系,都需要通过位置编码显式补充。
ViT 会给每个 token 加一个可学习的位置向量
class token 同样具有对应的位置向量。通过加入位置编码,模型可以区分相同纹理出现在不同图像位置时所对应的不同语义。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
这也为后续攻击分析提供了一个重要切入点。对于 CNN,局部平移通常不会完全改变模型提取到的特征;而 ViT 依赖 patch 切分和位置编码,patch 边界、token 顺序和位置向量都会参与最终表示。因此,在分析 patch-level attack 或 token-level behavior 时,需要将位置因素纳入考虑。
Encoder 里发生了什么
ViT 使用 encoder-only 结构。每一层 encoder block 主要包含 multi-head self-attention 和 MLP 两个模块,并配合 LayerNorm 与残差连接。
单头 attention 可以写成
多头 attention 会将多个 head 的结果进行拼接:
每个 encoder block 可以简化表示为

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
其中 $\mathbf{Q}\mathbf{K}^T$ 对应注意力分数。对于图像任务,可以将其理解为 patch 与 patch 之间的关系强度。每个 patch 不仅可以关注局部邻域,也可以与远处 patch 建立联系。
这种全局建模能力也带来了计算成本。attention 矩阵大小约为
因此,随着 token 数增加,计算量和显存占用都会上升。ViT-Base 在 $224 \times 224$ 输入、patch size 为 16 时共有 197 个 token;如果 patch size 更小,token 数会进一步增加,attention 的计算成本也会随之上升。
分类头
经过 $L$ 层 encoder 后,取最后一层 class token 的输出向量
分类头一般是一个线性层
再经过 softmax 得到类别概率
训练分类任务时常用交叉熵
当标签采用 one-hot 表示时,交叉熵主要惩罚真实类别对应预测概率过低的情况。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
至此,ViT 用于图像分类的基本链路已经完整。
整体流程可以概括为:图像被划分为 patch,patch 被映射为 embedding,随后加入 class token 和位置编码,输入多层 Transformer encoder;最后取 class token 的输出表示,接分类头,并通过 softmax 与交叉熵完成分类训练。
ViT 的优势与局限
ViT 适合建模全局关系。当目标的不同部分距离较远,或者分类需要同时考虑前景与背景关系时,self-attention 比局部卷积更直接。此外,ViT 具有较好的扩展性,在数据规模和模型规模足够大时通常能够取得较强性能。
但 ViT 对数据规模更敏感。CNN 通过结构设计引入了局部性和平移相关的视觉先验,而 ViT 需要从数据中学习更多视觉规律。因此,在小数据集上从头训练 ViT 往往不如基于预训练模型进行 fine-tuning。另一个限制是 attention 的计算成本较高,尤其在高分辨率图像或较小 patch size 的设置下更为明显。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
训练流程整理
参考文章的 hands-on 部分使用 Oxford-IIIT Pet 数据集,共包含 37 个类别。训练思路不是从零训练 ViT,而是使用已经在大规模数据上预训练的 ViT-Base,并替换最后的分类头,使其适配宠物品种分类任务。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
本节只记录训练流程和关键设置,代码实现将在后续部分补充。
使用的预训练模型为 $\text{ViT-Base-Patch16-224}$。模型名称包含了几个关键信息:Base 表示模型规模,Patch16 表示 patch size 为 16,224 表示输入图像分辨率为 $224 \times 224$。
输入图像需要处理为预训练模型所使用的格式。参考文章中使用的归一化均值和方差为
训练阶段的数据增强主要包括随机裁剪到 $224 \times 224$ 和随机水平翻转;验证阶段则使用 resize、center crop 和相同的 normalize。数据增强不会改变模型结构,其作用是提高输入变化的多样性,降低分类头对训练样本的过拟合风险。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
fine-tuning 通常有两种设置。
一种方式是冻结 backbone,只训练分类头。这种方式训练成本较低,也更稳定,适合用于验证完整训练流程。另一种方式是解冻部分或全部 encoder,与分类头一起微调。后者可能获得更好的性能,但对学习率设置更敏感,也更容易出现过拟合。
参考文章选择先冻结 backbone,只训练 head。此时可训练参数主要是
这些参数对应前文分类头中的权重和偏置。预训练 ViT 已经具备较强的视觉特征提取能力,新分类头需要学习的是如何将这些特征映射到 37 个宠物类别。
优化器使用 AdamW,学习率是
weight decay 是
AdamW 可以理解为在 Adam 的动量和二阶矩估计基础上,将 weight decay 从梯度更新中解耦。其简化更新形式可以写为
学习率调度使用 cosine schedule,并在前 10% steps 进行 warmup。warmup 可以降低训练初期更新过大带来的不稳定性,尤其适用于分类头刚初始化的场景。
如果总训练步数是 $T$,warmup 步数是
warmup 阶段可以近似表示为
warmup 之后进入 cosine decay 阶段:
训练目标仍然是交叉熵。每个 batch 进行前向传播并得到 logits,随后计算 loss、执行反向传播并更新分类头参数。验证阶段不更新参数,只记录 loss 和 accuracy。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
训练完成后,除了观察 accuracy,还需要分析混淆矩阵。accuracy 只能反映整体正确率,而混淆矩阵可以显示模型更容易混淆哪些类别。Oxford-IIIT Pet 中部分猫狗品种外观相近,因此混淆矩阵比单一准确率指标提供了更细粒度的错误信息。

图源,Vizuara AI Labs,Mayank Pratap Singh,Vision Transformers。
攻击部分的衔接位置
本文到训练流程为止。后续分析 ViT 攻击时,可以从以下几个位置衔接。
- 输入图像 $\mathbf{x}$。攻击可以直接在像素空间中添加扰动,常见约束为
- patch embedding。输入扰动会首先改变 patch token 的表示
- attention map。扰动可能改变不同 patch 之间的注意力分布
- class token。分类结果最终依赖 class token 的输出表示
后续进入攻击部分时,可以先使用训练好的 ViT 分类器完成 baseline inference,再实现基础的 untargeted attack。在像素级攻击验证完成后,再进一步分析 patch-level 和 attention-level 的变化。
参考
Mayank Pratap Singh, Vizuara AI Labs, Vision Transformers, accessed on 2026-07-06.
Dosovitskiy et al., An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale.