通过自蒸馏增强基于评分标准的强化学习:CriPO

  • 关联论文:2607.18082
  • 作者:flyP
  • 更新:2026-08-03

一句话结论

CriPO(Criterion-Distilled Policy Optimization)针对基于评分标准的强化学习中两类长期被忽视的失败模式——未探索评分项(Unexplored Criteria, UC)被抑制评分项(Suppressed Criteria, SC)——通过 on-policy 自蒸馏同时求解,在医学和科学基准上以约 2× 步数 取得更强终态性能,且不引入训练/推理失配。

一、解决的真问题

基于评分标准的 RL(rubric-based RL,常见形式是 GRPO/RLOO 等对每条评分项独立给奖励后聚合)被视为提升大模型在开放式任务(医疗问答、科学推理)上的关键工具。然而其有效性的两根软肋长期未被同一框架联合处理:

  1. UC(Unexplored Criteria):某些评分项在任何 rollout 中都未被满足,于是永远拿不到梯度信号,模型"看不到"如何去满足它。
  2. SC(Suppressed Criteria):与 UC 完全相反——某些评分项被部分 rollout 满足,但其优势被标量奖励聚合后拉平到非正值,最终反向压制、归零,模型学会了忽略这些有用模式。

论文给出的诊断数据相当刺眼:在训练全过程中,超 57% 的样本表现出 SC 失败模式,每个样本平均 1.8 个被抑制项——这意味着大量"评分项级"监督信号实际上没传到策略上。

过去对 UC 的修补(如 rubric-as-hint 在 rollout 时注入评分信息)会引入训练/推理失配:训练时策略看 rubric 引导,推理时它并没有,导致自回归解码误差累积。CriPO 的设计目标是:同时修补 UC 和 SC,且全程不引入额外推理时输入

二、核心方法:on-policy 自蒸馏的双教师

CriPO 不引入外部 reward model 或偏好数据,只用当前策略自身的两个变体作为"教师"。其结构是 GRPO/RLOO 类的分组式 RL 框架上的一个插件式目标项:

2.1 对 UC:Criterion-Injection Self-Teacher + 前向 KL 注入

  • 构造教师:取当前策略 $\pi_\theta$,在 prompt 末尾显式拼入未探索评分项文本,得到一个"开了透视"的同源策略 $\pi_\theta^{\text{UC-teacher}}$。它和 $\pi_\theta$ 共享参数、仅 prompt 不同。
  • 蒸馏目标:在策略 $\pi_\theta$ 已经 rollout 出的整条轨迹 $y$ 上,对每个 token 计算 $\pi_\theta^{\text{UC-teacher}}$ 给出的分布,再加上一项局部化的前向 KL: $$ \mathcal{L}{\text{UC}} = \alpha_u \cdot \mathbb{E}{y \sim \pi_\theta}\big[\,\mathbb{1}{\text{token-of-interest}}\cdot \mathrm{KL}!\big(\pi\theta^{\text{UC-teacher}}(\cdot\mid x,y_{<t})\,\Vert\,\pi_\theta(\cdot\mid x,y_{<t})\big)\big] $$ "token-of-interest" 由 UC-teacher 的分布显著高于 $\pi_\theta$ 的位置筛出,确保只在它能给出有用信号的步上反向传给 $\pi_\theta$。
  • 关键性质:这一项只在训练时使用,推理 prompt 不变,自然避开 train-inference mismatch。

2.2 对 SC:Counterfactual Self-Teacher + Token 级优势翻转

  • 构造教师:把已 rollout 但整体被判为负优势的轨迹 $y^-$ 拿来,对其 prompt 加上被抑制评分项的描述,得到 $\pi_\theta^{\text{SC-teacher}}$。
  • 定位相关 token:用 $\pi_\theta^{\text{SC-teacher}}$ 重打整条 $y^-$ 的 token 概率,挑出与该评分项语义相关(如医疗语境下"安全性"提到的术语)的 token。
  • 优势翻转:把这些 token 的 token-level advantage 由负改正,其余 token 保持原 GRPO 优势。
  • 直觉:SC-teacher 告诉策略"这些位置其实应该是正的",于是被分数聚合压掉的有用模式被保留下来,不需要改 reward 形状。

2.3 总目标

$$ \mathcal{L} = \mathcal{L}{\text{GRPO}}(\theta) + \mathcal{L}{\text{UC}}(\theta) + \mathcal{L}_{\text{SC}}(\theta) $$

两项自蒸馏都是on-policy(教师即当前 $\pi_\theta$ 的副本),不需要额外训练成本,也不会随训练漂移导致 stale teacher。

2.4 伪代码(≈论文算法 1)

