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

视觉提示调优:一种高效的Transformer迁移学习新方法 - 仅需1%参数实现超越全量微调的性能

视觉提示调优:一种高效的Transformer迁移学习新方法 - 仅需1%参数实现超越全量微调的性能

    • 论文大纲
    • 理解
      • 1. 确认目标
      • 2. 分析过程
      • 3. 实现步骤
      • 4. 效果展示
      • 5. 领域金手指
    • 观察
      • 观察
      • 假设
      • 核心想法:
      • 具体预测:
    • 解法拆解
    • 提问
    • 深层提示能处理更复杂的任务

论文:Visual Prompt Tuning

代码:https://github.com/kmnp/vpt

论文大纲

├── 视觉提示调优【研究主题】
│   ├── 研究背景【问题背景】
│   │   ├── 大规模预训练模型的适应问题【现状】
│   │   └── 全量微调的局限性【挑战】
│   │       ├── 存储开销大【具体问题】
│   │       └── 部署成本高【具体问题】
│   │
│   ├── VPT方法【核心方案】
│   │   ├── 浅层变体【技术方案】
│   │   │   └── 仅在第一层添加可学习参数【实现方式】
│   │   └── 深层变体【技术方案】
│   │       └── 在每层都添加可学习参数【实现方式】
│   │
│   ├── 技术优势【方法特点】
│   │   ├── 参数高效性【优势一】
│   │   │   └── 仅需不到1%的参数量【具体表现】
│   │   ├── 性能优异【优势二】
│   │   │   └── 超越全量微调20/24个任务【具体表现】
│   │   └── 适应性强【优势三】
│   │       └── 支持多种视觉任务【具体表现】
│   │
│   └── 实验验证【评估验证】
│       ├── 数据规模实验【验证维度】
│       │   └── 低数据场景下表现更好【实验结果】
│       ├── 模型规模实验【验证维度】
│       │   └── 随模型规模增长优势保持【实验结果】
│       └── 多任务验证【验证维度】
│           └── VTAB基准上性能优异【实验结果】

理解

  1. 背景与问题
  • 类别问题:大型预训练模型在下游任务上的适应性问题
  • 具体问题:
    • 传统全量微调需要存储每个任务的完整模型参数(例如 ViT-Huge 有632M参数)
    • 存储和部署成本高昂,在实际应用中难以实现
    • 现有参数高效方法性能不及全量微调
  1. 概念性质
    VPT是一种参数高效的迁移学习方法
  • 性质来源:
    • 只在输入空间添加少量可学习参数(<1%)
    • 保持预训练模型主体参数冻结不变
    • 每个任务只需存储少量特定参数
  1. 对比例子
  • 正例:在VTAB基准测试中,VPT使用不到1%的参数量就超越了全量微调20个任务的性能
  • 反例:传统方法如Linear、Adapter等虽然也是参数高效,但性能明显低于全量微调

在这里插入图片描述
火的部分 是 微调部分。

  1. 类比理解
    VPT就像给模型戴上了一副任务特定的"眼镜"
  • 预训练模型是人的视觉系统(保持不变)
  • 可学习提示就像眼镜(少量参数)
  • 不同任务就像不同场景,只需更换"眼镜"而不是改变整个视觉系统
  1. 概念总结
    VPT是一种在视觉Transformer模型输入空间添加可学习参数的方法,通过冻结预训练模型参数,仅训练少量任务特定参数来实现高效迁移学习。

  2. 概念重组
    视觉提示调优是一种在视觉模型中,通过添加提示参数来调优模型性能的方法。

  3. 关联性
    与论文主题直接相关,是解决大模型适应性问题的创新方案。

  4. 规律发现

  • 原则:保持模型主体不变,仅在输入空间调整
  • 立场:参数效率与性能的平衡
  • 方法:可学习提示的添加与训练
  • 主要矛盾:如何用最少的参数达到最好的性能
  • 次要矛盾:实现复杂度、训练效率等
  1. 功能分析
  • 核心功能:实现模型在新任务上的高效适应
  • 量化指标:
    • 参数效率:<1%的额外参数
    • 性能提升:超过全量微调的准确率
    • 存储节省:比例为1:100
  1. 脉络梳理
  • 背景:大模型适应性问题
  • 挑战:全量微调存储开销大
  • 提出:VPT方法
  • 验证:多任务实验
  • 结果:证明有效性
  1. 创新点
  • 技术创新:首次在视觉模型输入空间引入可学习提示
  • 性能创新:超越全量微调的表现
  • 效率创新:显著降低参数存储需求
  • 应用创新:扩展到多种视觉任务

