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

相关推荐
智元视界19 小时前
农业AI化:如何让一台无人机懂得“看天种地”?
大数据·人工智能·prompt·无人机·数字化转型·产业升级
低调小一1 天前
从聊天记录到单一 Prompt:搞懂 Messages、Chat Templates、Special Tokens
人工智能·prompt
我太想进步了C~~1 天前
个人使用ai学习的学习框架搭建prompt版本
prompt
桃子叔叔1 天前
Prompt Engineering 完全指南:从基础到高阶技术深度解析
大数据·人工智能·prompt
桃子叔叔1 天前
Prompt Engineering完全指南:从基础到高阶技术实战
java·服务器·prompt
海底的星星fly1 天前
【Prompt学习技能树地图】LangChain原理及应用操作指南
人工智能·语言模型·langchain·prompt
子綦2 天前
Andrej Karpathy 推荐的 AI 读书法:我是如何结合“沉浸式翻译”啃动英文顶会论文的?(附 Prompt 模板)
人工智能·经验分享·prompt·学习方法
Psycho_MrZhang2 天前
生成书评Prompt
prompt
知难行难2 天前
修改 lm-evaluation-harness 任务 yaml 的 prompt
prompt
da_vinci_x2 天前
PS 3D Viewer + AI 生成:灰盒(Greybox)一键变“3A”概念图
人工智能·游戏·数学建模·3d·prompt·aigc·游戏美术