当前位置: 首页 > news >正文

VIT

ViT(Vision Transformer)解析 - 知乎

15分钟认识ViT!【视觉Transformer】

知识蒸馏VIT

Training data-efficient image transformers & distillation through attention

这是一种专为 Transformer 设计的知识蒸馏(Knowledge Distillation)机制。

  • patch tokens: 原始图像被切分成的小图块(将图像序列化)。
  • class token(类令牌): 传统的 ViT 中就有的标记,专门用来汇总全局特征,最后用于预测这张图的真实分类。
  • distillation token(蒸馏令牌): 这是额外加入的一个可学习向量,目的只有一个:专门用来充当向老师学习的“海绵”。

在网络向前传播的过程中,所有的 tokens 会在每一层通过自注意力机制不断地进行信息交互。在这个过程中,distillation tokenclass token 会不断从 patch tokens 中提取有用的视觉特征,并且它们两者之间也会发生交互。在经过多层网络处理到达顶层后,模型兵分两路计算损失并进行梯度回传:

  • 左侧 \(L_{CE}\)​(交叉熵损失):class token 的最终输出负责去和图像的真实物理标签(Ground Truth)对齐。
  • 右侧 \(L_{teacher}\)​(蒸馏损失):distillation token 的最终输出则被强制要求去复刻教师模型(通常是一个性能很强的卷积神经网络 CNN,比如 RegNet)给出的预测结果。

传统的 Vision Transformer 非常“吃数据”,通常需要谷歌那种含有几亿张图片的私有数据集(JFT-300M)才能训练出好效果。纯 Transformer 架构天生缺乏卷积神经网络(CNN)那种对图像局部结构和平移不变性的感知能力(即归纳偏置)。论文指出,通过让蒸馏令牌去模仿 CNN 教师模型的输出,Transformer 能够隐式地继承这些有用的归纳偏置,从而大幅提升在较小数据集(如 ImageNet)上的学习效率和性能 。

归纳偏置就是模型在面对未见过的数据时,为了做出预测而提前做出的“预设假设”或“先验偏好”。CNN对图片进行的操作比如局部连接操作和最大池化操> 作等等相当于直接给图片定义了一些规则,这些规则并不需要模型去进行学习,所以CNN的训练比Transformer快得多。CNN的强偏置主要来自于:

  • 局部连接 (Local Connectivity / 感受野):
    • 在传统的多层感知机(MLP / 全连接网络)中,隐藏层的每一个神经元都要和输入图像的每一个像素相连。相比之下,CNN 引入了卷积核> (Filter)。一个神经元只与图像上一小块区域(比如 3x3 或 5x5 的像素块)相连。
    • 带来的归纳偏置:局部性 (Locality),图像中空间上相邻的像素具有极强的关联性,它们共同构成了基础的视觉特征(如边缘、线条、角点)。而相> 隔很远的像素(比如左上角的天空和右下角的草地)在底层的直接关联度很低。
    • 模型不再浪费算力去寻找全局像素的随机组合,而是被强制要求先从局部特征学起。
  • 权重共享 (Weight Sharing):
    • 在全连接网络中,哪怕是寻找同一种特征(比如垂直边缘),网络也需要在不同位置学习出无数套独立的权重。而在 CNN 中,同一个卷积核会像滑动窗> 口一样,在整张图像上共享同一套权重参数,遍历每一个位置计算特征。
    • 带来的归纳偏置:平移等变性 (Translation Equivariance):视觉特征具有空间平移独立性。也就是说,一只猫的耳朵无论出现在画面的左> 上角还是右下角,它的像素排列特征是一样的,可以用同一个“猫耳检测器”(卷积核)把它提取出来。
    • 极大地减少了模型的参数量,并且让模型学会了“举一反三”——在图像一角学到的特征,能直接识别图像另一角的同类特征。
  • 池化层 (Pooling Layers)
    • CNN 通常会在卷积层之后穿插池化层(如最大池化 Max Pooling),通过取局部区域的最大值或平均值,对特征图进行下采样降维。
    • 带来的归纳偏置:平移不变性 (Translation Invariance) 与 空间容忍度:特征的精确像素坐标并不重要,重要的是它大概在这个区> 域里出现了
    • 哪怕图像发生轻微的平移、缩放或形变,池化层依然能输出相似的特征表达,使得模型对物体的空间微小变化具有极强的鲁棒性。

self-attentionFNN部分展开如下图所示:

  • Self-Attention(多头自注意力层,MSA):假设当前层接收到的输入序列为 \(X \in \mathbb{R}^{N \times D}\)(其中 \(N\) 是令牌的总数,\(D\) 是嵌入维度)。网络会通过三个不同的线性变换矩阵 \(W_Q\)\(W_K\)\(W_V\),将输入 \(X\) 映射为三个矩阵 :
    • Query (查询矩阵 Q) = \(XW_Q\)
    • Key (键矩阵 K) = \(XW_K\)
    • Value (值矩阵 V) = \(XW_V\)
    • \(\sqrt{d}\) 是一个缩放因子,用于防止点积结果过大导致 Softmax 梯度消失 。

    \[\text{Attention}(Q, K, V) = \text{Softmax}(QK^T/\sqrt{d})V \]

  • FFN(前馈神经网络):自注意力层负责令牌之间的信息交互,而 FFN 则负责对每一个独立的令牌进行非线性特征变换。
    • 扩张: 第一个线性层将特征的维度从 \(D\) 放大到 \(4D\)
    • 激活: 应用 GeLU 非线性激活函数(\(\text{GeLU}(x) = x \Phi(x)\),比起 ReLU 更加平滑)。
    • 收缩: 第二个线性层将特征维度从 \(4D\) 重新降维回 \(D\)