在这里插入图片描述
比较VPT与Linear、Adapter和Bias方法的性能。

在这里插入图片描述
让我详细解释一下这张图:

这是一个关于prompt位置选择的消融实验(ablation study),分为上下两部分:

上半部分展示了4种不同的prompt添加策略:

  1. Prepend (default):默认方式,在embed层后直接拼接prompt
  2. Add:将prompt直接加到输入特征上
  3. Prepend-pixel:在像素级别添加prompt
  4. Concat-channel:在通道维度上拼接prompt

下半部分是实验结果,分为三组数据:

  • VTAB-Natural (7):自然图像任务,共7个
  • VTAB-Specialized (4):专业领域任务,共4个
  • VTAB-Structured (8):结构化视觉任务,共8个

每组实验包含:

  • Full:全参数微调的基准性能
  • VPT-Deep:深层提示调优结果
  • VPT-Shallow:浅层提示调优结果
  • Linear:线性探针基准

结果分析:

  1. 默认的Prepend方式表现最好,在所有任务上都优于其他位置选择
  2. Add方式次之,但性能略有下降
  3. 像素级别(Prepend-pixel)和通道级别(Concat-channel)的效果明显较差
  4. 括号中的数字表示相比Full fine-tuning获胜的任务数量

蓝色虚线代表默认VPT-Deep和VPT-Shallow的性能,用作参考基准。

这个实验证明了prompt添加的位置对模型性能有显著影响,在embed层后直接拼接是最优选择。

1. 确认目标

如何在保持高性能的同时,降低视觉Transformer模型在下游任务适应时的参数开销?

2. 分析过程

层层分解的问题:

  1. 如何减少参数量?

    • 保持主干网络参数冻结
    • 仅在输入空间添加少量可学习参数
    • 避免修改模型内部结构
  2. 如何确保性能?

    • 设计深层和浅层两种变体
    • 在每层或首层添加可学习提示
    • 通过梯度优化更新提示参数
  3. 如何扩展到不同任务?

    • 为每个任务训练特定的提示参数
    • 共享相同的预训练模型主体
    • 仅存储任务相关的少量参数

3. 实现步骤

  1. 预处理阶段

    • 准备预训练的Transformer模型
    • 冻结模型主体参数
    • 初始化可学习提示参数
  2. 训练阶段

    • 将提示与输入图像特征拼接
    • 仅更新提示参数和分类头
    • 保存最优提示参数
  3. 推理阶段

    • 加载预训练模型和任务特定提示
    • 执行前向传播得到预测结果
    • 复用模型主体降低存储开销

4. 效果展示

  • 目标:实现参数高效的模型适应
  • 过程:通过可学习提示调优
  • 问题:全量微调存储开销大
  • 方法:VPT(深层/浅层变体)
  • 结果:超越全量微调性能
  • 数字:
    • 参数量减少99%
    • 24个任务中20个超越基线
    • VTAB基准上显著提升

5. 领域金手指

VPT方法的"金手指"是:在输入空间添加可学习提示

这个方法可以解决多个问题:

  1. 图像分类任务适应
  2. 语义分割任务
  3. 细粒度识别
  4. 结构化预测
  5. 特定领域任务(如医疗影像)

关键优势:

  • 不改变模型架构
  • 参数量极小
  • 性能优异
  • 通用性强
  • 易于实现

这种方法为视觉Transformer模型的高效适应提供了一个通用解决方案,可以广泛应用于各种视觉任务中。

观察

让我按照观察-假设-验证的方法来分析这篇论文:

观察

不寻常的现象

  1. 作者注意到现有参数高效方法普遍性能不如全量微调
  2. 在NLP领域,提示学习取得了很好的效果
  3. 视觉领域尚未探索类似的参数高效方法

关键变量

  1. 参数量的变化:从全量参数到不到1%的参数
  2. 性能的变化:某些任务上超越了全量微调
  3. 提示位置的变化:输入空间vs模型内部

假设

核心假设

  1. 在视觉Transformer的输入空间添加可学习提示,能实现高效的任务适应
    • 原因:输入空间的修改可以影响整个模型的行为
    • 理由:与NLP中的提示学习类似,但针对视觉特点进行了调整

具体推测

  1. 浅层提示足以捕获简单任务的特征
  2. 深层提示能处理更复杂的任务
  3. 输入空间的调整比内部参数更新更有效

