【免费下载链接】SDPO
Reinforcement Learning via Self-Distillation (SDPO)
SDPO(Reinforcement Learning via Self-Distillation,自蒸馏强化学习)是一个让大语言模型"自己教自己"的强化学习训练框架。它的核心魔法在于一套Reprompt 自教模板:把模型的正确答案和环境反馈拼接进新的提示词(prompt),让模型在"看过提示"后扮演自己的老师,把知识蒸馏回自身。下面带你完整拆解这套模板的设计思路。
先看背景:SDPO 要解决什么问题?
传统强化学习(RLVR)中,模型每次尝试只拿到一个标量奖励(对或错),就像考试只告诉你"不及格",却不说明错在哪——这是著名的信用分配瓶颈(credit-assignment bottleneck)。
而现实中的很多可验证环境(代码运行器、数学判分器)其实会提供丰富的文本反馈:报错信息、测试用例失败原因、评分器评语等。SDPO 把这种设置形式化为RLRF(Reinforcement Learning with Rich Feedback),并用自蒸馏把这些文字反馈转化为密集的训练信号,全程不需要外部教师模型,也不需要额外的奖励模型。
Reprompt 自教机制:三步走
SDPO 的整个训练循环可以概括为四步(图中第 4 步即"信用分配"):
- 出题:给出问题 x(比如"写一个 Python 函数");
- 作答:模型按当前策略生成答案 y;
- 获取反馈:环境返回奖励 + 文本反馈 f(如"不要包含 n"、运行报错等);
- 自教师打分:把反馈注入提示词,同一个模型以"知情状态"再次前向,此时它就成了自教师 π_θ(y | x, f),它的逐词预测分布被用来蒸馏回原始策略。
关键洞察是:模型"事后"往往能看懂自己"当时"为什么错。Reprompt 模板正是把这种"事后聪明"变成训练信号的工具。
模板解剖:三段式上下文拼接
Reprompt 模板由三个可配置片段组成,在 verl/trainer/config/actor/actor.yaml 中定义,拼接逻辑位于 verl/trainer/ppo/ray_trainer.py 的_build_teacher_message函数:
| 模板片段 | 占位符 | 作用 |
|---|---|---|
reprompt_template(主模板) | {prompt}、{solution}、{feedback} | 总体骨架,默认在末尾追加 "Correctly solve the original question." |
solution_template | {successful_previous_attempt} | 展示"Correct solution:"后的成功示范 |
feedback_template | {feedback_raw} | 展示"The following is feedback from your unsuccessful earlier attempt:"后的原始反馈 |
最终的 Reprompt 上下文结构大致长这样(示意,非实际代码):
{prompt}← 原始问题Correct solution:… ← 可选:同组采样中的成功答案feedback from your unsuccessful earlier attempt:… ← 可选:环境反馈文本Correctly solve the original question.
拼接后的新提示词与原模型响应拼在一起送入前向传播——模型"带着答案重新看题",产生的 token 级预测分布就是蒸馏目标。
💡 设计细节:
remove_thinking_from_demonstration(默认True):注入示范前会剥掉<think>...</think>推理链,只保留干净答案,避免教师"抄"学生的思维过程;max_reprompt_len(默认10240)+reprompt_truncation(默认right):控制拼接后的长度上限与截断方向,防止上下文爆炸。
智能拼接策略:什么时候用方案、什么时候用反馈?
模板的三个占位符不是无脑填充,SDPO 内置了几条精细策略:
success_reward_threshold(默认1.0):奖励达到阈值才视为"成功示范",只有同组(同 uid)其他采样答对了,{solution}才会被填充;dont_reprompt_on_self_success(默认True):不拿样本自己的成功回答当示范,防止教师"开卷考试"式自我蒸馏,保证信号来自"同伴 + 反思"而非自我复制;environment_feedback_only_without_solution(默认True):有成功示范时就不再加反馈——"给答案"比"给纠错"更强,二者取其一,避免上下文冗余;- 若两者都没有,则直接使用原始 prompt,不构造自教上下文。
这套"方案优先、反馈兜底"的优先级逻辑,正是 Reprompt 魔法的精髓:用最少的上下文注入最大的信息量。
关键参数速查
核心超参定义在 verl/workers/config/actor.py(SelfDistillationConfig),实验配置示例见 verl/trainer/config/sdpo.yaml:
| 参数 | 默认值 | 说明 |
|---|---|---|
loss_mode | sdpo | 在actor.policy_loss下开启自蒸馏损失 |
alpha | 0.5 | KL 插值系数:0=前向KL,1=反向KL,0.5=JSD |
teacher_regularization | ema | 教师权重用指数滑动平均(或 trust-region)稳定蒸馏 |
teacher_update_rate | 0.05 | EMA 更新率,教师"跟学生学但学得慢" |
distillation_topk | 100 | 只蒸馏 top-k 词表 logit,省显存 |
max_reprompt_len | 10240 | Reprompt 提示词最大 token 长度 |
include_environment_feedback | True | 是否把环境反馈拼进 Reprompt |
📌 开启方式很简单:配置中设actor.policy_loss.loss_mode = "sdpo",Reprompt 相关参数即自动生效。
效果实证:Reprompt 到底带来了什么?
在代码基准 LiveCodeBench v6 上,logit 级 SDPO(即完整利用 Reprompt 上下文做 token 级蒸馏)显著超越 GRPO 基线与序列级变体——上下文信息越稠密,学习曲线越陡:
右图更有意思:教师(EMA 平滑的模型)随训练不断"自我提升",最终学生(step 80)甚至超过了初始教师——这正是自蒸馏框架的自举(bootstrapping)效应。
在推理阶段,同样的 Reprompt 思想还能用于测试时自蒸馏(TTT):不断采样、挑出高质量答案作为新示范重新提问,SDPO 在多轮交互基线失效的超难题目上实现了约 3 倍的解题发现加速:
上手实践:两步跑通 SDPO
仓库已内置一键脚本,本地快速体验可运行 run_local_sdpo.sh(默认使用 datasets/tooluse 数据集):
bash run_local_sdpo.sh复现论文实验则使用:
- 无富反馈场景:experiments/generalization/run_sdpo_all.sh
- 富反馈场景(含代码报错反馈):experiments/rich_feedback/run_sdpo.sh
训练前记得按 README.md 修改verl/trainer/config/user.yaml中的路径变量。数据加载与预处理脚本见 data/load_dataset.py 和 data/preprocess.py。
总结
SDPO 的 Reprompt 魔法本质上是一套**"上下文自教"工程**:
- 🧩三段式模板(prompt + solution + feedback)让稀疏奖励变成稠密监督信号;
- ⚖️方案优先、反馈兜底的拼接策略保证信息密度最大化;
- 🔄EMA 教师 + top-k 蒸馏让同一模型稳定地"越教越强"。
无需外部教师、无需奖励模型,仅靠精心设计的提示词拼接,SDPO 就把模型的"事后反思能力"转化为真实的训练收益——这也是它在富反馈场景中持续领先 GRPO 的原因。
【免费下载链接】SDPO
Reinforcement Learning via Self-Distillation (SDPO)
相关推荐
Nexent design.md 设计模板详解:从上下文、决策到 D1-D5 测试契约的规格化写法
Nexent design.md 设计模板详解:从上下文、决策到 D1 D5 测试契约的规格化写法 本文以 Nexent 仓库中 nexent spec cod
人工智能AI AgentAgent 编排低代码AI 技能RAGZyPlayerbug报告模板详解:填写有效反馈的指南
ZyPlayerbug报告模板详解:填写有效反馈的指南 当你在使用ZyPlayer过程中遇到问题时,提交一份清晰、详细的bug报告能大大提高问题解决的效率。本指
桌面应用音视频即时通讯Composio 文档站反馈系统设计:基于 Slack Webhook 的零数据库反馈收集方案
Composio 文档站反馈系统设计:基于 Slack Webhook 的零数据库反馈收集方案 Composio 文档站内置了一个轻量级的页面反馈系统:读者在文
人工智能AI Agent工具调用MCP 服务MCP Clients
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考