Vision Transformer (ViT) 中的图像块嵌入与位置编码机制
字数 2160 2025-11-09 13:14:04
Vision Transformer (ViT) 中的图像块嵌入与位置编码机制
题目描述:
Vision Transformer (ViT) 是一种将Transformer架构应用于计算机视觉任务的里程碑式模型。与传统的卷积神经网络不同,ViT将输入图像分割成一系列固定大小的图像块(patches),并通过线性投影将这些图像块转换为嵌入向量序列。同时,为了保留图像块之间的空间位置信息,ViT引入了可学习的位置编码(Positional Encoding)并与图像块嵌入相加,形成最终的输入序列。本题目将详细解析ViT中图像块嵌入(Patch Embedding)和位置编码的实现原理与作用。
解题过程:
-
问题背景与核心思想
- 传统CNN的局限:卷积神经网络通过局部感受野和权重共享处理图像,但全局依赖关系建模能力有限,需要深层堆叠。
- Transformer的成功:Transformer模型在自然语言处理领域凭借其自注意力机制,展现了强大的长距离依赖建模能力。
- ViT的核心创新:ViT的核心思想是摒弃卷积操作,将图像视为一个由图像块(Patch)组成的序列(Sequence),然后直接使用标准的Transformer编码器来处理这个序列,从而将图像分类等问题转化为序列处理问题。
-
图像块嵌入(Patch Embedding)
- 目的:将二维图像数据转换为适合Transformer编码器处理的一维序列数据。
- 具体步骤:
- 图像分块:假设输入图像为
X,其形状为(H, W, C)(高度、宽度、通道数)。ViT将图像分割成N个大小为P x P的非重叠图像块。因此,图像块的数量N = (H * W) / (P * P)。 - 展平:将每个图像块(形状为
(P, P, C))展平为一个一维向量,长度为P * P * C。 - 线性投影(嵌入):使用一个可训练的线性层(全连接层)将这个展平后的向量投影到一个
D维的嵌入空间。这个线性层通常被称为“Patch Embedding”层或“Patch Projection”层。经过投影后,我们得到了一个形状为(N, D)的矩阵,其中每一行代表一个图像块的D维嵌入表示。
- 图像分块:假设输入图像为
- 可学习的分类令牌([class] token):为了最终完成分类任务,ViT借鉴BERT的做法,在图像块序列的开头添加一个特殊的可学习嵌入向量,称为
[class]token。其对应的输出状态将作为整个图像的表示,用于最终的分类。因此,输入序列的长度变为N+1,形状为(N+1, D)。
-
位置编码(Positional Encoding)
- 问题:Transformer的自注意力机制本身是置换不变的(Permutation-Invariant),即它不关心输入序列的顺序。但对于图像来说,空间位置信息至关重要(例如,天空的块通常在上方,草地的块通常在下方)。
- 解决方案:引入位置编码,为序列中的每个位置(每个图像块)赋予一个表示其位置信息的向量。
- ViT中的实现:
- 可学习的位置编码:ViT采用了一种简单而有效的方法——使用一组可学习的参数作为位置编码。这组参数是一个形状为
(N+1, D)的矩阵(与添加了[class]token后的图像块嵌入序列形状相同)。 - 相加融合:将图像块嵌入矩阵与位置编码矩阵按元素相加,得到融合了内容信息和位置信息的最终输入序列
Z_0:Z_0 = [x_class; x_p^1 E; x_p^2 E; ...; x_p^N E] + E_pos。其中,E是Patch Embedding投影矩阵,E_pos是位置编码矩阵。 - 为什么是可学习的? 与原始Transformer中使用固定的正弦余弦函数不同,ViT论文中发现使用可学习的位置编码效果相当甚至更好,且更简单。这让模型自己从数据中学习到最合适的位置表示形式。
- 可学习的位置编码:ViT采用了一种简单而有效的方法——使用一组可学习的参数作为位置编码。这组参数是一个形状为
-
送入Transformer编码器
- 经过上述步骤得到的
Z_0序列,其形状为(N+1, D),现在可以被送入标准的Transformer编码器。 - Transformer编码器由多层Multi-Head Self-Attention(MSA)和MLP块组成,并包含层归一化(LayerNorm)和残差连接(Residual Connection)。
- 序列经过L层Transformer编码器的处理,输出序列
Z_L的形状仍然是(N+1, D)。
- 经过上述步骤得到的
-
分类头与输出
- 取输出序列
Z_L的第一个位置对应的向量,即[class]token 对应的输出z_L^0。 - 将
z_L^0通过一个小型的MLP(通常是一个线性层)进行分类,得到最终的分类预测结果。
- 取输出序列
总结:
Vision Transformer通过图像块嵌入将图像结构化为序列,并通过可学习的位置编码为序列注入至关重要的空间结构信息,巧妙地绕开了卷积操作,成功地将Transformer架构迁移到了计算机视觉领域。这种设计使其特别擅长捕捉图像的全局上下文信息,为后续的大量视觉Transformer模型奠定了基础。