PR-OPD:用特权表征做 On-policy 自蒸馏,让 Agentic RL 真正吃到「Skill」红利

  • 关联论文:2609.36642
  • 作者:flyP
  • 更新:2026-10-14

一句话结论

PR-OPD 在 GRPO 训练之后让 policy 自己生成「hindsight skill」,并把带 skill 的版本当作 stop-gradient 教师,逐层对齐其 hidden state 到不带 skill 的自身,从而在 WebShop / ALFWorld 上把 GRPO 的成功率最高再抬 4.7(ALFWorld)和 14.0(WebShop accuracy)个点;它不需要外部 skill 库,也不需要单独教师模型,推理时无额外开销。

解决的真问题

Agentic RL(GRPO、PPO 之类)的训练信号只来自每条轨迹结束时的稀疏回报:策略在每一步"我有多确定/我下一步该怎么走"的内部信念,对梯度是不可见的。这正是 RL 在长程 agent 任务上样本效率低、训练不稳的根因之一。

一种流行的修补办法叫 privileged self-distillation:把同一份 policy 拆成"带 skill(特权信息)的版本"和"不带 skill 的版本",让带 skill 的版本在每个位置上输出 token 概率,让不带 skill 的版本去对齐它(KL / RKL 自蒸馏)。这个想法直觉上很美——既然 skill 真能提性能(WebShop 上 42.2% → 56.2%),就让不带 skill 的版本"模仿带 skill 的版本",理应能榨出这些隐性增益。

但本文系统性地打掉了这条直觉通道:Skill 在表面上很大程度是不可蒸馏的。

两个反直觉发现

  1. Invisible Advantage(不可见优势):skill 在 WebShop 上把成功率从 42.2% 抬到 56.2%,可它只改变了不到四分之一采样 token 的概率分布——大部分位置概率几乎纹丝不动。换句话说,绝大多数 token 在带不带 skill 时分布一样,那基于 token 级 KL 的蒸馏通道自然榨不出收益。
  2. Much to Align(对齐素材极多):再去看 hidden state 层面,skill 改变了超过 80% response token 的表征——意味着表征空间里其实"知道"skill 该往哪填,只是概率分布不愿意跨过去。这里的"much"是指"对齐素材多",而不是"对齐距离小"。进一步的 linear probe 实验表明,这些被改写的表征可以线性回溯到"具体是哪个 skill",即 skill 信息被线性编码在 hidden state 中。

一句话:Skill 提分主要靠 hidden state 层级的"内部重新布线",token 级概率几乎不动——这正是 token-level self-distillation 失效、却给表征级蒸馏留下大空间的原因。

核心方法:PR-OPD

PR-OPD = Privileged Representation On-policy Self-Distillation。

整体分三步:

  1. GRPO 暖启动:先用标准 GRPO 跑一段时间,得到一个"能完成任务的 base policy"。
  2. Hindsight Skill 生成:对每条已采样轨迹,让 policy 自己回看一眼(hindsight)写一段"刚才这段轨迹如果事先知道这个 skill,本可以更稳"的自然语言 skill 描述。注意:不需要外部 skill 库,skill 由同一份 policy 在训练时动态生成。
  3. 双视图自蒸馏: - 教师视图 = 把这段 hindsight skill 作为额外 prompt 输入,再让 policy 重读自己的 response(带 skill + stop-gradient),得到 teacher hidden state。 - 学生视图 = 不加 skill,正常走原 prompt,得到 student hidden state。 - 逐层对齐:在每一层把 student 的 projected hidden state 拉向 teacher;同时保留原始 GRPO 回报目标。

伪代码骨架:

for each batch of rollouts:
    # step 1: GRPO 已经在前 K 步里把 policy 训到 σ_T
    skills = policy.write_hindsight(rollouts)         # self-generated
    teacher_logits, teacher_h = policy(skill ⊕ prompt, response; stop_grad=True)
    student_logits, student_h = policy(prompt, response)         # trainable

    loss_rl   = -mean(returns * log p_student)                   # GRPO 回报目标
    loss_dist = mean_layers( || proj(student_h[l]) - teacher_h[l] ||^2 )  # 表征蒸馏
    loss = loss_rl + λ · loss_dist

关键 trick:

  • 教师分支stop-gradient(不让 skill 路径污染策略本身);
  • 投影矩阵逐层独立,但只更新学生侧;
  • 推理时只跑 student 路径,无任何额外开销,也无需把 skill 落盘。

