news 2026/10/26 10:20:10

Vision Transformer(ViT)深入浅出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vision Transformer(ViT)深入浅出

Vision Transformer(ViT) 深入浅出

  • 简介
  • 结构
    • 整体架构
    • 输入
    • 分类标记(cls token)
    • 位置编码(Positional Encoding)
    • 多头注意力机制(Multi-HeadAttention, MHA)
    • 前馈神经网络(Feedforward Neural Network, FFN)
    • 网络层次
  • 实验分析
    • 数据大小
    • 预训练计算量
    • 内部表征分析

在了解ViT之前首先你要知道什么是Transformer,对于Transformer的学习可以看我的文章:Transformer深入浅出

简介


具体怎么实现可以见项目:Vision-Transformer

结构

整体架构

  • Patch embedding是一种方法,用于将图像分割成固定大小的块(patches)。例如,如果输入图像的大小是224x224,并且将图像分成 16x16 大小的块,这样就会得到 224/16*224/16=196 个块(patches)。每个块的大小是 16x16 像素,每个像素通常由 RGB 三个通道组成,因此每个块的维度是 16x16×3=768。然后,通过线性投射,将每个 768 维的块映射到一个更高维度的向量空间。例如,如果线性投射的维度是N(通常与patch的维度相同),那么投射后的每个块的维度仍然是 N。因此,整个图像被转换成一个长度为 196 的序列,每个序列元素都那是一个 N 维的向量。在这个过程中,通常会添加一个特殊的标记(例如CLS标记),使得最终的序列长度为197。这样的处理方式将一个视觉问题转换成了一个序列到序列(seq2seq)的问题。

  • ViT同样需要加入位置编码(positional encoding)来为输入序列引入位置信息。位置编码可以被理解为一个表格,其有N行,N的大小与输入序列的长度相同。每一行代表一个向量,这个向量的维度与输入序列embedding的维度相同(768)。需要注意的是,位置编码的操作是将其与输入序列的embedding进行加法操作(sum),而不是简单地将其拼接在一起(concatenate)。加入位置编码信息之后,整个序列的维度依然是197x768。

输入

分类标记(cls token)

位置编码(Positional Encoding)

多头注意力机制(Multi-HeadAttention, MHA)

首先我们来看Transformer里的多头注意力机制是什么样子:


我们的ViT的就是把带有位置编码的词向量改为了带有位置编码的图,在原文中也就是197x768大小,也就是L=197,d=768。从代码的角度来看就是这样的:


原本的Transformer中是三个线性层进行三次变换,这里只用一个线性层,然后扩展了三倍,最后再拆分开。原理是采用了 8 个注意力头(h=8),模型的隐藏维度 768 被均分给 8 个头,因此每个头的维度 dk =768/8=96

前馈神经网络(Feedforward Neural Network, FFN)

我们也可以叫他为多层感知机(Multi-Layer Perceptron, MLP)。

网络层次

以ViT-Base为例解释为:12 层,隐藏维度 768,MLP 中间维度 3072,12 个注意力头,总参数量 86M(8600 万)

其中:

  • Model:模型名称
  • Layers Transformer:Encoder 层数
  • Hidden size D:特征向量维度(token embedding 的维度)
  • MLP size:Encoder 里面 MLP 中间层的维度
  • Heads:多头自注意力的头数
  • Params:模型总参数量

实验分析

结论:

  1. 更大规模的预训练数据很关键;
  2. patch更细通常更强,但更耗算力;
  3. ViT的算力性价比突出(多个数据集上过强CNN基线,但预训练成本远低于当时的强基线)。

数据大小

数据大小对结果的影响,ViT主要是对于大规模的数据集效果非常好,对于我们切割小的patch也会提升效果:

预训练计算量

结论:

  1. ViT在"性能/计算量"权衡上总体优于ResNet
  2. Hybrid在小算力预算下略优于纯ViT,但模型做大后优势消肖失
  3. ViT在实验范围内看起来还没"饱和":继续堆规模/算力还有上升空间

    其中Hybrid代表的意思是混合模型。

内部表征分析

分别对"Patch Embedding/位置编码/注意力范围"做了分析:

如果我们增加Patch效果会更好,但超参数对其学习影响会加深

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/26 10:19:12

Agent应用开发中渲染为何关键:从视图反馈到3D与卡通渲染

聊一个很多人不爱听的事实:Agent应用开发里最容易被忽视、也最容易翻车的地方,往往不在模型,而在渲染。我见过不少团队花三个月调Prompt、接知识库,最后把Agent塞进一个粗糙的聊天页面里,用户只觉得“这个东西不太聪明…

作者头像 李华
网站建设 2026/10/26 10:19:01

如何快捷打开python的idle

快捷打开IDLE的几种方法有很多, 这其中包括使用开始菜单这种方式, 也包括使用命令提示符这种方式, 还包括创建桌面快捷方式这种方式, 同时也包括配置环境变量这一种情况, 最后就是可以使用快捷键的方式。在这当中, 使用命令提示符是一种非常值得推荐的方法, 因为这种方法不仅很…

作者头像 李华
网站建设 2026/10/26 10:18:45

揭秘CPU核心:从指令周期到流水线革命

一、CPU 的功能和组成CPU 的功能 CPU 是计算机的核心部件,主要有五大功能:指令控制,按程序顺序完成取指、译码、执行;操作控制,依据指令译码产生各部件所需微操作控制信号;时间控制,为所有微操作…

作者头像 李华