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 在表面上很大程度是不可蒸馏的。
两个反直觉发现
- Invisible Advantage(不可见优势):skill 在 WebShop 上把成功率从 42.2% 抬到 56.2%,可它只改变了不到四分之一采样 token 的概率分布——大部分位置概率几乎纹丝不动。换句话说,绝大多数 token 在带不带 skill 时分布一样,那基于 token 级 KL 的蒸馏通道自然榨不出收益。
- 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。
整体分三步:
- GRPO 暖启动:先用标准 GRPO 跑一段时间,得到一个"能完成任务的 base policy"。
- Hindsight Skill 生成:对每条已采样轨迹,让 policy 自己回看一眼(hindsight)写一段"刚才这段轨迹如果事先知道这个 skill,本可以更稳"的自然语言 skill 描述。注意:不需要外部 skill 库,skill 由同一份 policy 在训练时动态生成。
- 双视图自蒸馏: - 教师视图 = 把这段 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):单一提交者放大了"未独立复现"的风险。
对工程落地的启发
- 把自蒸馏通道从"token 层"挪到"表征层"是通用套路。只要你能拿到一个特权视图(skill、tool 反馈、检索片段、critic 评语),就值得在 hidden state 层面做对齐,而不是死磕 token KL——本文两个反直觉数字(< 25% token vs > 80% hidden)就是通用经验。
- PR-OPD 是"零推理成本外挂"的范式:教师路径只存在于训练图里,且 stop-gradient;这条工程约束在工业部署里非常值钱。落地 RAG 重排器、Agent 工具选择头时,可以套同样的范式。
- 可解释 hook:linear probe 能定位"哪个 skill 激活了哪层",给可观测性 / 失败分析提供了新工具——比单纯看 attention 更稳定。
- 暖启动依赖:要部署得先跑通 GRPO baseline。如果团队还在"PPO 起不来"的阶段,PR-OPD 帮不上忙。
- 显存预算:每层投影矩阵 = 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 / 复现状态待补查。