精读:Don't Mask the Environment 与被 mask 掉的环境观察
agent 轨迹里约 45% 的 token 是环境回显,标准 SFT 把它们留在上下文却排除在损失之外。论文只改一行掩码就让它们重新成为预测目标,零额外成本地为后续 GRPO 换一个更好的起点。
1 论文概览
- 一句话总结:把 agent 轨迹 SFT 里被 mask 掉的环境观察 token 重新放进损失函数,不增数据、不增参数、不增前向,只为后续的 GRPO 换一个更好的起点。
- 核心问题:agent 轨迹里一半的 token 是环境回显(终端输出、报错、状态),标准做法把它们留在上下文里却排除在预测目标之外。这个约定几乎没有被检验过,尤其在 SFT 只作为 RL 初始化的流程里。
- 主要贡献(论文自陈三点):
- 目标:一个 loss mask 的改动,把轨迹里已经存在的观察 token 变成预测目标。
- 结果:SFT 之后三个起点分数接近,跑完同一套 GRPO 之后拉开差距;4B 上 pass@k 全面领先,8B 上让出 pass@1 换 pass@16,并迁移到跨域代码编辑。
- 机制:动作梯度与观察梯度很快正交,动作-only 训练拟合掉动作目标之后留下巨大的观察残余,把环境预测能力压到基座以下;联合监督避免了这种单侧特化。
论文对自身定位的表述相当克制:
Masking observations assumes that reading environmental feedback is useful, but learning to predict it is not. —— §1 Introduction
它要检验的正是这句「假设」本身。
2 方法详解
架构与方法概述
轨迹写作 , 是任务提示, 是模型回合(推理 + 命令), 是环境返回。设 、 为两类 token 的索引,ActObs 的目标是
退化为动作-only 的 ActionSFT,默认 ActObs 取 。分母保证 变化时单样本 loss 的尺度不变, 时两类 token 按 token 等权。
训练配置全部共享:5 万条多轮终端轨迹、0.71B token,取自 Nemotron-Terminal-Corpus 的合成部分,由 DeepSeek-V3.2 生成;观察 token 约占语料的 45%。Qwen3-4B 与 Qwen3-8B 各训 1 个 epoch(781 步,batch 64,cosine,峰值学习率 )。随后 GRPO 跑 135 步,任务池是 Endless Terminals 的 2392 个容器任务(与 SFT 语料不相交),每任务 16 条 rollout,batch 32,学习率 ,二值验证器。评测用 Terminal-Bench 2.0(89 题,每题 16 次尝试)与 aider-polyglot(225 题,每题 4 次)。
关键创新点
创新不在结构而在口径:观察 token 本来就参与前向(作为上下文),把它们加进 loss 只是改一行 mask。论文对成本的表述是
Although deployed agents never generate observations, learning to predict them encourages the policy to model action consequences without adding data, parameters, sequence tokens, or forward passes. —— Abstract
这条是站得住的。屏蔽 token 省不下前向,开放它也不多花前向,唯一增加的是 loss 计算涉及的 token 数(0.71B token 里的约 45%,即约 0.32B 个位置)。同一条轨迹由此身兼模仿样本与转移样本两职。
与基线方法的区别
三层对照,区分度很清楚:
| 对照 | 观察监督的位置 | 作用 |
|---|---|---|
| ActionSFT | 无 | 标准动作-only 基线 |
| Obs→Act | SFT 阶段,先 1 epoch 观察-only 再 1 epoch 动作-only | 时序解耦控制 |
| ECHO | RL 阶段,权重 0.05,作用在策略自己的 rollout 上 | RL 侧的 on-policy 版本 |
Obs→Act 收到的观察监督总量与 ActObs 相同只是分散在两个 epoch;ECHO 是在 RL 期间加 next-observation 预测损失。这两条正好把「观察预测」这件事拆成了 SFT 期与 RL 期、teacher-forced 与 on-policy 两个维度。
3 实验结果
主要指标
| 阶段 | 配置 | 4B TB @1/@16 | 4B aider @1/@4 | 8B TB @1/@16 | 8B aider @1/@4 |
|---|---|---|---|---|---|
| SFT | ActionSFT | 4.5 / 16.9 | 1.4 / 5.8 | 9.2 / 24.7 | 3.9 / 10.2 |
| SFT | ActObs | 4.4 / 18.0 | 1.0 / 3.6 | 7.9 / 22.5 | 4.4 / 12.0 |
| GRPO | ActionSFT→GRPO | 5.6 / 18.0 | 9.7 / 20.4 | 12.3 / 23.6 | 12.7 / 28.4 |
| GRPO | ActObs→GRPO | 7.2 / 19.1 | 13.9 / 25.3 | 11.0 / 27.0 | 14.2 / 28.9 |
| ECHO | ActionSFT→ECHO | 5.9 / 18.0 | 10.2 / 20.9 | 9.6 / 25.8 | 14.8 / 29.8 |
| ECHO | ActObs→ECHO | 5.9 / 20.2 | 9.1 / 21.8 | 11.4 / 24.7 | 14.2 / 28.9 |
两个尺度的故事不同。4B 上 ActObs→GRPO 在每个采样预算都领先 1.6 / 1.4 / 1.5 / 1.1 个百分点(论文报的相对幅度 29% / 13% / 11% / 6%)。8B 上是交叉:pass@1 落后 1.3 分,pass@4 追平反超,pass@16 领先 3.4 分,解出 24 题对 21 题。跨域的 aider-polyglot 上 4B 领先 4.2 / 4.9 分(相对 43% / 24%),而 4B 的 ActObs SFT 检查点在 aider 上(1.0)低于基座模型(3.0)。
与 SOTA 的对比
论文没有做跨方法 SOTA 对比,对照全部是同数据、同 RL 配方的内部对照。绝对值上最强的配置是 ActionSFT→ECHO 在 8B aider 的 29.8,这一格属于动作-only 初始化。
消融实验关键发现
控制阶梯(附录 Table 2,8B)是全文信息量最大的一张表:
Obs only与Action→obs-only全部 0.0——观察预测不能替代动作学习。Shuffled obs(观察换成其他轨迹的)把 pass@1 从 7.9 打到 3.7、pass@4 从 16.1 打到 9.0。Wild logs(格式匹配但内容无关的日志)保留 7.9 的 pass@1——配对关系比内容来源更重要。Salient-filtered obs(只保留关键行)掉到 7.2,低于完整观察的 7.9。ActObs-100(只在前 100 步联合监督)→GRPO 的 pass@8 是 19.1。- λ 扫描(Table 6):SFT 阶段 pass@4 随 λ 单调下降(18.2 → 18.0 → 18.0 → 16.9 → 16.1 → 14.6),GRPO 后 pass@8 随 λ 单调上升(21.0 → 21.3 → 22.5 → 23.6)。
机制侧:梯度余弦相似度 从 0.83 在 10–20 步内掉到噪声地板(全程 781 步),范数比 在 ActionSFT 下涨到约 41,在 ActObs 下维持在 0.5 附近;8B 终点的自熵 0.779 对 0.716。
4 个人分析
亮点
问题选得准。 一个被全行业默认、几乎没人验证的 mask 约定,检验口径还选对了——不看 SFT 分数涨多少,看「交给同一套 RL 之后谁走得更远」。这个口径转换是本专栏反复遇到的高效写法(OPSA、Terminal-Universe、TrimSFT 都靠它)。
控制阶梯设计得干净。 Shuffled obs 是作者主动放进去的自我证伪臂:它复现了 ActObs 的熵特征(自熵 0.702 对 0.706,命令 margin 6.59 对 6.56)却把分数打到 3.7。作者据此写下
ECHO marks the boundary of this explanation: it produces still higher entropy but does not match ActObs at pass@16. Therefore, high entropy alone is not enough. —— §4.3
一句话把自己的机制解释划了边界。这种自觉在近期的 agent 论文里不多见。
诚实报了 8B pass@1 的退步。 −1.3 分没有藏进平均值里。
局限性
(一)headline 的 pass@16 恒等于「解出的题数 / 89」,而差值是 1 到 3 道题。
、 时,Chen et al. 的无偏估计退化为 ,即「至少成功一次的任务占比」。代回表格逐一验证:8B 的 27.0 对应 24/89 = 26.97%,23.6 对应 21/89 = 23.60%;4B 的 19.1 对应 17/89 = 19.10%,18.0 对应 16/89 = 17.98%。pass@16 就是任务覆盖率。 于是 8B 的 +3.4 分是 3 道题,4B 的 +1.1 分是 1 道题。
按题级二项分布算标准误, 个百分点, 个百分点——两个 headline 差值都落在 1 个标准误以内。更直接的配对检验在附录 F 里:8B 上两策略共同解出 19 题,ActObs 独有 5 题,ActionSFT 独有 2 题,McNemar 精确双尾 p = 0.45。
而论文的不确定性口径是
Uncertainty is one bootstrap standard error, computed by holding the task set fixed and resampling attempts within each task. —— Table 1 注
固定任务集、只在任务内重采样 attempt,恰好剔除了「89 道题这一批抽样」这个最大的方差来源。89 题的 agent 基准上,题级标准误约 4.5 个百分点,与全部 headline 差值同量级。
(二)ECHO 是同一个思想的 on-policy 版本,而它基本失败。
把「预测观察」从 SFT 期搬到 RL 期、从 teacher-forced 换成策略自己的 rollout,8 个可比格子净变化 −5.5 分(均值 −0.69):3 格正、3 格负、2 格持平。最狠的一格是 4B aider,ActObs 从 GRPO 的 13.9 掉到 ECHO 的 9.1(−34.5%),并且让 ActObs→ECHO(9.1)落到 ActionSFT→ECHO(10.2)之下。这一格不在论文「八个操作点领先或持平」的计数里——那八点只含 Terminal-Bench。
这条比任何单点批评都重要:它说明起作用的不是「预测后果」这个目标本身,而是它在 SFT 阶段对解空间的塑形方式。一个世界模型式的目标,在真正 on-policy 的位置上反而不好用。
(三)8B 的 SFT 欠账在 pass@1 上一分未还。
Table 4 逐格相减:SFT 阶段 ActObs 相对 ActionSFT 是 −1.3 / −1.8 / −2.0 / −2.2 / −2.2,GRPO 之后是 −1.3 / −0.8 / +0.7 / +2.7 / +3.4。净位移是 +0.0 / +1.0 / +2.7 / +4.9 / +5.6。pass@1 上位移为零——联合监督在这里没有兑现任何收益,兑现只发生在 。
(四)λ 扫描的单调性混了两种评测口径,且每一步都不显著。
论文写 pass@8 随观察权重单调上升:21.0 → 21.3 → 22.5 → 23.6。可 Table 2 的 列写明 λ=0.05 与 λ=0.25 的 GRPO 行只用 8 次尝试评估,两端点用 16 次。三步的 z 值分别是 0.22、0.81、0.74,无一接近显著。λ=2.0 这个端点干脆没有 GRPO 行,单调性声明的最大值处缺少下游验证;SFT 阶段 pass@1 也不单调(λ=0.25 反弹到 9.3,高于 λ=0 的 9.2;λ=2.0 回到 8.1,高于 λ=1 的 7.9)。
(五)梯度正交性只报了比值,没有报分子。
涨到 41 被读作「留下巨大的观察残余」。分母在 ActionSFT 下被拟合掉了,这是设计使然;分子有没有跟着一起缩小,全文没给 的绝对曲线。缺少这一列, 既可读作「观察能力被搁置」,也可读作「两个梯度一起变小、只是动作梯度变小得更快」。后者下,论文的机制叙事要重写。
(六)教师单一,且观察是 teacher-forced 的。
5 万条轨迹全部由 DeepSeek-V3.2 生成,观察分布是「教师动作之后的后果」。模型学到的是 教师动作,不是 我自己的动作。ECHO 恰好补上了 on-policy 那一半却失败,说明这个缺口没有被真正填补。作者自己在附录 H 写明了范围:
We study Qwen3 at 4B and 8B, which provides a cross-scale comparison but not a cross-family one because the models share a tokenizer and chat template. All SFT trajectories are generated by a single teacher, DeepSeek-V3.2. —— Appendix H Limitations
(七)两处被略过的反向数字。
Table 11 的 Solve steps(成功轨迹的中位步数)在 RL 之后方向反转:SFT 阶段 ActObs 是 13 步对 ActionSFT 的 21 步,GRPO 之后变成 35 对 26——ActObs 的成功轨迹反而长 35%。论文只讨论了 SFT 行的「更高效执行」。
Table 8 的扩展预算结论只靠一个格子成立:论文写「所有观察监督的检查点都在更长交互预算下变好」,可四个 RL 检查点里涨得最多的恰恰是 ActionSFT→GRPO(+1.8),且在 2× 预算下它的 14.0 仍高于 ActObs→GRPO 的 12.6。真正没受益的只有 SFT 阶段的 ActionSFT 一个检查点。
对大模型领域的影响
- loss mask 重新成为一个可调的设计维度。 本专栏此前已连续遇到按位置删(E-SFT)、按 logit gap 留(TrimSFT)、按价值监督位置选(SP³O)三条路线,本篇补上第四条:按 token 的来源(动作 vs 环境)选。四条路线共同指向「SFT 不是把所有 token 喂进去就完事」。
- SFT 分数的等价不等于 RL 起点的等价。 三个 SFT 检查点在 8B 上的 pass@1 是 9.2 / 7.9 / 8.3,差异在噪声内;跑完同一套 GRPO 之后变成 12.3 / 11.0 / 11.9,pass@16 变成 23.6 / 27.0 / 23.6。用 SFT 分数挑启动检查点,会挑错。
- 一个反面教训: 一个 0 成本的改动,收益是 1 到 3 道题,且题级 p 值 0.45。这说明 agent RL 的 SFT 配方搜索已经进入噪声主导区——89 题的基准上,任何小于 4.5 个百分点的差值都需要先问统计口径,再问方法。
5 实践启示
可以借鉴的技术
- 一行 mask 改动,成本为零。 任何已有「SFT 冷启动 → GRPO」管线的团队都能直接试,不需要重新采集数据、不需要改模型、不需要额外的前向预算。这是本篇最实在的产出。
- λ 是一个新的可调旋钮,且有明确的取舍方向。 想要单次调用可靠 → λ 取小(0.05–0.25 在 SFT 阶段几乎不掉分);想要多次采样覆盖 → λ 取大。这个取舍在论文的 Fig 4(b) 与 Table 6 里是被扫出来的,不是猜的。
- 控制阶梯值得整套抄。
shuffled obs/wild logs/salient-filtered/act2act/ActObs-100五个臂加起来才把「起作用的是什么」说清楚。做数据配方的团队可以直接复用这套设计:先打乱配对、再换内容来源、再做内容筛选、再做时序解耦。 - 评估口径要改。 报 pass@16 就等于报任务覆盖率,请一并报题级置信区间(89 题约 ±4.5 个百分点)与 McNemar 配对检验。
潜在应用场景
- 终端 / 运维 agent:本篇的直接验证域,观察是纯文本且占比 45%,最适配。
- SWE agent:代码执行的回显、测试输出、编译错误同样是文本观察,结构与终端高度同构,迁移成本最低。
- GUI / 具身 agent:观察更丰富(截图、DOM、传感器流),论文自陈未验证。这类场景的观察 token 占比往往更高,λ 的可行区间需要重新扫。
- 不建议的场景:只做 SFT、不接 RL 的链路。8B 上 ActObs 的 SFT 检查点在 Terminal-Bench 上净负 1.3 到 2.2 个百分点,在 aider 4B 上甚至低于基座。收益全部来自 RL 之后的展开。
参考文献
Zhang, Makhija, Arivazhagan, Kumar, Gangadharaiah (2026). Don’t Mask the Environment: Observation Supervision Changes How Agents Explore Under RL. arXiv:2609.20715 [cs.LG]. University of Maryland; AWS AI Labs.
相关精读
-
本篇问的是「一条轨迹里哪些 token 配得上监督」的第四条路线——按 token 的来源(动作 vs 环境)选。以下按专栏顺序回溯前四十二期。