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

论文泛读:DYNAPROMPT: DYNAMIC TEST-TIME PROMPT TUNING(动态测试时调优)

本文作为泛读系列,大部分为AI生成,本意是帮助自己快速阅读理解论文思想同时进行记录,不喜欢AI文章的可以快速划走,或者查看论文精读专栏系列。

这篇论文是ICLR2025的一篇文章。

论文链接:https://arxiv.org/abs/2501.16404

代码链接:https://github.com/zzzx1224/DynaPrompt

这篇文章提出了DynaPrompt(动态测试时提示调优) 算法,核心思想是解决传统测试时提示调优 “忽略测试样本关联性” 或 “在线调优误差积累导致提示崩溃” 的问题,通过动态管理提示缓冲区,自适应筛选、优化、追加提示,在利用历史测试样本信息的同时减少误差积累,提升视觉语言模型(如 CLIP)的零样本泛化能力。

一、算法解决的问题:

在 DynaPrompt 之前,测试时提示调优(TPT)存在两大痛点:

1、独立调优的局限性

传统 TPT 为每个测试样本独立调优提示(从初始提示v₀重新开始),完全忽略了测试样本间的关联性,浪费了历史样本包含的测试分布信息。

2、在线调优的提示崩溃

在线 TPT 用前一个样本的优化提示初始化当前样本,虽利用了历史信息,但会因无真实标签引导的熵最小化目标积累误差,导致提示逐渐退化(“提示崩溃”),最终性能骤降(如论文图2中 Online TPT 准确率接近 0%)。

二、算法的核心思想:

DynaPrompt 的核心是一个可动态更新的提示缓冲区(Prompt Buffer),缓冲区存储历史优化后的有效提示。针对每个测试样本,算法通过 “筛选 - 优化 - 更新 - 预测” 四步实现动态调优,关键模块包括 “动态提示选择” 和 “动态提示追加”。

1、核心载体:提示缓冲区(Prompt Buffer)
  • 作用:存储一组在线学习的提示(记为VₙMₙ为缓冲区中提示数量,M为缓冲区最大容量,超参数设为 10),每个提示初始化为手工设计或预训练的v₀,并随测试样本动态更新。
  • 意义:不再依赖单个历史提示(如 Online TPT),而是通过缓冲区管理多组历史提示,为 “筛选相关提示” 提供基础,从源头减少单一提示的误差传递。
2、关键步骤 1:动态提示选择(筛选相关提示,避免崩溃)

针对当前测试样本xₙ,从缓冲区Vₙ中筛选 “既对当前样本有信心、又不过度自信” 的提示,核心是双指标筛选(预测熵 + 概率差),最终取两者的交集作为选中提示集Sₙ。

筛选指标计算逻辑筛选规则目的
预测熵(Entropy)基于提示vᵢxₙ及其增强样本的平均预测概率,计算熵D_ent(xₙ, vᵢ)选择D_ent(xₙ, vᵢ) ≤ D_ent(xₙ, v₀)(比初始提示v₀熵更低)熵越低,提示对当前样本的预测不确定性越小,包含更多相关分布信息
概率差(Probability Difference)计算提示vᵢ对 “原始xₙ” 与 “增强xₙ” 的预测概率差D_pro(xₙ, vᵢ)选择D_pro(xₙ, vᵢ) ≥ D_pro(xₙ, v₀)(比初始提示v₀差更大)差越大,提示对输入结构变化越敏感,避免 “过度自信”(如错误预测却低熵)

  • 筛选逻辑:选中的提示集Sₙ = Eₙ ∩ RₙEₙ为熵筛选子集,Rₙ为概率差筛选子集)。
  • 优势:既保证选中的提示与当前样本相关(低熵),又避免其因过度自信导致崩溃(高概率差),同时冻结不相关提示,避免冲突优化方向,减少误差积累。
3、关键步骤 2:动态提示追加(应对无合适提示,适应新分布)

当缓冲区中无符合条件的提示(Sₙ = ∅)时,触发动态追加机制:

  1. 追加初始提示:将初始提示v₀加入Sₙ(即Sₙ = {v₀}),避免被迫使用不相关 / 崩溃的历史提示。
  2. 缓冲区容量控制:若追加后缓冲区满(Mₙ = M),删除最不活跃的提示(缓冲区中最底部、最长时间未被选中的提示),平衡内存开销与信息有效性。
  • 意义:解决 “新分布样本无匹配历史提示” 的问题,让算法能自适应未知测试分布,同时防止缓冲区无限膨胀。
