[2601.20802] Reinforcement Learning via Self-Distillation

这篇文章《Reinforcement Learning via Self-Distillation》(通过自蒸馏进行强化学习)提出了一种非常新颖且高效的大语言模型(LLM)强化学习后训练(Post-training)方法——SDPO(Self-Distillation Policy Optimization,自蒸馏策略优化)

该文章的核心出发点是解决传统强化学习中由于标量奖励(Scalar Reward)带来的“信用分配瓶颈(Credit-Assignment Bottleneck)”问题


一、核心痛点与创新点

1. 背景与痛点:RLVR 的局限性

目前主流的 LLM 强化学习方法(如 DeepSeek-R1 使用的 GRPO 算法)大多属于 RLVR(基于可验证奖励的强化学习)。在这种设定下,模型尝试解答一个问题,最后只能得到一个标量奖励(例如代码跑通了给 1,报错了给 0)。

  • 信用分配困难: 如果代码错了,模型并不知道是逻辑错了、语法错了,还是边界条件没考虑到。由于所有生成的 token 共享同一个负面奖励(Advantage),模型很难准确定位并纠正具体的错误。
  • 陷入死循环: 为了获得奖励,模型(如 GRPO)往往会倾向于生成极长、冗余的“伪思考”过程(如反复说“Hmm… Wait, let me think… I am going in circles”),而不是真正高效的推理。

2. 核心创新一:RLRF(基于丰富反馈的强化学习)

文章将传统的 RLVR 范式扩展为 RLRF(Reinforcement Learning with Rich Feedback)。在真实的代码或数学环境中,系统不仅仅返回 0 或 1,还会返回丰富的文本反馈(例如:具体的 Runtime Error 报错信息、测试用例的输入/输出对比等)。文章提出要直接利用这些丰富的文本反馈来指导模型学习。

3. 核心创新二:SDPO 算法与“自蒸馏”机制

为了利用这些丰富反馈,文章放弃了训练额外的高昂“奖励模型(Reward Model)”,也没有依赖更强大的外部模型(如 GPT-4)来做老师,而是提出让当前模型自己做自己的老师(Self-Teacher)

  • 机制: 利用 LLM 强大的上下文学习能力(In-context Learning)。如果把“题目 + 模型的错误解答 + 环境返回的具体报错反馈”一起作为上下文输入给模型,模型通常能够在事后(Hindsight)轻易发现自己当初犯的错,并知道该怎么改。
  • 自蒸馏(Self-Distillation): SDPO 将带有反馈上下文的模型视为“老师”,将没有反馈上下文的原始模型视为“学生”。通过强制“学生”的逐词预测概率(Logits)去拟合“老师”的预测概率,从而实现密集、词级别(Token-level/Logit-level)的信用分配

二、SDPO 算法详解

1. 算法流程

  1. 生成与反馈: 当前策略(学生) 根据问题 生成多个回答 ,并与环境交互获得结果。如果错误,获取丰富的环境反馈 (如报错信息)。
  2. 构建自教师(Self-Teacher): 将反馈 插入到提示词模板中(例如:“以下是你刚才失败尝试的反馈:[报错信息]…”)。此时,带有反馈上下文的模型 就是教师。
  3. 对齐 Logits(Logit-level Distillation): 让学生重新评估当初生成的回答 ,计算其下一步预测分布;同时让老师评估同样的 。SDPO 的损失函数是最小化两者分布之间的 KL 散度:
  4. 密集优势函数: 从策略梯度的角度看,SDPO 相当于给词表中的每一个可能的候选词都分配了一个独立的优势值(Advantage)。如果老师认为某个词比学生原本认为的概率更高,这个词的优势值就是正的,反之则是负的。

2. 算法实现的两个关键 Trick(见附录)

  • 节省显存(Top-K 蒸馏): 计算整个词表的 KL 散度太占显存。SDPO 只计算学生预测概率最高的 Top-K(如 100)个词的分布,其余的折算为一个“尾部概率”,从而几乎消除了额外的显存开销。
  • 稳定训练(Teacher Regularization): 因为老师和学生使用同样的权重 并在训练中不断更新,为了防止“老师”的判断力崩溃,SDPO 使用了指数移动平均(EMA)或信任区域(Trust-region)技术来平滑老师的权重更新。

三、核心实验结果与分析

文章在三种不同的设定下进行了极其详尽的实验:

实验一:在“无丰富反馈”的传统环境中的表现(第 3 节)