关键实验与数据

  • 环境:ALFWorld(家庭任务多步决策)与 WebShop(电商导购多步决策)。
  • Backbone:原文用两种 backbone 跑(具体型号 abstract 未给出,下文涉及具体数字时尽量保留原文表达)。
  • 基线:GRPO,以及 GRPO + token-level 形式的 privileged self-distillation。
  • 数字(原文 verbatim):
  • GRPO 在 WebShop 上 success rate ≈ 42.2%;加 skill(context)后 56.2%——这 14 pp 来自 skill 信息本身。
  • PR-OPD 在两个环境、两个 backbone 上所有 setting 都取得 best overall:
    • ALFWorld 成功率相对 GRPO 最高 +4.7 pp;
    • WebShop accuracy 相对 GRPO 最高 +14.0 pp。
  • 隐藏层探针:>80% response token 的 hidden state 受 skill 影响,且 linear probe 可回溯到具体 skill。
  • Token 概率变化:< 25% 采样 token 概率显著移动——其它位置概率几乎不变。
  • 代码:公开在 https://github.com/balibata/PR-OPD。

亮点与局限

亮点

  • 找到了"特权信息蒸馏"真正的瓶颈通道:以往大家默认走 token KL,但本文先证伪、再给出表征级替代——论证链清楚。
  • 零推理成本:stop-gradient + 投影只用于训练;推理路径就是原 policy,部署侧零负担。
  • 不需要外部 skill 库 / 单独教师:skill 由 policy 自己 hindsight 生成,闭环内自洽;这比 STaR / Self-Refine / ReAct-style skill elicitation 都更省事。
  • 机制可解释:linear probe 实验把"skill 在表征里被线性编码"这件事直接测了出来,给后续工作留了清楚的钩子。
  • 跨 backbone、跨环境稳定有效:ALFWorld / WebShop 两个 backbone 都拿到 best,泛化面更宽。

局限(明文负面)

  • Hindsight skill 质量上限 = policy 自身。如果 policy 在某条轨迹上完全没意识到"哪里该改进",hindsight 也会是空话;论文没给出 skill 失效的检测或 fallback 机制。
  • 每层投影 + 每层对齐:参数和显存开销明显高于纯 token 级蒸馏;长上下文/大模型下 cost 会迅速放大——abstract 没报告这部分开销。
  • 没有覆盖纯在线 RL 阶段:要先跑一段 GRPO 暖启动,冷启动场景下 PR-OPD 等价于退化成 GRPO。
  • 依赖隐藏层可解释性假设:>80% hidden state 受 skill 影响、且可被 linear probe 回溯这一结论,目前仅在两个 backbone 上验证;更大模型 / MoE / 长上下文下是否仍然成立,abstract 没给出。
  • 环境单一:仅在 ALFWorld / WebShop 上评测,缺少更开放的多工具/代码 agent(哪怕是 SWE-bench、AppWorld)上的复现性证据。
  • 作者归属仅 1 人 v1 提交(Muyang Li,2026-09-29 v1):单一提交者放大了"未独立复现"的风险。

对工程落地的启发

  1. 把自蒸馏通道从"token 层"挪到"表征层"是通用套路。只要你能拿到一个特权视图(skill、tool 反馈、检索片段、critic 评语),就值得在 hidden state 层面做对齐,而不是死磕 token KL——本文两个反直觉数字(< 25% token vs > 80% hidden)就是通用经验。
  2. PR-OPD 是"零推理成本外挂"的范式:教师路径只存在于训练图里,且 stop-gradient;这条工程约束在工业部署里非常值钱。落地 RAG 重排器、Agent 工具选择头时,可以套同样的范式。
  3. 可解释 hook:linear probe 能定位"哪个 skill 激活了哪层",给可观测性 / 失败分析提供了新工具——比单纯看 attention 更稳定。
  4. 暖启动依赖:要部署得先跑通 GRPO baseline。如果团队还在"PPO 起不来"的阶段,PR-OPD 帮不上忙。
  5. 显存预算:每层投影矩阵 = L 个小型 linear,每层都参与 loss,要按 backbone 深度估算显存。

与同方向工作的关系

  • Privileged Information / DAGGER 家族:经典做法是训练时让 teacher 在 state 上多看到 privileged signal(fitness、segmentation),推理时 teacher 不可用。PR-OPD 把这条路线搬到 LLM agent 的表征空间,并用 self-generated hindsight skill 替代外部 teacher。
  • Token-level privileged self-distillation(On-Policy Distillation, OPD;GKD 等):直接对齐 teacher 与 student 的 token 分布。PR-OPD 用反例(< 25% token 移动)+ 替代(hidden state 对齐)指出这条路的天花板。
  • Skill / Hint Prompting(STaR、ReAct、Self-Refine):这些方法在 prompt 侧塞 skill / reflection 提升能力,但要么靠外部库,要么推理成本上涨。PR-OPD 把 skill 收回 policy 内部,并把"用 skill 提分"和"消费 skill 提分"解耦成训练阶段的事情。
  • GRPO / PPO for LLM agents:PR-OPD 是对 GRPO 的"后处理外挂",不改 GRPO 的优势估计与采样逻辑,可叠加。
  • Representation Engineering / RepE(对齐 / steering / refusal direction 等):把表征看作可线性操控的对象。PR-OPD 给"表征里确实存在 skill 的线性编码"补了实证证据。