4. 优化与预测(基于选中提示,提升精度)
  • 提示优化:对选中的Sₙ,通过 “熵最小化” 目标优化(与传统 TPT 一致),更新为Ṡₙ,公式为:L_ent(Sₙ; xₙ) = -Σp(ŷ=c|Xₙ, Sₙ)log p(ŷ=c|Xₙ, Sₙ)Xₙxₙ的增强样本集,优化后提示Ṡₙ = Sₙ - α∇L_entα为学习率)
  • 样本预测:用更新后的Ṡₙ计算xₙ的预测概率,取概率最大的类别作为结果(argmax_c p(ŷ=c|xₙ, Ṡₙ))。
5. 缓冲区更新(维持有效提示池)

优化后的Ṡₙ会更新到缓冲区Vₙ,形成闭环:

  • Sₙ是追加的v₀(即Eₙ ∩ Rₙ = ∅):将Ṡₙ追加到缓冲区顶部,若满则删除最底部不活跃提示。

  • Sₙ是筛选出的历史提示:将Ṡₙ追加到顶部,同时从缓冲区中移除原Sₙ(避免重复存储)。

  • 目的:让缓冲区持续保留 “最新优化、与当前分布相关” 的提示,为后续样本提供高质量历史信息。

三、算法整体流程(简化)

  1. 输入:测试样本序列{xₙ}、初始空缓冲区V₀、初始提示v₀、缓冲区最大容量M
  2. 对每个测试样本xₙ:a. 生成xₙ的增强样本集Xₙ;b. 计算缓冲区中所有提示与xₙ的 “预测熵” 和 “概率差”,筛选出Sₙ;c. 若Sₙ为空,追加v₀Sₙ;d. 优化Sₙ得到Ṡₙ;e. 用Ṡₙ预测xₙ;f. 更新缓冲区VₙVₙ₊₁(加入Ṡₙ,删除冗余 / 不活跃提示);
  3. 输出所有xₙ的预测结果。

四、算法思想的核心亮点

  1. 自适应利用历史信息:不再 “盲目依赖前一个样本提示”(Online TPT),而是通过双指标筛选 “相关且安全” 的历史提示,最大化历史信息价值。

  2. 从根源减少误差积累:冻结不相关提示,避免冲突优化;无合适提示时用v₀重启,切断误差传递链,解决 “提示崩溃”。

  3. 动态适应新分布:通过提示追加和不活跃删除,让缓冲区随测试分布变化更新,提升对未知分布的泛化能力。

http://www.dtcms.com/a/506866.html

相关文章:

  • 做 58 那样的网站北京公司网页设计
  • PyTorch实战(9)——从零开始实现Transformer
  • 18.SELInux安全性
  • Layui连线题编辑器组件(ConnectQuestion)
  • 电影网站加盟可以做么网奇seo培训官网
  • 【Linux】Socket编程TCP
  • Debian编译Qt5
  • [3-03-01].第07节:搭建服务 - 服务重构cloud-consumer-ocommon
  • Ubuntu Certbot版本查询失败?Snap安装后报错终极修复指南(通用版)
  • Kafka底层解析:可靠性与高性能原理
  • 分布式链路追踪中的上下文传播与一致性维护技术
  • 为已有nextjs项目添加supabase数据库,不再需要冗余后端
  • 网站建设怎样上传程序微信网站搭建多少钱
  • rabbitmq在微服务中配置监听开关
  • 下一代时序数据库标杆:Apache IoTDB架构演进与AIoT时代的数据战略
  • k8s中的控制器
  • Blender入门学习02
  • 动态规划的“数学之魂”:从DP推演到质因数分解——巧解「只有两个键的键盘」
  • Blender入门学习01
  • 网站开发word文档精品简历模板网站
  • WrenAI:企业级AI数据分析平台技术解析
  • 【Processing】椭圆眼珠鼠标跟随
  • 工业显示器在矿用挖掘机中的应用
  • 济南企业网站开发网站建设域名
  • 【深度学习计算机视觉】14:实战Kaggle比赛:狗的品种识别(ImageNet Dogs)
  • 基于k8s的Python的分布式深度学习训练平台搭建简单实践
  • 网站服务器地址在哪里看前端工程师是做网站吗
  • 基于SpringBoot的环保行为记录与社区互动平台(Vue+MySQL)
  • 洛谷 P3392 涂条纹-普及-
  • 【 柒个贰航空旅游-注册安全分析报告-无验证方式导致安全隐患】