其实Vit 的问题就是如何让transformer像处理 NLP 任务一样处理图像任务。ViT的输入是图像,输出是分类结果。ViT的核心思想就是把图像切成小块(patch),然后把这些小块当作一个序列输入到transformer中进行处理。这里重点讲编码的过程。
图像tokenization
-
图像分块与序列化:将输入图像(如 224x224x3)均匀划分为一组固定大小的、不重叠的图像块 (Patches),通常为 16x16 像素。例如,一张 224x224 的图像会被切分成 (224/16) * (224/16) = 196 个图像块。每个图像块会被展平 (Flatten) 成一个一维向量。
-
线性投影 (Patch Embedding):使用一个可训练的线性层,将每个展平后的图像块向量,映射到一个维度为 D 的嵌入空间 (Embedding Space)。这个操作与NLP中将词转换为词向量的过程类似。经过这一步,我们得到了一个由 N 个向量(N等于图像块数量)组成的序列,每个向量的维度都是 D。
-
添加位置编码 (Positional Encoding):由于Transformer本身不具备处理顺序的能力,需要加入位置编码来保留每个图像块在原始图像中的空间位置信息。ViT通常使用可学习的1D位置编码,与图像块嵌入相加后输入编码器。
-
添加 [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的成功证明了,在拥有足够数据的前提下,全局的自注意力机制是一种比局部卷积更强的视觉建模方式。