核心想法:

作者认为:在图像进入模型之前就给它加上一些可以学习的"提示信息",就能让模型更好地适应新任务。

  • 原因:就像人看图片时,给个提示词就能快速找到重点一样
  • 借鉴:这种方法在语言处理中已经证明很有效,现在把它改造用在图像上

具体预测:

  1. 简单任务,加个简单提示就够了(就像认识猫狗,给个"这是什么动物"的提示就行)

  2. 复杂任务需要在多个层面都加提示(就像理解艺术画,需要从构图、色彩等多个角度给提示)

  3. 在一开始就给提示,比中途改来改去更有效(就像看图前先告诉你要找什么,比看到一半再提示更好)

这些观察和假设就像是作者的"灵光一闪":既然给人看图片时加个提示这么有效,为什么不给AI也加个"提示"呢?

解法拆解


VPT方法的两种变体概述

(a) VPT-deep:在每个Transformer编码器层的输入添加可学习参数
(b) VPT-shallow:仅在第一层的输入添加可学习参数

 

VPT解法 = Shallow-VPT + Deep-VPT

Shallow-VPT(仅在第一层添加prompt):

  • 因为需要最小化额外参数量
  • 适用于简单的下游任务

Deep-VPT(在每层添加prompt):

  • 因为复杂任务需要更强的表达能力
  • 适用于需要更细粒度特征提取的任务

举例:对于图像分类任务,如果是简单的二分类问题可以用Shallow-VPT,如果是细粒度识别这样的复杂任务则需要Deep-VPT。

提问

让我基于论文内容逐一回答这些问题:

Q1: 为什么我们需要参数高效的迁移学习方法?
A1: 根据论文第1页的介绍,主要有两个原因:

  1. 现代Transformer模型规模越来越大(如ViT-Huge有632M参数,远超ResNet-50的25M)
  2. 传统的full fine-tuning需要为每个下游任务存储完整的模型参数副本,这在实际部署中成本过高且常常不可行

Q2: VPT方法是如何在保持性能的同时实现参数压缩的?
A2: 根据第5页的描述,VPT通过以下方式实现:

  1. 仅在输入空间添加少量可学习的prompt参数(不到1%的参数量)
  2. 保持预训练模型backbone完全冻结
  3. 每个任务只需存储对应的prompt和分类头参数

Q3: 在添加prompt时,为什么要选择输入空间而不是其他位置?
A3: 根据第20页的消融实验结果显示:

  • 在输入空间添加prompt允许更容易学习到浓缩的任务相关信号
  • 在像素级别或通道维度添加prompt会导致性能显著下降(下降幅度可达30个百分点)

Q4: Deep-VPT和Shallow-VPT的设计初衷是什么?
A4: 根据第5页的描述:

  • Shallow-VPT针对参数效率优化,仅在第一层添加prompt
  • Deep-VPT为了获得更强的表达能力,在每层都添加prompt
    这两种设计代表了参数效率和模型性能之间的权衡

Q5: 为什么VPT在某些情况下能超过全参数微调的性能?
A5: 根据第7-8页的实验分析:

  1. VPT提供了一种更聚焦的任务适配机制
  2. 在低数据场景下,VPT的参数量少反而起到了正则化作用
  3. Prompt机制可能帮助模型更好地激活和利用预训练知识

Q6: prompt的长度如何影响模型性能?
A6: 根据第10页的ablation study:

  • prompt长度是唯一需要手动调整的超参数
  • 即使只有一个prompt,VPT-deep仍然显著优于其他baseline
  • 不同任务的最优prompt长度不同,需要在验证集上选择

Q7: 为什么自监督预训练模型上的效果不如监督预训练?
A7: 根据第13页的分析,这可能是因为:

  • 自监督预训练模型学到的特征表示与下游任务的差异更大
  • 监督信号的缺失使得prompt更难以激活相关的预训练知识

Q8: VPT对CNN效果有限的原因是什么?
A8: 根据第14页的讨论:

  • CNN缺乏类似Transformer的全局注意力机制
  • CNN的局部感受野特性使得添加location-invariant的prompt变得困难
  • 现有的prompt设计更适合Transformer架构

Q9: 如何理解VPT中的参数共享机制?
A9: 根据第19页的实验:

  • 可以在层内或层间共享prompt参数
  • 层内共享(Shared-intra)性能接近使用单个prompt
  • 层间共享(Shared-inter)在某些情况下甚至可以超过默认设置

