1351 字
7 分钟
Trasformer-ViT视觉Transformer
2026-06-28
无标签

其实Vit 的问题就是如何让transformer像处理 NLP 任务一样处理图像任务。ViT的输入是图像,输出是分类结果。ViT的核心思想就是把图像切成小块(patch),然后把这些小块当作一个序列输入到transformer中进行处理。这里重点讲编码的过程。

图像tokenization#

  1. 图像分块与序列化:将输入图像(如 224x224x3)均匀划分为一组固定大小的、不重叠的图像块 (Patches),通常为 16x16 像素。例如,一张 224x224 的图像会被切分成 (224/16) * (224/16) = 196 个图像块。每个图像块会被展平 (Flatten) 成一个一维向量。

  2. 线性投影 (Patch Embedding):使用一个可训练的线性层,将每个展平后的图像块向量,映射到一个维度为 D 的嵌入空间 (Embedding Space)。这个操作与NLP中将词转换为词向量的过程类似。经过这一步,我们得到了一个由 N 个向量(N等于图像块数量)组成的序列,每个向量的维度都是 D。

  3. 添加位置编码 (Positional Encoding):由于Transformer本身不具备处理顺序的能力,需要加入位置编码来保留每个图像块在原始图像中的空间位置信息。ViT通常使用可学习的1D位置编码,与图像块嵌入相加后输入编码器。

  4. 添加 [CLS] 标记:借鉴BERT,ViT会在序列最前面添加一个特殊的可学习 [CLS] token。经过编码器后,这个token的最终输出状态会被用作整个图像的聚合表示,用于后续的分类等任务

Transformer编码器处理图像块序列#

依旧是使用标准的Transformer编码器结构,包括多头自注意力机制(Multi-Head Self-Attention)、前馈神经网络(Feed Forward Network,FFN)、残差连接(Residual Connection)和层归一化(Layer Normalization)。这些组件的作用和在NLP任务中是类似的,只是输入变成了图像块序列。

需要注意的是,最后送进分类器的不是所有图像块的输出,而是 [CLS] token 的输出。这个输出向量会被送入一个线性分类器(通常是一个全连接层),用于预测图像的类别。

ViT vs CNN#

ViT与CNN最根本的差异在于它们如何看待一张图像。可以这样对比:

特性ViT (Vision Transformer)CNN (卷积神经网络)
核心机制自注意力机制 (Self-Attention)卷积操作 (Convolution)
感受野全局 (Global),第一层即可看到所有图像块局部 (Local),需堆叠多层才能扩大视野
归纳偏置较弱,没有内置“空间邻近”或“平移不变”的假设很强,内置“平移不变性”和“局部性”等先验
数据效率较低,极度依赖海量数据预训练较高,在小数据集上也能有效训练
计算复杂度与图像块数量的平方成正比 (O(N²))与图像尺寸线性相关 (O(HW))
全局建模天生具备,直接建模长距离依赖能力较弱,需要通过深层网络间接实现
高分辨率计算量随分辨率平方级增长,可能成为瓶颈计算量随分辨率线性增长,相对友好

ViT的优势与局限#

优势:更强的全局理解能力#

  • 强大的全局建模能力:ViT能够从第一层开始就捕捉图像中远距离像素或区域之间的关系。在处理需要理解全局上下文的任务时,这种能力尤其关键。
  • 打破CNN的性能瓶颈:当拥有海量训练数据时,ViT可以通过在大规模数据集上的预训练,学习到超越CNN的表示能力。

局限:更高的数据门槛与计算成本#

  • 对数据量的要求极高:由于缺乏CNN那样的归纳偏置 (Inductive Bias),ViT无法高效地从有限的数据中学习空间结构。它在ImageNet-1k (130万张图) 这样的数据集上,性能可能不如同等规模的CNN。

  • 计算复杂度较高:自注意力的计算复杂度与图像块数量的平方成正比。处理高分辨率图像时,计算量和内存消耗会急剧增加。

  • 训练成本高昂:为了达到最佳性能,ViT通常需要在上亿量级的超大规模数据集(如JFT-300M)上进行预训练,这对计算资源是巨大的挑战。

改进与变体:解决ViT的局限性#

为了解决上述问题,研究者们提出了大量的改进方案,例如:

  • 数据高效型ViT (Data-Efficient Image Transformers, DeiT):通过引入知识蒸馏等训练策略,降低ViT对超大规模数据的需求。
  • 层次化ViT:如Swin Transformer,引入类似CNN的层级结构(金字塔结构),在降低计算复杂度的同时,也获得了更好的多尺度特征。
  • 混合架构:在ViT的早期阶段使用卷积层来提取局部特征,再将特征序列送入Transformer层,以结合两者的优势。

ViT的成功证明了,在拥有足够数据的前提下,全局的自注意力机制是一种比局部卷积更强的视觉建模方式

Trasformer-ViT视觉Transformer
https://biscuit0613.github.io/posts/ml/trasformer-vit/
作者
Biscuit
发布于
2026-06-28
许可协议
CC BY-NC-SA 4.0
Trasformer-OtherPartsInEncoder-FFN
Trasformer-编码器核心:self-attention自注意力机制