论文泛读: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. 动态适应新分布:通过提示追加和不活跃删除,让缓冲区随测试分布变化更新,提升对未知分布的泛化能力。

相关推荐
奈斯先生Vector8 分钟前
AI 视频不是会动的图片:用 Shot Contract、时间码与音画质检构建可交付流水线
人工智能·重构·架构·prompt·aigc·音视频
抱抱宝14 小时前
Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)
javascript·人工智能·gpt·react.js·prompt·agent
抱抱宝14 小时前
大模型应用开发教程08 | 构建完整 RAG 应用(Chroma/FAISS 实战)
人工智能·gpt·prompt·agent
AI分享猿1 天前
UI设计Prompt系列(十二):设计系统入门——把视觉语言沉淀为可复用规范
ui·prompt
tachibana21 天前
文件上传分布式限流如何做?
人工智能·ai·大模型·llm·prompt
AI分享猿1 天前
UI设计Prompt系列(十四):前端Agent协作——把UI设计意图转化为清晰执行上下文
前端·prompt
小白说大模型1 天前
OpenClaw 测试策略实战:AI Agent 自动化测试体系搭建与落地
人工智能·重构·开源·prompt·embedding
AI分享猿2 天前
UI设计Prompt系列(六):原型验证提速——用设计Prompt跳过反复改稿
ui·prompt
AI分享猿2 天前
App原型构思指南:如何用设计Prompt梳理移动端页面
prompt
邀星月为媒2 天前
高阶加餐 08|Prompt 故障定位与可观测性:模型突然变差时,别再靠“重新写一遍 Prompt”解决
服务器·数据库·prompt