Q10: prompt的初始化策略为什么重要?
A10: 根据第19-20页的分析:

  • 出人意料的是,随机初始化比基于类别原型的初始化效果更好
  • 这说明prompt的作用机制可能比预想的更复杂
  • 初始化策略影响训练的收敛性和最终性能

Q11: VPT的计算开销增加是否值得?
A11: 根据第25页的实验:

  • 理论上MSA的复杂度与序列长度成平方关系
  • 但实际测试中,翻倍的序列长度只导致约2倍(而非4倍)的计算开销
  • 考虑到性能提升和存储节省,这个开销是可以接受的

Q12: 如何评估prompt机制的可解释性?
A12: 根据第11页和第21页的分析:

  • 通过t-SNE可视化最后一层[CLS]的embedding
  • 观察不同任务间的特征分布差异
  • 分析prompt如何影响模型的特征提取过程
  • 但总体来说,prompt机制的可解释性仍然有限,需要更深入的研究

Q1: 论文中称VPT显著优于其他参数高效方法,但在13页Table 4显示,对于MAE预训练模型,Partial-1方法在多个指标上优于VPT。这是否说明VPT的优势并不像声称的那么显著?

A1: 确实,在MAE预训练模型上,Partial-1表现更好。但这恰恰验证了一个重要发现:不同的预训练范式可能需要不同的迁移学习策略。VPT的优势主要体现在监督预训练模型上,这也启发我们未来可以设计更适合自监督预训练模型的prompt机制。

Q2: 在25页Table 12中,当prompt长度p=200时,相比full fine-tuning,VPT的推理延迟从69.7ms增加到140.8ms,内存消耗也翻倍。这种计算开销的增加是否会限制VPT在实际场景中的应用?

A2: 您提出的是个很好的观点。确实,当prompt长度较大时计算开销显著增加。但我们在论文中也提出了VPT-prefix优化方案,可以显著降低计算开销。而且实践中,较小的prompt长度(如p=50)通常就能取得不错的效果,此时开销增加是可控的。

Q3: 论文第7页称VPT在低数据场景下表现特别好,但这是否意味着VPT实际上只是在利用prompt作为一种正则化机制,而不是真正学到了任务特定的知识?

A3: VPT确实具有正则化效果,但这不是全部。通过t-SNE可视化分析(第11页),我们发现VPT学到的特征表示展现出更好的类别可分性,这表明它确实学到了任务相关的有效特征。

Q4: 在9页Table 2显示,对于Swin架构,full fine-tuning在多个指标上仍然优于VPT。这是否说明VPT的效果高度依赖于模型架构?

A4: 您说得对,VPT在Swin上效果确实不如原始ViT架构理想。这主要是因为Swin的层次化结构和局部注意力机制与prompt设计的初衷有所冲突。这也提醒我们需要为不同架构设计更专门的prompt机制。

Q5: 论文在13页提到对于ConvNets的实验,prompt的设置方式"seems unconventional"。这是否表明VPT缺乏对CNN架构的理论支撑?

A5: "unconventional"确实反映了理论基础的不足。我们承认当前的VPT主要针对Transformer架构设计,对CNN的适配还需要更深入的理论研究。这也是未来工作的重要方向。

Q6: 在21页的可视化分析中,为什么只选择了少于20个类别的任务进行t-SNE可视化?是否是因为VPT在类别数较多时的表现不够理想?

A6: 选择少类别任务进行可视化主要是出于可视化效果的考虑,并非因为性能问题。在Table 1中可以看到,VPT在类别数较多的任务(如Sun397)上也取得了很好的表现。

Q7: 论文第13页提到VPT在自监督预训练模型(MAE, MoCo v3)上的效果不如监督预训练。这是否暗示VPT依赖于预训练过程中的监督信号来构建有效的prompt?

A7: 这个观察很准确。监督信号确实有助于形成更好的特征表示,使得prompt更容易找到相关的知识激活点。这也提示我们需要深入研究如何更好地利用自监督预训练的特征。

Q8: 在19-20页的prompt初始化实验中,为什么随机初始化反而比基于类别原型的初始化效果更好?这是否说明prompt的工作机制与论文的假设不符?

A8: 随机初始化效果更好确实出乎意料,这说明prompt的工作机制比我们想象的更复杂。这个发现促使我们重新思考prompt的本质作用,可能不仅仅是特征选择,还包括特征重组和转换。

Q9: 论文没有详细讨论prompt长度选择的理论依据,似乎是经验性地进行选择。这种做法在新任务上如何保证prompt长度的最优选择?