即便环境只能提供 1 或 0 的标量奖励(如科学问答、工具调用),SDPO 依然适用。此时,SDPO 将同批次(Batch)中其他 rollouts 的成功解答作为“反馈 ”提供给失败的尝试。

  • 结果对比: 在 Qwen3-8B 和 Olmo3-7B-Instruct 上,SDPO 在科学 Q&A 和工具调用任务上全面超越了改进版的 GRPO。在 Chemistry 任务上,SDPO 训练 1 小时的效果接近 GRPO 训练 5 小时的效果。
  • 关键发现 —— 拒绝“表面冗长”: SDPO 的生成长度比 GRPO 短得多(最高可缩短 11 倍),但准确率更高。 定性分析(图 7)发现,GRPO 会生成大量毫无意义的 Filler words(如 “Hmm”, “Wait”)并在逻辑中绕圈子;而 SDPO 得益于精准的词级别信用分配,推理过程极其简洁、切中要害。这打破了目前“要想推理强,输出必须长”的刻板印象。

实验二:在“有丰富反馈”的代码环境中的表现(第 4 节)

在 LiveCodeBench v6 (LCB) 上,环境提供了类似 LeetCode 的真实报错和测试用例反馈。

  • 性能飞跃: SDPO (48.8%) 显著超越了 GRPO (41.2%),并且只用了 GRPO 1/4 的生成步数就达到了 GRPO 的最终准确率。SDPO 的成绩甚至超过了当时 LCB 公开榜单上最强的指令模型 Claude Sonnet 4。
  • Scaling Law(涌现能力): 实验测试了 Qwen3 家族不同大小的模型。结果发现,SDPO 相比 GRPO 的优势随着模型规模的增大而急剧扩大。在很小的模型(如 Qwen2.5-1.5B)上,SDPO 甚至不如 GRPO。分析: 这是因为 SDPO 高度依赖基础模型的“上下文学习能力”。只有当模型足够大,能够根据报错信息“看懂”自己的错误时,自教师(Self-teacher)才能给出正确的指导。
  • 消融实验 —— 信用分配的粒度: 文章对比了 Logit-level(整个词表)、Token-level(只看生成的那个词)和 Sequence-level(平均到整个序列)的 SDPO。结果证明:粒度越细,效果越好 (Logit > Token > Sequence)。但即便只是 Sequence-level 的 SDPO,也比 GRPO 好,证明了“丰富反馈”本身的巨大价值。
  • 缓解灾难性遗忘: 作为 On-policy 方法,SDPO 在提升代码能力的同时,在 IFEval、ArenaHard 等保留任务(Holdout tasks)上的遗忘程度远低于使用监督微调(SFT)离线蒸馏老师的基线方法。
  • SDPO 与 GRPO 的结合: 对弱模型(如 0.6B),将 SDPO 和 GRPO 的优势函数按比例结合效果更好;但对强模型(8B),纯 SDPO 效果最好,说明当模型自纠错能力强时,标量奖励(GRPO)反而会引入噪音。

实验三:测试时计算(Test-Time Discovery)解决超难问题(第 5 节)

这一节是非常硬核的拓展。面对单道极难的题目(基础模型随机采样 64 次通过率 的题目),如何最快地找到答案?传统 RLVR 无能为力,因为在找到第一个正确答案前,奖励永远是 0,无法计算梯度。

  • 设定: 直接在测试阶段运行 SDPO 算法(Batch size = 16),让模型基于前次尝试的错误反馈当场更新自身权重。
  • 对比基线:
    1. Best-of-k(基础模型独立重复采样);
    2. Multi-turn(多轮对话:把之前的错误代码和反馈拼在 Prompt 里让模型重试)。
  • 惊人结果: SDPO 发现正确答案的速度比 Best-of-k 和 Multi-turn 快 3 倍。在极端困难的任务上,Multi-turn 因为陷入长文本注意力灾难和上下文窗口限制而停滞,而 SDPO 通过不断将反馈“压缩”进模型权重中,最终解决了多轮对话无法解决的问题(例如表 10 中的 Q3)。
  • 深刻洞察: 第一步的“自教师”直接给出正确答案的概率几乎是 0%(见附录表 11),但它提供的 Logit 级别的梯度方向是正确的。SDPO 不需要老师直接写出完美答案,只需通过反馈知道“当前这个词不对,那个词稍微好一点”,就能像爬山算法一样,通过多步迭代最终逼近正确答案。

总结

这篇文章的重大意义在于:它指出了过度依赖标量奖励的强化学习(RLHF/RLVR)是低效的,并巧妙地利用 LLM 自身的上下文理解能力打破了信用分配瓶颈。

SDPO 算法不需要外部判答模型,不需要复杂的价值网络(Critic),不需要外部超级模型(如 GPT-4)的监督,仅仅通过把环境的报错信息喂给模型自己做“事后诸葛亮”,再用蒸馏的方式纠正原始行为,就实现了:更快的收敛、更高的准确率、更精简清晰的推理过程,以及在测试时(Test-time)解决极难问题的破局能力。