SimpleTIR
Agent · Zero RL · arXiv 2509.02479

SimpleTIR:丢掉「既没写代码、也没给答案」的那条轨迹,多轮工具 RL 就稳了

端到端强化学习训练多轮工具集成推理(TIR)时,训练经常中途崩盘、分数塌到 0。论文把病根指向工具反馈引起的分布漂移——它让模型在后续回合采样出极低概率的 token,进而引发梯度范数爆炸。 解法只加了一条规则:任何一回合既没有完整代码块、也没有最终答案,整条轨迹不进策略更新。

Zhenghai Xue, Longtao Zheng 等 · NTU / TikTok 原文 ↗ 代码 ↗
TL;DR · 30 秒抓住核心

单轮 TIR 训练是平滑的;一改成多轮,工具输出被拼进下一轮 prompt,它来自外部解释器、偏离预训练分布,模型随之「漂」,开始生成极低概率 token,并在一轮轮循环里累积放大。

论文的 Proposition 3.1 说,logits 上的策略梯度 ∝ 未裁剪的重要性比 ρ,以及一个对低概率 token 高度敏感的概率项 √(1 − 2P(c) + ΣP(j)²)。对负奖励轨迹,低概率 token 的 ρ 可以涨到无穷;即便裁剪,概率项也会让梯度居高不下。所以只 mask 反馈 token 不够。

作者的观察是:这种漂移常常表现为一回合「既没有完整代码块、也没有最终答案」(partial code、重复文本、过早 eos)。由此把整条轨迹从策略更新里滤掉,既挡掉大风度梯度,也避免早期正确步骤被后期塌陷「连坐」。

它不是新算法:GRPO + feedback masking 照旧,只多一个过滤开关,可与其它 RL 改进正交叠加。

22.1 → 50.5
AIME24 均分(Qwen2.5-7B 从零 RL)
原文口径:text-only baseline 22.1 → 50.5(+28.4)
50.5 − 20.8
同一套过滤消融(Table 2,组内最高分差)
Naive 多轮 20.8 → SimpleTIR 50.5(+29.7)
50.5 − 39.6
同为零 RL 的 ZeroTIR-7B 对比(Table 1)
AIME24 39.6 → 50.5(+10.9)
01

多轮 TIR 的 RL,崩在「工具输出」这一环

读完这节应知道:为什么把单轮改成多轮,训练就从平滑变成爆炸——而且和代码质量无关。

TIR 的循环是「推理 → 写代码 → 沙箱执行 → 读回结果 → 再推理」。论文把轨迹写成 o = (q, l0, f0, …, lK−1, fK−1),其中 lk 是模型第 k 轮生成的回答,fk 是工具反馈;并用两层 MDP(回合级 + token 级)描述它,统一一个策略 πθ 求解。

单轮

训练平滑

模型只生成一段回答,最多带一个代码块。反馈只被「读」一次,不会被当作下一轮的输入条件。Figure 2 显示:单轮 naive 训练平滑上升。

多轮

反馈回灌,漂移累积

fk 被拼进第 k+1 轮 prompt。它来自外部解释器,可能显著偏离 LLM 学到的数据分布;以这种 OOD 输入为条件,后续生成就开始高度随机,选中 token 的概率被压得异常低。

Figure 3 的压测很直观:Turn 1 的 token 概率普遍较高,Turn 2、3 模型自己的文本里开始出现低概率片段,到 Turn 4 整段塌成无意义输出、概率极低。

而多轮 TIR 本来就做 feedback masking:工具 token 不参与 loss 计算(mi,t = 0)。论文指出这不够——mask 只挡住了反馈 token 自己的梯度,挡不住它污染后续生成。这就是本文要补的洞。

02

前人两条路:冷启动「扶稳」,或者想直接规整梯度

这节对照两类做法各自卡在哪,也解释为什么作者坚持不走 SFT 冷启动。

路线 A

SFT 冷启动 + RL

代表:ReTool 先在 Qwen2.5-Math-32B-Instruct 上做冷启动 SFT 再 RL;ToRL、Effective TIR 则在数学专精基座上做 RL。

强项:确实稳,32B 上分数也高。Table 1 里 ReTool-32B 的 AIME24 是 67.0,高于 SimpleTIR-32B 的 59.9;7B 上 ReTool 未报告。

代价:SFT 把模型的推理形态锚定在标注范例上,削弱 Zero RL 的「涌现」这一核心收益。论文要的是不依赖冷启动的人类数据。

路线 B

直接规整梯度 / 概率

候选:按高重要性比(importance ratio)过滤、或按低 token 概率过滤。直觉上——既然病根是低概率 token,把它们筛掉就行。

卡点:Figure 5(下)里这两种过滤都压不住梯度爆炸,训练分数曲线仍然乱跳。论文归因于两点:阈值难调,且它们不解决 credit assignment。

此外梯度裁剪(clip=1)在这套设置里已经开着,仍然爆。

所以作者要找的不是「更细的 token 级信号」,而是一个鲁棒、语义清晰、还能顺带修掉 credit assignment 的轨迹级判据。这就是下一节的 void turn。

