Vision Transformer (ViT) 技术解析
<blockquote><p>论文: An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale</p>
</blockquote>
<h2 id="概述">概述</h2>
<p>Vision Transformer (ViT) 将标准 Transformer 架构直接应用于图像分类任务。模型架构基于《Attention is all you need》中的 Transformer Encoder,针对视觉任务仅做了最小化的修改。训练流程采用两阶段策略,先在大规模数据集上进行预训练(图像分类),再在下游任务(目标检测、图像分割等)的小规模数据集上进行微调。</p>
<h2 id="模型架构">模型架构</h2>
<p>ViT 整体架构如下:</p>
<p></p>
<h3 id="输入处理patch-embedding">输入处理:Patch Embedding</h3>
<p>ViT 需要解决的首要问题是如何将图像转换为 Transformer 可处理的序列格式。输入图像的维度为 <code>(batch_size, height, width, channel)</code>,而 Transformer 期望的输入格式是 <code>(batch_size, seq_len, d_model)</code>。ViT 采用的方案是将图像切分为 N 个 P×P 的 patches,每个 patch 展平后通过线性投影层进行映射,最终得到维度为 <code>(batch_size, N, P² × channel)</code> 的序列。其中 patch 数量 N 的计算公式为 N=\frac{height \times width}{P^2}。在这个设计中,每个 patch 在 Transformer 中扮演的角色等价于 NLP 任务中的 token。</p>
<h3 id="class-token">Class Token</h3>
<p>参考 BERT 的设计,ViT 在 patch 序列前添加一个可学习的 class token <code></code>,用于聚合全局图像信息。添加该 token 后,序列维度变为 <code>(batch_size, N+1, P² × channel)</code>。这个 token 经过 Transformer 处理后的输出将用于最终的分类任务。</p>
<h3 id="位置编码">位置编码</h3>
<p>由于 patch 切分会丢失空间位置信息,ViT 通过加性位置编码来恢复这些信息。具体实现上采用可学习的位置嵌入,通过加法的方式融入 patch embeddings,这一操作不改变数据维度,仍保持为 <code>(batch_size, N+1, P² × channel)</code>。论文的实验结果表明,一维位置编码与二维位置编码的性能相当,这说明 Transformer 的自注意力机制能够自动学习到二维空间关系。</p>
<h3 id="transformer-encoder">Transformer Encoder</h3>
<p>ViT 使用标准 Transformer Encoder,但在实现细节上有两处修改。第一处是 Layer Normalization 的位置,原始 Transformer 采用 Post-LN 方式(自注意力 → 残差 → LN),而 ViT 采用 Pre-LN 方式(LN → 自注意力 → 残差)。第二处是激活函数的选择,ViT 使用 GELU 替代了原始 Transformer 中的 ReLU。除此之外,Transformer 内部的多头自注意力、前馈网络等机制与标准实现保持一致。</p>
<h3 id="分类输出">分类输出</h3>
<p>经过多层 Transformer Encoder 处理后,模型输出的维度为 <code>(batch_size, N+1, P² × channel)</code>。对于分类任务,只需要提取 token 对应的输出,即每个 batch 的第一个位置,得到维度为 <code>(batch_size, P² × channel)</code> 的特征向量。这个特征向量随后通过 MLP Head 进行线性变换,将维度映射到类别空间,最终输出 <code>(batch_size, N_class)</code> 的 logits,其中 N_class 是数据集的类别总数。经过 softmax 归一化后得到类别概率分布,概率最大的类别即为模型的预测结果。</p>
<h2 id="技术要点">技术要点</h2>
<p>ViT 的核心贡献在于证明了纯 Transformer 架构在视觉任务上的有效性。通过将图像切分为 patches 并进行线性投影,ViT 成功地将视觉问题转化为序列建模问题。位置编码的引入保留了空间信息,而 token 的设计则借鉴了 BERT 在 NLP 领域的成功经验。在实现层面,Pre-LN 和 GELU 激活函数的使用提升了训练效率和模型性能。这种架构设计为后续的多模态模型(如 CLIP、DALL-E)提供了重要的基础参考。</p><br>来源:程序园用户自行投稿发布,如果侵权,请联系站长删除<br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]