Zone of Proximal Policy Optimization: Teacher in Prompts, Not Gradients

(arxiv 2026)

motivation

目前在提升小型模型能力时,主要面临两种方法的局限性:

  • 知识蒸馏(Knowledge Distillation)的脆弱性: 知识蒸馏虽然能将教师的能力转移给学生,但在“小模型”体系下非常脆弱 。强制小型学生模型模仿大得多的教师模型的 logits,会使其过度集中在教师最尖锐的特征分布上,从而损害了模型在训练语料库之外的基准测试家族上的泛化能力 。
  • 强化学习(RL)的策略漂移: 强化学习通过在学生模型自己的生成结果(rollouts)上进行训练来避免模仿 logits 。然而,对于那些学生模型所有 rollouts 都失败的“困难问题”,由于优势(advantage)为零,这些样本会被默默丢弃 。如果在策略梯度中直接注入一个更强教师的正确回答作为补充,则会破坏 on-policy(同策略)的假设,并导致策略漂移(drift)。

方法

在标准的 GRPO 强化学习框架中,对于给定的问题 $x$,学生模型 $\pi_\theta$ 会生成一组数量为 $G_S$ 的回答(rollouts):

${y_S^{(g)}} _ {g=1}^{G_S} \sim \pi_\theta(\cdot|x)$

每个回答会获得一个基于结果的二元奖励 $r(x, y_S^{(g)}) \in {0, 1}$ 。接着,计算这组回答的平均奖励 $\overline{r}_x$ 和标准差 $std_x$。

GRPO 的核心是计算组内相对优势(Group-relative advantage)

$$A^{(g)} = \frac{r(x, y_S^{(g)}) - \overline{r}_x}{std_x + \epsilon}$$

致命缺陷: 当一个小模型遇到超出其当前能力的“困难问题”时,它的所有 $G_S$ 个回答可能全错,即 $\overline{r}_x = 0$ 且 $std_x = 0$ 。 代入公式可知,此时每一个回答的优势 $A^{(g)}$ 都严格为 $0$。优势为零意味着该问题无法提供任何梯度信号(Gradient Signal),导致模型在最需要学习的困难问题上完全学不到东西。

为了解决这个问题,ZPPO 定义“困难问题”为平均准确率低于一半的问题,即 $\overline{r}_x < 0.5$ 。

核心机制:提示重构 (Prompt Reformulation)

对于筛选出的困难问题 $x$,ZPPO 不会将强大的教师模型给出的正确答案直接塞进策略梯度(这会导致严重偏离同策略 on-policy 的假设 ),而是重构输入 Prompt。

首先,针对问题 $x$,冻结的教师模型 $\pi_T$ 会生成一组回答,保留正确的回答集合 ${y_T^{(+)}}$ 。为了防止学生模型利用长度等表面线索作弊,教师模型会将自己的正确回答和学生的错误回答压缩到 512 个 Token 以内 。

然后,并行构建两种特殊的 Prompt:

A. 二元候选问题 (BCQ, Binary Candidate-included Question)

如果该问题至少有一个正确的教师回答,BCQ 会随机抽取一个正确的教师回答 $y_T^{(+)}$ 和一个错误的学生回答 $y_S^{(-)}$ 。 这两个回答会被压缩、放入匿名的 <candidate> 标签中并随机打乱顺序 。学生模型必须在这个新的 Prompt 下重新生成一组回答:

$${y _ {BCQ}^{(g)}} _ {g=1}^{G_S} \sim \pi_\theta(\cdot|x _ {BCQ})$$

数学意义: 所有的响应 token 都是由当前的学生模型 $\pi_\theta$ 生成的,因此在响应级别上严格保持了 on-policy 。它强迫模型在内部进行逻辑判别,而不是直接模仿外部 logits 。

B. 负面候选问题 (NCQ, Negative Candidate-included Question)

NCQ 收集当前组中学生模型生成的所有错误回答 $y_S^{(-)}$,提取它们的最终答案,并在 Prompt 中明确列出:“以下答案全错:(解析出的错误答案)” 。 学生模型同样需要在这个包含自己历史错误记录的 Prompt 下重新采样:

$${y _ {NCQ}^{(g)}} _ {g=1}^{G_S} \sim \pi_\theta(\cdot|x _ {NCQ})$$

数学意义: 在普通的独立采样中,错误的 rollout 之间是互不可见的。NCQ 是在训练循环中第一次将学生独立的失败尝试汇聚成一个共享的纠错信号,引导模型避开已知的错误模式 。

3. 提示重放缓冲区 (Prompt Replay Buffer)

由于困难问题需要反复练习,ZPPO 引入了缓冲区 $\mathcal{B}$,专门用来放大 BCQ 和 NCQ 的效果。

  • 准入 (Admission): 当一个问题的常规 rollout 准确率 $\overline{r}_x < 0.5$ 时,该问题被存入缓冲区 。
  • 毕业 (Graduation): 在后续的训练步中,如果学生模型在该问题上的常规 rollout 准确率达到或超过一半($\overline{r}_x \ge 0.5$),说明该问题已经被掌握,随即将其移出缓冲区 。
  • 淘汰 (Eviction): 如果缓冲区达到容量上限,采用先进先出(FIFO)原则剔除旧问题 。
  • 动态采样: 每次从缓冲区中重放问题时,教师模型都会重新采样生成新的候选答案,保证学生模型每次复习时看到的 BCQ 候选项都是新鲜的,防止死记硬背 。

关键的强化学习训练细节

除了 Prompt 层面的创新,ZPPO 在底层 RL 算法上也做了极其关键的数学微调。

A. 排除零优势组的 Batch 归一化 (Norm w/o Zero)

ZPPO 使用了 REINFORCE++ 的两步优势估计法。

  • 第一步(组内去中心化):

    $$A _ {x,i}^{\prime(g)} = r(x,y^{(g,i)}) - \overline{r}_x$$

    此时,全对或全错的“平凡组(trivial groups)”的$A’$必然全是 0 。

  • 第二步(跨组归一化): ZPPO 强制规定,归一化时的标准差 $\sigma _ {\mathcal{S}}$ 只能在非平凡组 $\mathcal{G}^*$ (即 $std_x > 0$ 的组)上计算 。

为什么要这样做?

根据数学推导,如果把全 0 的平凡组包含进 Batch 的标准差计算中,会导致全局标准差 $\sigma _ {\mathcal{G}}$ 缩小。设非平凡组的比例为 $f _ {nt}$,包含 0 优势组的标准差会变成:

$$\sigma _ {\mathcal{G}} = \sqrt{f _ {nt}}\sigma _ {\mathcal{G}^*}$$

这会导致非平凡组的有效优势被错误地放大了 $\frac{1}{\sqrt{f _ {nt}}}$ 倍 。当学生模型很弱($f _ {nt}$ 很小)时,这种异常放大很容易把PPO的截断率推到极限之外,导致训练崩溃 。排除零优势组从根本上稳定了小模型的 RL 训练 。

B. 降低迭代次数 (Lower Iteration)

标准的 PPO/GRPO 通常每个步长迭代更新 16 次($I=16$)。但 ZPPO 发现,增加迭代次数会带来“同策略漂移(off-policy drift)”,因此 ZPPO 将迭代次数降低到 $I=4$ 。这一设置在减少漂移和训练效率之间找到了完美的平衡点 。


Zone of Proximal Policy Optimization: Teacher in Prompts, Not Gradients
https://lijianxiong.space/2026/20260622/
作者
LJX
发布于
2026年6月22日
许可协议