03

核心方法:用「void turn」当轨迹级开关

这篇论文只有一个公式是它自己的,其余都沿用 GRPO;先看懂公式,再对着模拟器亲手验证一次。

训练目标本身没变

策略用 GRPO 训练,优势是组内相对奖励 Âi = (ri − mean(r)) / std(r)。目标只对「模型生成」的 token 累积 loss:

𝒥TIR(θ) = Eq, {oi}~πold [ (1/G) Σi (1/Σt mi,t) Σt mi,t · LCLIP(θ, i, t) ]
Eq. 1 · mi,t 是反馈 mask:属于某个回答 lk 的 token 取 1,工具反馈 token 取 0;LCLIP 即标准 PPO 的裁剪代理目标

为什么低概率 token 会把梯度顶爆

‖∇zt𝒥TIR‖2 ∝ mi,t/Σjmi,j · ρi,t(θ) · gi,t · |Âi| · √(1 − 2P(c) + Σj∈𝒜 P(j)2)
Eq. 3 · Proposition 3.1,对 pre-softmax logits zt 求梯度;ρi,t = πθ(oi,t|oi,<t) / πold(oi,t|oi,<t),gi,t 是「未裁剪时」才激活的门

论文对 ρ 做 PPO 概率比裁剪(clip 0.2/0.28,即 ε = 0.2 与 0.28),但第二项完全不受裁剪影响;而按 importance ratio 去过滤,又只做了第一项的一半。两条路都堵不住。

void turn:既没代码块、也没最终答案的一轮

定义

void turn = 既没产出完整代码块、也没产出最终答案的一轮回答

论文给的典型成因:partial code、重复文本、过早采样到 eos 导致的残缺回答。它在成功轨迹里很少见,在异常轨迹里很常见,因此是一个强判据。

算法:逐条检查采样到的轨迹,任何一回合是 void turn → 在 GRPO 更新前把整条轨迹从 batch 中 mask 掉。一个动作同时做了两件事:挡住低概率 token 的大梯度回流,并纠正错配的 credit assignment(早期正确步骤不再被后期塌陷拖累)。

自己动手:一条轨迹,两种处理

下面把 Figure 4 的流程做成可操作版本。轨迹里有四回合,其中一回合是 void turn。切换处理方式,看这条轨迹还能不能进入策略更新、梯度里还剩多少低概率 token——以及它同时带来什么副作用。

当前状态
拖动滑块,比较四种处理下这条轨迹的去向。

手算验证(默认:G = 16,void 占 8 条):

04

怎么训:零 RL 开局,五回合起步,靠工程细节兜底

这段给出复现所需的全部关键配置,并指出「省交互回合」才是这套方法的实际收益之一。

训练设置

数据与框架

VerL + Search-R1

训练集为 SimpleRL 的 Math3-5 与 DeepscaleR;代码执行用异步的 Sandbox Fusion。基座是未对齐的 Qwen2.5-7B / 32B,全程不做 SFT。

关键超参

附录 C.2 / 表 6a

rollout 温度 1.0,每 prompt n = 16 次 rollout,采样 batch 1280;训练 batch 512;PPO clip 0.2/0.28,epochs 4;lr 1e-6,梯度裁剪 global-norm = 1;γ = 1、GAE λ = 1;KL 系数 0、熵系数 0。

回合数与长度:先短后长

三个防止「模式失真」的工程细节

实现

不用 chat template,改用极简前缀

为避免基座模型遇到 OOD 特殊 token,工具输出前只加一句 "Code Execution Result:";每段生成的代码前预置一个 final_answer 函数,让简单题在一回合内收尾;代码块成形后立即停止生成,并在下一回合前追加真实的工具反馈,防止模型幻觉工具输出。

后两点还让 void turn 的检测变得很直接:一回合要么有完整代码块(进而被执行)、要么有 final_answer / \boxed{},否则就是 void。

代价方面:论文自述训练依赖高并行度的沙箱,并且完整异步的 rollout 与奖励计算仍是开放问题(Limitations)。过滤本身几乎零开销——只是把样本从更新前的 batch 里拿掉。

05

流程:一次更新里的四个动作

Figure 4 的顺序:交互 → 轨迹过滤 → 策略更新;void turn 同时触发「停止生成」和「整条丢弃」。