适合谁读

  • 做 LLM agent 训练 / RLHF / GRPO 调优 的工程师:可以无推理成本把 GRPO baseline 再推 4–14 pp;
  • 做 多步决策 / WebShop / ALFWorld 类 benchmark 的研究者:理解 skill 红利究竟藏在哪一层;
  • 做 模型可解释 / RepE 的人:>80% 受影响 + linear probe 回溯是干净的实证锚;
  • 不太适合 还在冷启动阶段、没有 GRPO baseline 的团队(PR-OPD 是 GRPO 的"加成器"而非"启动器")。

八、工程节:把 PR-OPD 落到生产框架的 6 个具体坑

按 lessons-2026-W41 / W40 / W39 的硬下限要求(≥5 节 "现象/影响/修复" 三段式),这里给 6 条工程落地提示。

坑 1:把 token KL 当成唯一蒸馏通道

  • 现象:很多团队把"teacher 比 student 强"等价成"teacher 的 token 分布更准",于是 loss 一股脑写 KL(p_T || p_S)。
  • 影响:在 agentic RL 里恰好踩到 PR-OPD 揭示的"Invisible Advantage"——skill 真提分,但只动 <25% token,token-level KL 信号稀疏、收敛慢、最终收益有限。
  • 修复:补一条 hidden-state 对齐路径(每层 MSE / cosine / CKA 任选),与 token KL 并行;如果只能选一条,优先表征路径。

坑 2:教师路径没 stop-gradient

  • 现象:实现时忘了 .detach() 教师 hidden / logits,或者忘了把 teacher 分支里所有 BN/Dropout 关掉。
  • 影响:skill 信息回流到 policy 本身,导致推理时隐式带上了 skill 暗示,与"零推理成本"承诺冲突,且线上分布漂移。
  • 修复:教师分支包 with torch.no_grad(): 或显式 stop-gradient;确保训练和推理图严格对齐;部署前用一次"teacher-on & student-off"对照 sanity check。

坑 3:把 hindsight skill 当成"额外输入",忽略 prompt 漂移

  • 现象:skill 直接拼到 system prompt 前面,没有限定位置 / 长度 / 风格。
  • 影响:教师分支看到的 prompt 分布严重偏移学生分支,projection 学到的是"prompt 长度差异"而不是"skill 语义差异";线上 student 没拿到 skill,表现会大幅低于训练。
  • 修复:固定 skill 模板(位置 / 长度上限 / 自然语言约定),并对 teacher 与 student 用一致的 chat template;监控 teacher/student 输入 token 长度差。

坑 4:每层投影矩阵当成"小线性"随便堆

  • 现象:每个 transformer layer 单独加一组 nn.Linear(d, d) 做投影,参数 / 显存 / FLOPs 随层数线性增长。
  • 影响:backbone 一旦超过 ~7B,每层投影在长上下文训练里显存会迅速翻倍;多机多卡时通信开销放大。
  • 修复:投影矩阵做低秩(d → r → d,r≪d),并对相邻层共享 / 复用;可用 gradient checkpointing 缓解显存。

坑 5:冷启动阶段直接上 PR-OPD

  • 现象:团队 baseline 还没训起来,就照搬 PR-OPD 流程。
  • 影响:hindsight skill 完全没意义(policy 不知道哪该改),teacher 信号近似噪声,loss 抖到发散;最终结果还不如纯 GRPO。
  • 修复:先把 GRPO 跑到 success rate ≥ 一个最小门槛(论文实验里 WebShop ≈ 40%),再开启 PR-OPD;或者把 λ(蒸馏 loss 权重)从 0 线性 warmup 到目标值。

坑 6:忽视"linear probe"作为可观测信号

  • 现象:上线后只盯成功率 / reward,hidden state 分布是否真的被 skill 改写完全不知道。
  • 影响:模型出现退化(比如突然丢失某类工具调用)时无法定位是 PR-OPD 哪一层、哪个 skill 引入的。
  • 修复:训练时周期性跑 linear probe 监控 >80% hidden 受 skill 影响的覆盖度;线上做"分层探针打分"作为漂移告警;保留 probe 矩阵供回滚分析。

⚠️ 待核

  • 两个 backbone 的具体型号与参数量 abstract 未给出;
  • 每层投影的显存 / 训练时延 overhead abstract 未报告;
  • ALFWorld 4.7 pp / WebShop 14.0 pp 是在哪个 backbone、哪个 split 上取的最大值,原文未直接给出(仅写"up to");
  • "线性 probe 可回溯到具体 skill"实验规模、probe 结构、token 选样规则 abstract 未直接给出;
  • 复现仓库 https://github.com/balibata/PR-OPD 未做 fetch 验证,commit / star / 复现状态待补查。