A9: 确实,目前prompt长度的选择较为经验性。我们在附录中提供了不同长度的详细ablation study,可以作为实践指导。未来我们计划研究自适应长度选择机制。

Q10: 在25页的实验中,VPT-prefix实现方式可以显著降低计算开销但性能相当。这是否说明论文采用的默认实现方式存在冗余计算?

A10: VPT-prefix实验确实揭示了计算效率优化的空间。但默认实现方式的优势在于其通用性和实现简单性,而且便于进行实验分析。在实际部署时,可以根据具体需求选择更高效的实现方式。

深层提示能处理更复杂的任务

让我尝试层层深入分析"深层提示能处理更复杂的任务"这一现象:

  1. 表面现象:
  • 根据论文实验结果,Deep-VPT在复杂任务上表现明显优于Shallow-VPT
  • 例如在细粒度分类任务(FGVC)和结构化视觉任务(VTAB-Structured)上,Deep-VPT的性能提升更显著
  • 数据显示Deep-VPT在20/24个任务上超过了全参数微调
  1. 第一层分析(直接原因):
  • Deep-VPT在每一层都添加prompt,提供了更多的参数和更强的表达能力
  • 多层prompt允许模型在不同层次上调整特征提取过程
  • 实验显示深层prompt对早期层的特征提取影响更大
  1. 第二层分析(深层原因):
  • Transformer网络中的每一层都承担不同的特征提取功能
  • 浅层主要处理低级视觉特征(如边缘、纹理)
  • 深层负责提取高级语义特征(如物体部件、场景构成)
  • 多层prompt能够同时调制这些不同层次的特征提取过程
  1. 第三层分析(更深层原因):
  • 视觉认知本身是一个层次化的过程
  • 复杂任务需要模型能够灵活地组合和利用不同层次的视觉特征
  • 单层prompt难以同时影响所有层次的特征提取和整合过程
  1. 第四层分析(系统性原因):
  • 神经网络的表达能力受其结构和参数的约束
  • 深层网络的每一层都形成了特定的特征空间
  • prompt实际上是在重塑这些特征空间,使其更适合目标任务
  1. 第五层分析(根本原因):
  • 复杂任务本质上需要多层次、多尺度的特征表示和处理能力
  • 这种需求与神经网络的层次化学习原理密切相关
  • 单一层面的调整无法满足复杂任务的多维度需求

总结与解决方案:
根本原因:复杂视觉任务的层次化特性要求模型具备多层次的特征处理和调整能力。

可能的解决方案:

  1. 自适应prompt分配:根据任务复杂度自动决定在哪些层添加prompt
  2. 层间prompt交互:设计允许不同层prompt之间信息交换的机制
  3. 动态prompt更新:在训练过程中动态调整prompt的分布和数量
  4. 任务感知prompt:根据任务特性自动调整prompt的结构和参数

这种多层次的分析揭示了Deep-VPT的工作原理,并为进一步改进提供了理论基础。


http://www.kler.cn/a/460542.html

相关文章:

  • 高频java面试题
  • Nginx - 整合lua 实现对POST请求的参数拦截校验(不使用Openresty)
  • 三维场景重建3D高斯点渲染复现
  • 微信小程序 覆盖组件cover-view
  • Ubuntu下安装Android Sdk
  • 大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!
  • css绘制圆并绘制圆的半径
  • Docker部署-WebsiteGuide
  • 低空经济新动力:无人机航测技术的普及与应用
  • 企业赋能是什么意思-国际数字影像产业园解读
  • Java开发 PDF文件生成方案
  • 开源前端框架都有哪些
  • cmake always build
  • 开源AI智能名片2+1链动模式O2O商城小程序在流量留存与转化中的深度应用与优化策略
  • RabbitMQ基础篇之Java客户端 Work Queues
  • 电子电气架构 --- 什么是自动驾驶技术中的域控制单元(DCU)?
  • 【Paper Tips】随记1-word版打印公式
  • Mesh网格数据结构2-半边结构
  • 32. 找最小数
  • 集成开发环境——keil c51 和 keil mdk的安装及融合
  • 【详解】AndroidWebView的加载超时处理
  • 【YashanDB知识库】sys登录提示账户被锁,怎么处理?
  • 【AUTOSAR 基础软件】Can模块详解(Can栈之驱动模块)
  • 深入了解 Zookeeper:原理与应用
  • 小白投资理财 - 看懂 EPS 每股收益
  • Windows11 的开发