Input: prompt x, rubric list R = {r_k}, group size G, policy π_θ
for step in 1..N:
    # 1) 标准 GRPO rollout
    y_g ~ π_θ(·|x) for g=1..G
    A_g = normalize(reward(y_g, R))                  # 组内标量优势

    # 2) UC 修补:挑未探索项 R^uc ⊂ R
    π_θ^uc = π_θ clamped with prompt x ⊕ R^uc
    for t in y_g:
        if KL_target(π_θ^uc(·|x,y_<t) >> π_θ(·|x,y_<t)):
            L_uc += fwd_kl(π_θ^uc, π_θ)              # 只对相关 token

    # 3) SC 修补:对 A_g < 0 的轨迹 y^-,构造 π_θ^sc 注入被抑制项
    π_θ^sc = π_θ clamped with prompt x ⊕ r_suppressed
    for t in y^-:
        if token t 属于 r_suppressed 语义相关集:
            A_g[t] = +|A_g[t]|                      # 反号

    # 4) 聚合损失并更新
    L = L_grpo + α_u * L_uc + α_s * L_sc
    θ ← optim(L)

原文用 v1/v2 标注版本(v2 提交于 2026-07-21),具体超参 $\alpha_u,\alpha_s$、token 筛选器实现细节以正文为准。

三、关键实验与数据

论文实验集中于医学与科学开放问答场景(避免单纯多选刷分),主要数据点如下:

  • 基准:医学领域开放式问答 + 学科/科学问答基准(具体数据集原文未在 abstract 展开;从分类看属 cs.LG/cs.AI 通用 LLM 训练)。
  • 核心收益:CriPO 在最终 score 上稳定超过 vanilla rubric-based RL(GRPO/RLOO 这类基线),同时把达到同等水平所需的优化步数砍到约 1/2
  • 诊断指标
  • 全训练过程中 SC 占比 57% 样本,平均 1.8 个被抑制项/样本(说明这是结构性问题,不是偶发)。
  • 通过翻转 token-level advantage 后,被 SC 漏掉的有用片段被保留。
  • 比较对象:包含 rubric-as-hint 一类在 rollout 时注入评分信息的"探索补救"方法——这些方法改善了 UC 但引入 train/inference mismatch;CriPO 在不引入 mismatch 的前提下同时改善 UC 与 SC。
  • 效率:教师 = 当前策略的副本,无额外网络、无外部 RM,壁钟时间近似 GRPO。

数值上 abstract 只给出2× 步数57% / 1.8 两组关键比例;分 benchmark 的具体胜率、所用 base model 细节需查正文(原文未在 abstract 明示)。

四、亮点

  1. 把 SC 摆到台面上:之前几乎所有 rubric-based RL 工作都在讨论 UC、reward hacking、长度偏置,没人系统量化过 SC。论文给出一个干净的两类失败模式分类法。
  2. 不引入 train/inference mismatch:CriPO 不需要 rubric 在推理时出现,意味着可以直接接生产环境已部署的推理栈
  3. 教师零成本:on-policy self-distillation 的最大优点是教师与学生完全同参,无额外显存、无 stale risk,部署友好。
  4. 2× 步数是关键工程指标:在 RL 训练里 wall-clock 极其敏感,能砍一半步数等于几乎免费的提升。
  5. token-level 优势翻转作为对 SC 的修正是相当优雅的动作——只动 token 级 advantage,不改 reward 形状,兼容现有 GRPO 流水线。

五、局限与边界

  1. abstract 数值稀疏:57% / 1.8 是核心证据,但分任务细粒度胜率、所用 base model(如 Qwen2.5-7B / Llama-3-8B-Instruct / DeepSeek 系等)、训练硬件与 wall-clock 数字 abstract 都未明示,需读正文。
  2. token-of-interest 筛选器需要额外假设:前向 KL 选 "教师显著高" 的位置,需要一个阈值或策略,理论不复杂但工程细节是引入新超参的来源。
  3. SC 反号优势是否过补偿:把所有 token-level advantage 反号会引入新的偏置——若识别错了"语义相关 token",反向强化会强化错误模式。论文需要给出该筛选的稳健性证据。
  4. 未量化 scale-up:在更大模型(>70B)和更长 RL 轨迹下,token-level advantage 反号的方差如何、自蒸馏教师在同一 prompt 不同 trajectory 的稳定性如何,原文 abstract 未提。
  5. 未开源代码(abstract 未声明代码仓库),意味着复现门槛主要在 rubric 评分细则与 token 筛选器实现上。
  6. 评测域偏狭:主要在 medicine/science,是否在 coding/math/agent 这类 rubric 稀疏任务上仍有效,尚不确定。