\[\text{FFN}(x) = \text{GeLU}(xW_1 + b_1)W_2 + b_2 \]

为了让网络能够堆叠得非常深(DeiT-B 堆叠了 12 层)且易于训练,图中的 MSA 和 FFN 都是作为残差算子运行的,这得益于跳跃连接(skip-connections),并且它们都使用了层归一化(Layer Normalization) 。假设输入这个 Block 的特征为 \(x_{in}\),完整的运算路径如下:

  1. 先进行层归一化,再做自注意力计算,加上残差连接:\(x_{mid} = x_{in} + \text{MSA}(\text{LayerNorm}(x_{in}))\)
  2. 再次进行层归一化,做 FFN 计算,加上残差连接:\(x_{out} = x_{mid} + \text{FFN}(\text{LayerNorm}(x_{mid}))\)
  3. 这个 \(x_{out}\) 就会作为下一层 Transformer Block 的输入,继续重复上述过程。直到最后一层,网络才会提取类令牌和蒸馏令牌的输出,送入分类头计算 Loss。

VIT

NetVLAD: CNN architecture for weakly supervised place recognition

  1. patch embedding:例如输入图片大小为224x224,将图片分为固定大小的patch,patch大小为16x16,则每张图像会生成224x224/16x16=196个patch,即输入序列长度为196,每个patch维度16x16x3=768,线性投射层的维度为768xN (N=768),因此输入通过线性投射层之后的维度依然为196x768,即一共有196个token,每个token的维度是768。这里还需要加上一个特殊字符cls,因此最终的维度是197x768。到目前为止,已经通过patch embedding将一个视觉问题转化为了一个seq2seq问题
  2. positional encoding(standard learnable 1D position embeddings):ViT同样需要加入位置编码,位置编码可以理解为一张表,表一共有N行,N的大小和输入序列长度相同,每一行代表一个向量,向量的维度和输入序列embedding的维度相同(768)。注意位置编码的操作是sum,而不是concat。加入位置编码信息之后,维度依然是197x768
  3. (LN/multi-head attention/LN:LN输出维度依然是197x768。多头自注意力时,先将输入映射到q,k,v,如果只有一个头,qkv的维度都是197x768,如果有12个头(768/12=64),则qkv的维度是197x64,一共有12组qkv,最后再将12组qkv的输出拼接起来,输出维度是197x768,然后在过一层LN,维度依然是197x768
  4. MLP:将维度放大再缩小回去,197x768放大为197x3072,再缩小变为197x768
http://www.jsqmd.com/news/523785/

相关文章:

  • 这里藏着电力系统的核心评判指标
  • Gemini 3场景化应用指南:原生多模态与超长上下文能解决哪些实际问题?
  • 倒数第四天
  • InnoDB底层原理之MySQL的日志机制
  • Visual Place Recognition
  • 密码学学习记录
  • Go语言基础之数组
  • 世毫九实验室九大衍生理论课题与技术攻关方向(初审意见)
  • ai---openClaw 配置企业微信
  • CloudFlare域名接入与Nginx真实IP获取实战指南
  • LeetCode 234. 回文链表
  • 永磁同步电机FOC最小损耗算法
  • ESP32开发板国内镜像加速安装指南(附2023最新可用JSON地址)
  • 48个适合人力资源工作和运营的AI提示词
  • 基于MATLAB Simulink的PEM电解槽制氢仿真模型研究
  • 【认知雷达(Cognitive Radar)与深度学习融合架构】第5章 LSTM时序预测与多目标轨迹关联
  • 探索异构混合阶多智能体系统的一致性:UGV 与 UAV 的协同之旅
  • 51单片机初相识
  • 基于多因子定价模型解析:美元强势与利率预期重构驱动的金价8连跌机制
  • Cube MX实战:如何用STM32F系列和ADS1255构建高精度电流源(附完整代码)
  • 分布式驱动电动汽车:最优横摆力矩控制与规则扭矩分配控制的对比研究——基于LQR计算与最小附着利...
  • 聚焦镀锌管/角钢/方管/螺旋管,精选本土标杆企业,助力工程采购决策 - 深度智识库
  • Timer-S1 正式发布:首个十亿级时序基础模型,预测性能达到 SOTA
  • 从这8道Swift题逆袭大厂:2025最新类型系统考点精讲(含泛型实战)
  • 从干系人管理到项目交付:绩效域全流程避坑指南
  • SCN-Adaboost随机配置网络模型的多特征输入二分类及多分类模型实现
  • OpenClaw本地快速部署指南及主流AI模型API接入方法
  • 都在用 Java8 或 Java17,那 Java9 到 16 呢?他们真的没用吗?
  • VideoAgentTrek-ScreenFilter免配置环境:中文Web界面一键启动全流程
  • DeepSeek总结:JDK8-JDK22重要新特性