STEP 1
多轮交互
推理 → 代码 → 沙箱执行 → Code Execution Result: 回灌
STEP 2
采样轨迹
Reasoning 1 · Code 1 ·
Reasoning 2 · Incomplete Code
STEP 3 · 过滤
有 void turn
→ 停止生成
→ 整条轨迹 mask
STEP 4
GRPO 更新
仅对 mask 后剩下的有效轨迹做策略更新
无 void turn → 进入更新
丢弃:不进入策略更新
过滤路径
更新路径
Figure 4(重绘):互动 → 轨迹过滤 → 强化学习。原图的要点是:void turn 判定发生在策略更新之前,置灰的是整条轨迹,而不是某几个 token。
展开说明 ▸
  • 为什么停在「回合」粒度:每一步 token 级的信号在低概率区域本身就很噪;而「这一轮有没有推进」能够在回合级别干净判断,且不易被阈值调参左右。
  • 为什么能顺带修 credit assignment:稀疏终端奖励下,最终失败会对整条轨迹给一个负值。若保留含 void turn 的轨迹,早期正确的高概率回合也被扣分;丢掉整条轨迹后,只有「真正能拿到正优势」的样本在塑造策略。
  • 为什么它和 GRPO 正交:过滤只改变进入更新的样本集合;组内优势在采样轨迹上计算,而不是在过滤后子集上重新归一。作者刻意没动这一块,以免干扰算法本身。
  • 代价:会丢掉一些含有价值早期步骤的轨迹;若绝大多数轨迹都含 void turn,则可能没有样本可学。这是论文自己列出的局限性方向。
06

效果:同是零 RL,AIME24 比 ZeroTIR-7B 高 10.9 分

数字全部取自 Table 1 / Table 2 / Table 3,均为 average@32;「-」表示原文未提供。

模型 (7B)TIRZero RL起点 AIME24AIME25MATH500 OlympiadAMC23HMMT25
Qwen2.5-7B✗/Base3.21.151.915.421.70.0
SimpleRL-Zoo-7B✗✓Base15.6-78.240.462.5-
ToRL-7B✓✗Math-Inst40.227.982.249.975.0-
Effective TIR-7B✓✗Math42.329.286.4-74.2-
ZeroTIR-7B✓✓Base39.625.080.2--22.5
SimpleTIR-7B✓✓Base50.530.988.454.879.129.7

Table 1(节选,Qwen2.5-7B 部分)· TIR:训练与评测是否用工具;Zero RL:是否从 base 直接 RL

32B 规模上,SimpleTIR-32B 的 AIME24 是 59.9、MATH500 是 92.9;同为零 RL 的 ZeroTIR-32B 分别是 48 和 87.8。但冷启动路线仍未被完全追平:ReTool 的 AIME24 达到 67.0,AIME25 是 49.3;SimpleTIR-32B 的 AIME25 为 49.2,几乎持平。

消融:差在「轨迹级」这一步

设置(7B)AIME24MATH500
SimpleTIR50.588.4
Naive Multi-Turn20.873.1
Low Prob Filtering23.372.8
High Ratio Filtering26.375.0
Stop Generation w/o Filtering26.177.3

Table 2 · 因消融方法训练不稳定,报告 1000 个梯度步内的最高分

两点反直觉:其一,「遇 void turn 就停生成」还不够(26.1)——保留轨迹依然被 credit assignment 拖累,必须整条丢弃;其二,token 级的两种过滤都只在 20–26 区间打转,说明问题不在于「挑出哪些 token」,而在于「哪条轨迹值得学」。

零 RL 的副作用之一是「推理形态更多样」

作者用 Claude-3.7-Sonnet 标注正确回答中的推理模式(Table 3):SimpleTIR-32B 相比冷启动的 ReTool,渐进式推理 46.5% vs 18.9%,错误修正 38.0% vs 25.8%,交叉验证 86.0% vs 82.4%。频率之和可超 100%,因为一条回答可含多种模式。

07

什么时候这套过滤不够用

作者 Limitations 写了四条,加上从原文数据本身能读出的一条,共五个边界。

边界一

void turn 判据只适用于「能清晰判定一轮是否有产出」的多轮 TIR

论文自述:void turn 作为低概率 token 的指示器,未必能直接迁移到多轮 TIR 之外的任务。网页浏览、API 调用、机器人控制等场景里,「这一轮有没有推进」远没有「有没有代码块/最终答案」那么好判定。

边界二

回合数上限 10,长程 agent 任务会不够

数学推理最多训练 10 回合,但复杂 agent 任务可能需要更多交互。回合越深,漂移累积的机会也越多。

边界三

它本身不提升能力上限,只是把不稳定拿开

同基座、同起点下,冷启动 + RL 的 ReTool 在 AIME24(67.0)、AIME25(49.3)上仍高于 SimpleTIR-32B。SimpleTIR 的优势是不需要人类冷启动数据,以及推理模式更多样,而不是绝对分数更高。

边界四

工程依赖与异步化尚未解决

训练依赖高并行沙箱;完全异步的 rollout 与奖励计算仍是开放问题,涉及 rollout 效率、显存管理与 credit assignment。

边界五

数据效率是隐性成本

「整条丢弃」会连同其中有效的早期步骤一起扔掉。本页推断:若难点题目初期几乎采样不到无 void turn 的轨迹,可学的样本会骤减——论文未单独报告这类样本在训练中的比例,这一风险的大小取决于实际题集的难度分布。

一句话:SimpleTIR 把「病根在数据」这一思路落成了一个回合级开关。它不改变 RL 算法,也不扩大模型能力,而是让 Zero RL 在多轮工具场景下第一次能跑稳、并跑出分数。