六、对工程落地的启发

  1. 任何 rubric-based RL 流水线都可零侵入接入:你已经在跑 GRPO/RLOO?只需要在 loss 里加两项 $\mathcal{L}{\text{UC}}$ 和 $\mathcal{L}{\text{SC}}$;prompt 模板在训练时改,推理 prompt 不动——这是非常友好的部署特性。
  2. SC 指标应当成为标配:建议任何 rubric-based RL 实验都先打印"$<$样本级 SC 数$>$"和占比——论文已经证明这能解释 57% 样本的训练欠利用。
  3. token-level 优势翻转思想可移植到非 rubric 任务:任何"被聚合掉的有用动作"的诊断都可借鉴——例如长 CoT 推理中"推理风格被长度奖励压掉"的现象,可以套同样的 token 级反号。
  4. 少跑一轮半轮:abstract 的 2× 步数提升意味着 RL 训练的总 token 预算近乎减半,按当前 paper 里 RL 后训练的几百万美元计算,省一半已不是小数目。

七、与同方向工作的关系

  • LeWM / EP objective 类:rubric-as-hint 在 rollout 注入信息是当前主流 UC 修补路线(与本文同台比较);CriPO 是不引入推理 hint 的替代。
  • Self-Rewarding / Self-Play:传统 self-rewarding 用整个模型当 RM,CriPO 用prompt 变体当教师,更窄更可控。
  • Process Reward Model (PRM) / Token-level RM:PRM 也做 token 级打分,但需要单独的 RM 训练;CriPO 是零参数的 token-level RM 替代,代价是精度依赖 on-policy 教师。
  • RLOO / GRPO 系列:CriPO 是其上的插件损失项,不替换基础 RL 算法。

八、适合谁读

  • 用 GRPO/RLOO 训练开放域 LLM 的工程师(医学问答、科学问答、长 CoT)——直接受益。
  • 研究 rubric-based RL 失败模式的人——SC 是一个被忽视的诊断指标。
  • 做 RL 后训练效率优化的团队——on-policy 自蒸馏教师零成本,能白拿约 2× 步数收益。

九、不确定处(标注「原文未明确」)

  • 分 benchmark 的具体胜率与方差。
  • base model 选定、训练硬件、wall-clock 时间、token-level 筛选器算法细节。
  • 是否开源代码与评分细则。
  • 超参 $\alpha_u, \alpha_s$ 量级与 GRPO 基础超参的耦合关系。

工程落地与核查(Jay)

事实核查

  1. "不引入训练/推理失配"需精准理解:CriPO 的 UC-teacher 和 SC-teacher 构造时确实需要 rubric 信息(prompt 拼接评分项描述),因此训练时 rubric 必须存在。原文意思是不需要 rubric 出现在推理时的输入中——这点属实,但训练仍重度依赖 rubric 可获取。
  2. 57% SC / 1.8 suppressed criteria:这是论文最有力的实证发现,但原文未说明这是在哪个训练阶段测的(早期/末期/全程平均)。若是训练初期则意义不同——建议读者以正文 Figure 2 的时序图为准,判断 SC 占比是否随训练收敛而下降。
  3. "2× 步数"对应"更强终态性能":abstract 声称"更强终态 + 1/2 步数",但未说明是在哪个 checkpoint 比。若是最终 ckpt 达到相同 performance 需要一半步数,则确实效率翻倍;但若是每步效率不变、只是最后 ckpt 更高,则"2× 步数"说法存在误导(此时应理解为"相同步数下更强"而非"更快达到")。
  4. SC 翻转操作的语义筛选器是核心依赖:若筛选器把无关 token 误标为 rubric 相关,优势翻转会强化错误 pattern,形成 reward hacking 的新来源。原文的 token-of-interest / 语义相关集的具体实现细节缺失,这是复现的最大工程未知量。

可读性精修

  • 第 2.1 节 KL 散度符号方向:原文使用前向 KL($\mathrm{KL}(P|Q)$),即 $\pi_\theta^{\text{UC-teacher}}(\cdot|x,y_{<t}) | \pi_\theta(\cdot|x,y_{<t})$。这意味着教师分布高概率而学生低的 token 会被惩罚,而反向(学生高教师低)不受罚。这是合理的——只惩罚"老师说了学生没说",而不惩罚"学生说了老师没说"。表述上"前向 KL"应在正文中明确标注。
  • "UC 修补"与"SC 修补"在 loss 中的相对权重 $\alpha_u, \alpha_s$ 未给量级,建议在工程实现里先从 $\alpha_u=\alpha_s=0.1$ 开始(即 UC+SC loss 约为 GRPO loss 的 10%),再按 SC 占比变化趋势调参。

