Agent 训练「SFT → RL」管线里那个隐藏的开关——arXiv 2609.20715 改一行 loss mask 就拿 +4.2 pp

  • 关联论文:2609.20715

做 Agent 后训练的工程师这两年大概都被这个现象折磨过 😤:

你用专家轨迹做 SFT 初始化策略,训完看着不错,agent 在分布内任务上 80% pass@1。 接上 GRPO 跑 RL 微调,第一轮就崩了—— 熵塌缩飞快,策略瞬间窄化到「只会做 SFT 见过的事」; 碰到分布外状态,agent 完全盲试,pass@k 上不去; 更诡异的是,模型的 observation 预测能力跌到了 base model 以下——明明 SFT 阶段没让它预测环境观测,为什么反而退化了?

你以为是数据问题,加了 3 倍专家轨迹,重训。 没用。还是这个症状。

这个现象在 agent SFT 里有个不太被明说的默认设置——

SFT 阶段对 agent 生成的动作(action)token 加 loss,环境观测(observation)token 遮蔽掉,作为上下文但不作为预测目标

直觉上这很合理:部署后的 agent 不生成 observation,预测它有啥用?

arXiv 2609.20715(Don't Act Mask the Environment)的反驳是:这种遮蔽会让 action 与 observation 的梯度在反向传播时相互残害,最终把策略「锁」在一个非常窄的状态空间里,给后续 RL 的探索能力埋下雷

论文的修法粗暴到让人想拍大腿——

把 observation token 也加入监督目标(ActObs),无需新增数据 / 参数 / token / 前向传播——只改一行 loss mask,把原本设为 -100(忽略)的 observation 标签改回正常值。

结果:在 Terminal-Bench 2.0 和 aider-polyglot 上,4B 模型 pass@1 +4.2 pp,8B 模型 pass@16 +3.4 pp,且 RL 阶段保留更多熵、策略移动更小。

对所有走「SFT → GRPO/RL」管线的 Agent 团队来说——这件事 2026 年下半年可能是「零成本拿到 +3~4 pp pass@k」的最直接开关


0 · TL;DR(30 秒版)

arXiv 2609.20715 解决一件具体的事:

标准 Agent SFT 只对 action token 计算 loss,导致策略在后续 RL 中熵塌缩快、策略移动大、observation 预测能力跌穿 base model。论文提出 ActObs——把 observation token 也加入监督目标(改一行 loss mask),在 Terminal-Bench 2.0 与 aider-polyglot 上拿到 +3.4~4.2 pp 的 pass@k 收益,且保留 RL 阶段探索能力。

对从业者最直接的工程含义:如果你的 Agent 训练管线最近遇到了「SFT 之后 RL 起不来」,别急着加 reward shaping——先试试 SFT 阶段把 observation loss 打开


1 · 痛点:Agent SFT 为什么「训得越久越窄」

1.1 算账:熵塌缩的隐性代价

Agent 部署上线后,遇到的 query 分布远宽于 SFT 训练数据。一个客服 agent 训练时只看过 5000 条工单,部署后每天要处理 50000 条不同意图的请求——90% 是分布外

如果 SFT 后策略熵已经塌缩到接近 0,RL 阶段就只能在 SFT 学过的窄分布内做局部搜索,碰不到任何分布外状态。后果是:

  • pass@1 看似还行(因为分布内任务答得好);
  • pass@k 在分布外任务上彻底崩盘;
  • 模型进入「幻觉-重试-再幻觉」的循环。

论文的关键观察是:SFT 阶段「action-only 监督」就是熵塌缩的主要推手——它把共享表征挤压到「只服务 action」的区域,observation 预测能力随之崩塌

1.2 为什么 action-only 训练会反噬 RL

直觉上「只监督 action、不监督 observation」是合理的——部署后 agent 不生成 observation,监督它干嘛?

论文给了一个干净的反向传播解释。设 g_a 为 action 梯度、g_o 为 observation 梯度:

  • Action-only 训练g_o 不被回传,g_a 单方面塑造 hidden state,把共享表征挤压到「只服务 action」的区域——observation 预测能力随之崩塌
  • Joint supervision(ActObs)g_ag_o 同时回传,二者在 hidden state 上做「双向锚定」,梯度迅速变得正交(orthogonal),从而保留对「动作后果」的内部建模。

论文在 abstract 里直接给出证据:

"action and observation gradients rapidly become orthogonal, while action-only training leaves a large residual observation gradient and degrades environment prediction below the base model."

即 ActObs 下 action / observation 梯度主动正交化;action-only 下 observation 预测能力跌穿 base model

1.3 为什么 2026 年这件事变得关键

2026 年 Q3 起,主流 Agent 后训练管线(Qwen3-Agent、K2-Agent、Llama-3 Agent)都走「长 SFT 初始化 + 多阶段 GRPO 强化」的范式。SFT 数据规模从 1 万条涨到 50 万条,SFT 阶段对策略的塑形权重越来越大——

SFT 阶段越激进,后续 RL 探索能力被锁死的风险越高

这件事不解决,「训得越多、跑得越窄」就是 Agent 后训练的代名词


2 · 机制:ActObs + 梯度正交化 + 零成本开关

2.1 ActObs 是什么——改一行 loss mask 就够

# 伪代码
def sft_loss(trajectory, model):
    total_loss = 0
    for token in trajectory.tokens:
        if token.role == "action":
            total_loss += cross_entropy(model.logits, token)   # 原有
        elif token.role == "observation":
            # ActObs 的关键差异:observation token 也参与 loss
            total_loss += cross_entropy(model.logits, token)   # 新增
        # 对话 / 系统 token 仍可遮蔽
    return total_loss / len(trajectory.tokens)

工程上等价于:把原本设为 -100(忽略)的 observation token 标签改回正常的 next-token 标签。这一改的成本是零——没有新数据、没有新参数、没有新前向传播。

⚠️ 零成本的边界:在长 horizon 任务(多轮 tool-calling、代码调试)中,observation token 往往占序列 50-90%。将其加入 loss 意味着 SFT 反向传播计算量等比增加,实际 GPU 小时增幅需在 own 数据集上做 ablate。

2.2 梯度正交化——机制证据

ActObs 在 SFT 阶段后的 RL 阶段产生两个可观测差异:

  1. 保留更多熵:策略的概率分布更「平」,意味着 RL 探索时不那么快塌缩到 greedy。
  2. 策略移动更小:从 SFT 初始化到 RL 结束,参数 / 行为分布变化幅度更小,最终策略更接近其 SFT 起点

这两个差异加起来意味着:策略进入 RL 时不是一个「已经窄化」的 SFT 终点,而是一个「还能探索」的 SFT 起点。

论文在 Terminal-Bench 2.0 和 aider-polyglot 上验证了这条因果链:

  • 4B Qwen3:ActObs 在所有评估采样预算下都更高 pass@k;
  • 8B Qwen3:牺牲一点 pass@1,换 +3.4 pp at pass@16,并解出更多 distinct tasks;
  • aider-polyglot(跨域代码编辑):+4.2 pp at pass@1 at 4B,且任务在 SFT 与 RL 中均未见。

2.3 跨任务成立——不是 cherry-pick

ActObs 在 Terminal-Bench(agentic 任务)+ aider-polyglot(代码编辑)两个不同领域都有效。两个领域的数据分布、reward signal、动作空间都差异很大——同向有效说明这是 loss mask 层面的结构性改进,不是任务特定的 hack


3 · 工程落地与坑点

3.1 三个立刻能用的工程行动

  1. 改一行 loss mask:把 SFT pipeline 里 action-only 的 loss 切换到 ActObs(observation 也参与 loss),在 own 数据集上做小规模 ablate。
  2. 加梯度正交化监控:训练时画 action / observation 梯度的 cosine similarity,cos similarity <0.3 持续 3 个 checkpoint 算达标
  3. 把评测指标从 pass@1 切换到 pass@k:8B 上的 pass@1 ↔ pass@k trade-off 暗示用 pass@k 而不是 pass@1 来评估 agentic 模型会更准——ActObs 帮你拿到的就是 pass@k 曲线。

3.2 三个不能忽视的工程坑点

  1. observation 噪声放大风险:真实 agent 轨迹中的 observation 可能来自不可靠的工具返回值、网络超时、HTML 截断等。将这类 noisy observation 加入监督目标,模型可能学到错误的「动作-后果」对应关系。建议在数据清洗 pipeline 中加 observation 置信度过滤。
  2. GRPO 专用性风险:本文所有实验均在 GRPO 下验证。PPO / DPO / RLOO 等其他 on/off-policy 算法是否受益完全未知。若团队用 PPO,此工作无直接参考价值——内部做 ablate 前不要直接迁移。
  3. 幻觉 observation 副作用:若 observation token 也参与 loss,模型可能学到「生成 hallucinated observation」(即自己预测一个假的工具返回值塞进 context)。这在推理时若 observation 来源不可控,会导致 compounding error。

3.3 行动清单优先级

优先级 行动 验收标准
P0 确认 Terminal-Bench 2.0 名称真实性 + 代码仓库可获取 benchmark / 代码可运行
P1 在 own 数据集上测 action-only vs ActObs 的 SFT epoch 时间 ActObs GPU 小时增幅 <10% 才算「零成本」
P1 对 observation 噪声做数据清洗 ablate filtered 版胜出则触发数据清洗流程
P2 在 PPO 上做 ActObs 效果 ablate 即使 paper 未覆盖也要内部验证
P2 加 hidden state cosine similarity 日志 cos <0.3 持续 3 个 checkpoint 达标
P3 测 ActObs 在 Llama-3.1-8B / Gemma-2-9B 上的跨家族迁移性 至少 1 个家族同向有效才算可推广

4 · 一句话总结 + 适合谁读

arXiv 2609.20715 把「Agent 越训越窄」从「数据问题」变成「loss mask 问题」——observation token 不该被遮蔽,让 action / observation 梯度正交化是 RL 探索能力的前提

  • 强烈推荐给:Agent 后训练 / GRPO 工程师、Agent 评测研究者(pass@k 指标设计者)、SFT 数据流水线工程师(loss mask 改一行就够)。
  • ⚠️ 谨慎推荐给:用 PPO / DPO 的团队(论文未覆盖需自验)、跨模型族迁移团队(Llama / Gemma 未验证)、长 context agent 训练团队(observation loss 权重需重新调)。
  • 不推荐给:纯静态对话 / 单轮生成场景的研究者、没有 SFT → RL 管线的应用工程师。

5 · 来源与待核

  • arXiv:https://arxiv.org/abs/2609.20715
  • 精修稿/shared/research-kb/organized/promo/explainers/2609-20715.md
  • 待核 PDF §X:Terminal-Bench 各采样预算完整数字、+3.4 / +4.2 pp 的对照对象(action-only 还是某种已有 SOTA)、是否对 PPO/DPO/RLOO 也成立、长 context agent 上的训练稳定性、observation 噪声鲁棒性、是否对照 MiniLLM / RLHF / 其他 agentic SFT 范式。

写作立场:本文基于 paper card + abstract + explainer 精修稿公开内容改写,未下载 PDF / 未跑代码 / 未生成新数据。所有推断已逐条标注 ⚠️,涉及具体数值的均为 abstract 直接给出的内容或论文自报数据,工程落地前请以原 PDF 主表与附录表为准。