01
引言
Vision Transformer (VIT)是将图像转换为向量表征最常用的技术之一,这些向量表征可被语言模型用于理解视觉输入。
我们主要探讨两种方法:(1) 将图像块展平 (2) 使用卷积滤波器生成图像块嵌入作为Transformer模型的输入。视觉Transformer与其他Transformer架构的核心区别在于输入处理方式——一旦图像块嵌入被送入Transformer,其处理流程就与其他模态(如语言或音频)再无差异。
ViT方法的核心在于将图像视作序列化数据的概念,但如何将二维图像转化为Transformer能够理解的一维序列呢?
02
下图展示了VIT通用的输入输出流程:输入是由图像块嵌入组成的矩阵,每个嵌入代表图像的一个局部区域;输出同样是图像块嵌入矩阵,但此时的嵌入已包含上下文语义信息——每个图像块都能感知其他图像块的语义含义。而CLS标记作为特殊向量,可一次性捕捉整张图像的全局信息。
图 1:ViT 图像块嵌入到 Transformer 输入与输出
我们首先将图像转换为图像块嵌入(patch embeddings),这可以通过常规方法或使用卷积层来实现。以下分章节进行详细讨论。
03
首先,我们讨论常规方法。将图像划分为固定大小的图像块网格。块的尺寸是一个超参数。例如,如下图2所示的12x12图像可被划分为九个4x4的块。块的数量取决于图像尺寸(12x12)和块大小(4x4),即 N = width × height / p²。
图 2:如何为 vit 创建图像块嵌入。
每个图像块会通过展开其像素值被“展平”为一维向量。对于彩色图像,每个块包含所有三个RGB通道的信息,这些信息也会被一并展平。图2展示了从图像块网格到线性嵌入序列的转换过程。因此展平后的图像块仅表示像素信息。为了学习像素信息背后的概念或含义,每个展平后的块会与块嵌入矩阵(patch_size×dimension)相乘。最终生成的块嵌入便对先前展平的块具备了概念层面的理解。
位置嵌入
为保留原本会丢失的空间信息,ViT会为每个块嵌入添加位置嵌入。这能让模型识别出某个图像块是来自原图的左上角、中心还是其他位置。上图2通过“图像块嵌入+位置嵌入”步骤展示了这一过程。
位置嵌入是一个为每个位置单独学习的简单向量。将位置嵌入矩阵与块嵌入矩阵相加后,就得到了Transformer的实际输入。若没有位置嵌入,模型在需要理解图像元素间空间关系的任务中会表现不佳。
<CLS Token>
上图2中有一个不太显眼却特别有趣的细节:在序列开头添加了一个特殊的蓝色[CLS] Token标记。CLS Token标记代表完整图像,而其他Tokens则对应各个图像块。通过自注意力机制,CLS Token会汇集所有图像块的信息。由于它存储的是整张图像的综合信息而非单个图像块的信息,其最终状态通常被用于图像分类任务。
那么其他嵌入是否也通过自注意力机制捕获了所有嵌入的信息?确实如此。但不同的是,其他输出向量还额外存储了其对应图像块的专属信息。因此CLS向量与其他向量的差异并不悬殊,主要区别在于每个非CLS向量都会更偏向自身对应的图像块信息。
04
我们当然也可以通过卷积滤波器生成图像块嵌入。下图详细演示了该过程的实现原理!需要说明的是,卷积神经网络中的输出通道数即特征图数量,每个特征图负责编码输入图像的特定信息。而输出通道的尺寸则决定了序列长度,输出通道的数量将代表每个图像块嵌入的隐藏维度。原论文采用非重叠式处理方案:
非重叠块
-
重叠块
图 3:使用卷积创建图像块嵌入。
在上图3示例中,我们获得3x3尺寸的特征图,这意味着序列长度将为9,对应9个图像块。我们选择两个滤波器,产生两个输出通道(即feature maps)。因此这9个块中每个块的隐藏维度为2。这仅为示例,实际应用中会采用更高维度以捕获更多信息!我们通过nn.Flatten(2)将这些特征图展平,该操作会从第2个维度开始合并所有维度(本例中将张量从(1,2,3,3)重塑为(1,2,9)),随后调整维度顺序为(1,9,2)。
接着按前述方法添加CLS标记,得到新形状(1,10,2)。这意味着我们获得了10个维度为2的嵌入向量,其中9个对应图像块,1个代表完整图像(CLS标记),此时该矩阵即可作为Transformer模块的输入。
一旦我们有了输入图像块,后续的处理就与其他任何 Transformer 相同了。
05
在两种方法中,我们都将输入图像划分为更小的块。每个块旨在捕获该特定块中存在的图像信息。如果我们选择较大的图像块,我们的块嵌入会变得不那么细粒度(它存储了图像更大区域的信息)。然而,我们得到的块嵌入数量更少,这对Transformer来说计算效率更高。这是因为注意力层会将每个输入块与其他所有块进行比较,所以比较次数是n²。使用较大的块大小,我们会得到一个更小的n。
何时需要更小的图像块尺寸?
当我们想要捕获细粒度信息时,这一点很重要,例如输入图像中的小文本。
如果我们不使用图像块而是单独使用每个像素会怎样?
确实有可能将每个像素视为单独的标记(token)。Pixel Transformers (PiT) 模型分析了这种方法。目标是减少依赖图像块的 Vision Transformers (ViT) 中固有的局部归纳偏置(locality inductive bias)。通过处理单个像素,模型被迫从头开始学习空间关系,这可能导致更灵活的表示。事实上,作者能够证明将每个像素视为一个标记可以提高图像分类性能!然而,单独处理每个像素会极大地增加序列长度,由于自注意力机制的二次方复杂度,导致计算成本更高。例如,一个 32x32 的图像有 1024 个像素,而一个 224x224 的图像已经有 50176 个像素。增加的序列长度也会增加内存需求,这使得训练此类模型变得具有挑战性。
06
归纳偏置是模型在看到任何数据之前所拥有的“先验知识”或“假设”。
以下是归纳偏置的重要性以及它与 CNN 和 ViT 的关系:
泛化能力:
归纳偏置有助于模型泛化到新的、未见过的数据。通过对数据中的潜在模式做出假设,模型即使在没有见过特定模式的情况下也能做出预测。
学习效率:
-
权衡:
与 CNN 相比,Vision Transformers (ViT) 具有显著更少的图像归纳偏置。CNN 在结构上通过以下方式理解图像:
局部性:
每个层都关注图像的小局部区域。其理念是相邻的像素比距离较远的像素更相关。
二维邻域结构:
-
平移等变性:
07
由于图像块嵌入,我们在 ViT 中确实具有一定的局部性。ViT 中的多层感知机(MLP)层具有局部性和平移等变性,但其核心的自注意力层则在整个图像范围内进行全局操作。这使得 ViT 在处理不同类型的数据时更加灵活和适应性强,但也意味着它们可能需要更多的训练数据才能达到与卷积神经网络(CNN)相当的性能水平。ViT 需要从零开始学习二维结构和空间关系,因为其位置嵌入在训练初期是随机初始化的。这也表明 ViT 对数据的需求量更大。
点击上方小卡片关注我
添加个人微信,进专属粉丝群!