工程落地指南

接入现有 GRPO 流水线(以 VLLM/NeMo-Aligner 为例)

# 在 GRPO loss 基础上追加两项(约 30 行)
def cripo_loss(pi_theta, prompts, rubrics, groups, alpha_u=0.1, alpha_s=0.1):
    # 1) 标准 GRPO rollout
    rollouts = pi_theta.rollout_grouped(prompts, groups)  # [G, T]
    advantages = compute_grpo_advantages(rollouts, rubrics)

    # 2) UC loss:未探索项 prompt 注入
    uc_loss = 0.0
    for prompt, rubric in zip(prompts, rubrics):
        unexplored = [r for r in rubric if r not in rollout.coverage]  # 需实现 coverage tracking
        if unexplored:
            teacher_prompt = prompt + "评分标准:" + ";".join(unexplored)
            # 前向 KL,只对 token-of-interest(教师分布 >> 学生分布的位置)
            for t in range(T):
                kl_val = forward_kl(pi_theta_uc(·|teacher_prompt, y_<t),
                                    pi_theta(·|prompt, y_<t))
                if kl_val > threshold:  # 阈值需调
                    uc_loss += kl_val

    # 3) SC loss:被抑制项 token 级优势翻转
    sc_loss = 0.0
    for rollout, adv in zip(rollouts, advantages):
        if adv < 0:  # 负优势轨迹
            suppressed_rubrics = identify_suppressed(rubrics, rollout)
            for t, token in enumerate(rollout.tokens):
                if is_rubric_related(token, suppressed_rubrics):  # 语义分类器
                    adv[t] = abs(adv[t])  # 翻转
            sc_loss += grpo_token_loss(rollout, adv)  # 用翻转后 advantage 算 token loss

    return grpo_loss + alpha_u * uc_loss + alpha_s * sc_loss

主要工程坑与核查清单

  1. SC 语义分类器(最大工程风险): - "token 与 rubric 语义相关"的判断不能用规则(如关键词匹配),否则引入 keyword hacking。 - 正确做法:用 SC-teacher 重新 forward 得到 token 概率分布,取与原始 rollout 差异最大的位置(如前向 KL 最大的 top-k% tokens),或者训一个小型二元分类器。 - 建议:先用 cosine similarity between token embedding of y_t and rubric embedding of r_suppressed,阈值抓 top 20% 作为相关集。

  2. UC 未探索项的判定: - 需要在训练过程中追踪"哪些 rubric items 在本 group 内从未被满足"。 - 这要求 rubric grader 在 rollout 后返回 item-level 的通过/失败状态,而非仅返回标量 reward。 - 接口依赖:你的 grader API 必须支持 grade_item(prompt, response, rubric_item) -> bool/float

  3. 额外 forward pass 的计算开销: - UC 教师需对每个 prompt forward 多一次(含 rubric 拼接后);SC 教师需对负优势轨迹再 forward 一次。 - 实际 wall-clock 增加约 1.5-2× 单次 GRPO forward 的时间(而非 2×,因为 UC/SC teacher 共享权重,只需重新计算 attention)。 - 若用 vLLM 的 continuous batching,新增 1 次 teacher forward 等价于 batch size 加倍——对显存敏感场景需注意 batch size 调度。

  4. α_u / α_s 超参敏感性: - SC 反号直接改变 loss landscape,过大的 α_s 会让模型过度优化被误判为 rubric 相关的 token(尤其在 rubric 描述模糊时)。 - 建议先做 SC 诊断实验:不加 CriPO,只打印"当前 SC 占比"和"top-k 语义相关 token 的正确率",评估分类器精度后再开 SC loss。

  5. rollout group size G 的影响: - SC 只在负优势轨迹(adv<0)上做,若 G 太小(如 G=4),大部分轨迹都是负优势,导致 SC loss 主导训练。 - 建议 G≥8 保证正负样本比例可控。

  6. Rubric 具体化程度决定 SC 检测上限: - 若 rubric 描述模糊(如"答案要有帮助"),则"语义相关 token"无法准确定位,SC 翻转大概率引入噪声。 - 建议用细颗粒 itemized rubric(如"安全性:高;准确性:高;完整性:中"),每个 item 有明确的判别标准描述。

生产部署注意事项

  • CriPO 推理时无需 rubric 输入,不引入额外推理延迟。
  • 训练时的 rubric 文本拼接需注意 max_token 截断(rubric 文本可能较长),建议把 rubric 截断到 prompt 总长的 20% 以内。
  • 若训练多轮迭代,rubric 本身可能随评分标准迭代而变化——需要 rubric 版本管理机制。