一句话: 让打分的裁判先开会查证据再落笔, RM 自己变成会调工具的 agent。
动机RLVR 的奖励来源太杂: 规则脚本、参考答案、checklist、rubric 评分各自一套, 混训时彼此打架。
切入点把"算 reward"这件事抽象成一组 agentic skill, judge 模型像 agent 一样自选证据、调工具、最后聚合成一个标量分。
怎么读: 左边四类异质证据进来, 中间 judge 自己挑该走哪条路, 右边三类 reward skill 各打一个分, 加权后变成单一标量 r 喂给下游 RL。
统一接口每个 skill 都是 (prompt, response, evidence) → (score, rationale, tool_trace)。judge 用函数调用风格调外部 verifier / Python / 检索, 等于给 RM 套了一层 ReAct 推理框。
三类 skill 分工fair: 屏蔽 benchmark 元数据, 防 judge 沿训练记忆"抄答案"; operational: 放开校验器, 专攻代码/数学这类硬指标; instruction_following: 单查格式约束、长度、禁用词。
下游接入聚合后的 r 直接接 verl + GRPO, 在 VerInstruct 上做 RFT (Reinforcement Fine-Tuning)。
$$ A_i \;=\; \frac{r_i - \mathrm{mean}(\{r_j\}_{j=1}^G)}{\mathrm{std}(\{r_j\}_{j=1}^G)},\qquad r_i \;=\; \sum_k w_k\,\mathrm{skill}_k(x, y_i) $$怎么读: 一组 skill 各自打分后加权得到 ri, 再在同 prompt 的 G 条 rollout 内做 z-score 归一拿到优势 Ai。组内均值取代 critic, 省一个大模型。
结果在 VerInstruct 上跑 GRPO, 相比单一 rule/GT 奖励, 在数学/代码/指令遵循混合 benchmark 上稳定提升; fair 子 skill 明显压住 reward hacking——不再靠"撞数据集名"骗分, 训练曲线比 verl 默认 PPO 更稳, reward 突崩明显减少。
一句话: 开局先憋出一段"打算"当隐变量, 后面每个动作都条件在它上面, strategy 和 action 各自做组内 z-score, 两层 GRPO 一起拧。
动机纯反应式 agent 每步只盯当前 observation, 没有轨迹级规划。后果是探索发散、同一种错反复犯, credit 也分不清是"思路烂"还是"手抖"。
解法直觉把"思路"显式拎出来当一个可采样的变量 z, 让策略变成"先想再打", 而不是边走边想。
① strategy 当高层 option开局先采一段紧凑的自然语言"打算" $z \sim \pi^{\text{strat}}(\cdot \mid s_0)$, 后续动作都条件在它上: $a_t \sim \pi^{\text{act}}(\cdot \mid s_t, z)$。这就是 RaaS(Reasoning-as-Strategy, 把推理当成可采样的隐变量, 而不是混在 CoT 里的副产物)。
② 分层 GRPOGRPO 在这里切两层: 上层在 K 个 strategy 之间比, 下层在同一 strategy 下的 N 条 rollout 之间比。
$$ A^{\text{strat}}(z_k) = \frac{\bar R_k - \mathrm{mean}_j(\bar R_j)}{\mathrm{std}_j(\bar R_j)}, \quad \bar R_k = \frac{1}{N}\sum_{n=1}^{N} R(\tau_{k,n}) $$怎么读: $\bar R_k$ 是第 k 套打法平均能拿几分, 再把 K 套打法做 z-score。"想得对"的 strategy 在这一层被推上去, 跟执行无关。
$$ A^{\text{act}}(\tau_{k,n}) = \frac{R(\tau_{k,n}) - \bar R_k}{\mathrm{std}_n(R(\tau_{k,\cdot}))} $$怎么读: 在同一 z_k 内部, 用本组均值当 baseline 再 z-score。执行得稳的那条被拉上来——这一层只考核手感, 不替思路背锅。
③ 防塌缩 + 自我反思采样时显式拉开 K 个 strategy 的语义距离, 防止 K 条打法塌缩成同一句废话。
反思回灌每轮训完, 让模型对失败的 strategy 写一段"重来怎么改"的批判, 作为下一轮 strategy 采样的 prior 塞回 prompt——不当 RM 用, 只做条件。
奖励来源走 RLVR 这一路, 不用 PRM, 落地省事。
结果SWE-bench / WebArena / ALFWorld 三个 agentic benchmark 上一致打过纯 GRPO 基线: 成功率 +6~12pp, 平均交互轮数 −25%(思路先想清楚就少走弯路)。Ablation 砍掉 strategy 层退化成普通 GRPO, 大半提升消失; 砍掉自我反思, 样本效率明显塌。
一句话总结strategy 不是 CoT 换皮, 关键是它作为隐变量被独立采样、独立算优势, credit 才能分到"思路"这一层。
一句话: 4B 小模型当"调度导演",专家全冻结,它只负责喊"这场戏谁上、走哪个套路"。
动机单一巨型 LLM 配死调用链,吃不下多专家在数学/图表/视觉上的互补。但把"挑模型 + 挑 skill"全摊开,动作空间又爆炸到没法 RL。
破法分层。让一个小策略只学"挑组合",不学"造工具"。
分层动作空间编排器面前是两张菜单: 上面一张列出所有冻结专家 (谁来干), 下面一张列出所有 skill (用哪一招)。每步两张菜单各点 1 项, 组合起来就是一个动作。
为什么这么设计对比让 LLM 自己生成 "我现在想 OCR 一下" 这种自由文字: 自由文字理论上无穷多种写法, RL 无从下手。改成菜单选择 (例: 4 专家 × 5 skill = 只有 20 个可能动作), 动作空间一下子可枚举, RL 才学得动。
$$ a_t = (m_t, s_t) \sim \pi_\theta(\,\cdot \mid o_t),\quad m_t \in \mathcal{M}_{\text{frozen}},\; s_t \in \mathcal{S}_{\text{atomic}} \cup \mathcal{S}_{\text{composite}} $$怎么读: 每一步, π_θ 看了观测 o_t 之后, 从冻结专家集合 𝓜 里抽一个 m_t (谁干), 同时从 skill 集合 𝓢 (含 atomic 和 composite 两类) 里抽一个 s_t (干什么), 这俩组成动作 a_t。整个采样过程只是在两张 dropdown 菜单里各按一下。
Outcome-based RL只用最终任务对错当 reward,中间专家调用一概不打分——避免给冻结专家硬造伪标签。优化用 GRPO。
$$ \mathcal{L}(\theta) = -\mathbb{E}_{\tau\sim\pi_\theta}\Big[\sum_{t} \log \pi_\theta(a_t\mid o_t)\cdot \hat{A}(\tau)\Big],\quad \hat{A}(\tau)=R(\tau)-\overline{R}_{\text{group}} $$怎么读: 一条轨迹的 advantage = 它的最终 reward 减掉同组平均。赢了就放大整串 (model, skill) 选择,输了就压。不用 PRM,省一大笔标注。
零样本插专家因为接口是 (model_id, skill_id) 这种符号,新专家挂进注册表就能用,πθ 不重训也能在推理时把它纳入候选。
什么时候要重训想榨干新专家就跑一轮短 RL 微调编排器,专家权重一动不动。代价: 当专家池规模变化大时,组合分布漂移,advantage 估计需要重新校准。
结果多模态 benchmark(MathVista、ChartQA、视觉推理混合集)上,4B 编排器 + 冻结专家池整体准确率高于"所有专家融成一个大 SFT 模型"的强基线;新专家加入无需重训编排器即可拿到增量收益,验证组合爆炸下小策略仍可学。
一句话: 让"干活的脑"和"写skill的脑"共用一份权重, skill被 solver 用爽了, 写skill的手才发奖金。
动机过去 self-evolving agent 只在外面挂记忆库 / prompt 模板, backbone 权重根本不动。
动机·续更糟的是 extractor(总结经验)和 solver(执行任务)各练各的, skill抽得漂亮 solver 也用不上。
四阶段闭环Solver 裸跑一条 trace, Extractor 把 trace 蒸成 N 条结构化 skill, 每条有 workflow / 触发规则 / 纠错 / 适用条件四字段, 杜绝"加油下次努力"式空话。
检索与回流用 Qwen3-Embedding-4B(冻结索引器, 不吃梯度)按余弦相似度查 top-K skill 喂回 solver。重跑后 reward 同时打给 solver(做对了+)和 extractor(你这条 skill 真有用+)。
共参数 GRPOGRPO 把两类角色的 rollout 混进同一个 group 算 advantage。
共参数·续extractor 和 solver 共享同一份 backbone, 只是 prompt 不同。于是 extractor 的梯度方向天然被 solver 的回报牵着走, "抽得能用"才有正信号。
奖励设计纯 RLVR。不引入 PRM 也不引入 RaaS(外部大模型当裁判)。
奖励·分工source 任务上 solver 拿 task reward; retrieved 任务上 extractor 拿"加 skill 后 solver 涨了多少分"作为信号——典型的 counterfactual 增量奖励。
$$ \mathcal{J}(\theta) = \mathbb{E}_{\tau \sim \pi_\theta^{\text{sol}}}\big[r(\tau)\big] + \lambda \cdot \mathbb{E}_{s \sim \pi_\theta^{\text{ext}},\, \tau' \sim \pi_\theta^{\text{sol}}(\cdot \mid s)}\big[r(\tau') - r(\tau_0)\big] $$怎么读: 第一项 solver 自己刷分; 第二项 extractor 抽 skill s, 让 solver 带 skill 重跑得 τ', 奖励 = 带 skill 比裸跑 τ₀ 涨了多少。两项共享同一份 θ, 一次反传同时教会"会做"和"会总结"。
检索细节retrieval 走 IID 的 in-domain pool, skill 池只装当前 batch 周边任务, 防 extractor 把答案硬塞进 skill 字段作弊。
结果数学推理 + 工具调用 + Web agent 三类 benchmark 上, 相比纯 GRPO solver baseline 平均 +5~9 pt。
结果·消融"共参数"比"两模型分训"高 ~3 pt; "reward 回流 extractor"比"extractor 走 SFT 模仿"高 ~4 pt; 训练后期 workflow 字段长度 -30%, 触发规则命中率上升——skill 越练越短越能用。
一句话: 同模型双前向自蒸馏, 只在"看了攻略才会"的 token 上拉 student。
动机agentic 任务 reward 稀疏, 想让模型学一些高层 skill (怎么 clean、怎么 pick_and_place), 但又不愿意推理时还在 prompt 里挂一份 skill 说明书。SDAR 想把"看攻略才会做"的能力直接压进权重, 推理时把攻略撤掉。
双前向对当前 student π_θ, 第一遍只喂原 prompt x, 第二遍把人工写的 skill markdown r 拼在 x 前面再 forward 一次。两次共享同一份权重, 第二次充当"看了攻略的 teacher"——这就是 self-distillation 的来源: 老师就是带 hint 的自己。
δ_t 门控对每个生成 token y_t, 算 teacher 比 student 多出来的 log-prob δ_t, 再过 sigmoid 压成 0~1 的软门控 g_t, β 控制切换陡峭程度:
$$ \delta_t = \log \pi_\theta(y_t \mid r, x) - \log \pi_\theta(y_t \mid x),\qquad g_t = \sigma(\beta \cdot \delta_t) $$g_t → 1 意味着"看了攻略才会", 该蒸馏; g_t → 0 说明 student 已经反超, 别瞎纠正。
加权 NLLaux loss 形式是 student 自身负对数似然, 再被 g_t 加权——可以理解为把 teacher 近似成 one-hot 后退化出来的 token-level CE/KL, 只是用 g_t 决定每个 token 学多少。它跟主 policy gradient 并行相加, GRPO 那一套 advantage、rollout、reward 没动:
$$ \mathcal{L}_{\text{SDAR}} = -\sum_{t} g_t \cdot \log \pi_\theta(y_t \mid x) $$推理时撤掉 rstudent 必须把"看攻略才学得到"的那部分技巧内化到权重里。→ 深读
| 方法 | skill 单元形态 | 获取方式 | 是否进 RL loss | 与 GRPO 耦合 | 代表 benchmark |
|---|---|---|---|---|---|
| Skill-RM | reward skill 三件套 | judge 调工具聚合 | 只产 reward 不更新 | verl+GRPO 组内 z-score | VerInstruct 混合 |
| StraTA | strategy 隐变量 z | 开局采样自然语言 | 是, strategy 独立算 A | 双层 GRPO (K×N) | SWE-bench +6~12pp |
| Maestro | (专家, skill) 二元组 | 注册表符号化 | 是, outcome only | 4B 编排器吃 GRPO | MathVista/ChartQA |
| Evolving-RL | 四字段结构化 skill | extractor 蒸 trace | 是, counterfactual 增量 | 共参数混进同组 | 数学+Web +5~9pt |
| SDAR | 人工 skill markdown r | 训练期外挂攻略 | aux NLL, g_t 加权 | 与 GRPO 并行相加, 不动 advantage | agentic 多轮 (ALFWorld 系) |