Self Improvement via Fast Tree-search
论文重点
这篇论文由 MIT 和 Sakana AI 的研究者合作完成,提出了一个叫SIFT(Recursive Self-Improvement via Fast Tree-search)的框架。它的核心洞察很直接:编码智能体自我改进的瓶颈不在“改代码”本身,而在于验证改动是否真的有效——每次候选修改都要跑一遍基准测试,成本高得离谱。SIFT 的做法是用 LLM 作为“裁判”做两两对比,配合 Bradley-Terry 模型排序,把昂贵的基准测试留给最有希望的候选者,最终在 Polyglot 基准上以十分之一的 CPU 耗时超越了 DGM 等先前方法。
核心研究内容
问题定义
递归自我改进(recursive self-improvement)听起来很美:智能体改自己的代码,改完跑测试,效果好就留下,然后继续改。但现实中,这个循环的成本结构是畸形的。每一次候选修改,哪怕只是调了一行 prompt 或者改了一个工具调用的顺序,都必须跑完整的基准测试来评估它的价值。DGM 在 SWE-Bench 上的单次评估成本可以到22,000 美元,消耗数千 CPU 小时。小团队和学术实验室基本进不了这个赛道。论文把问题定义得很精确:不是“怎么改代码”,而是“怎么在预算约束下判断一个改动值不值得改”。
创新方法
SIFT 的核心设计是把“评估”这个环节拆成两个层次:
第一层是 LLM-as-a-judge 的两两对比。每当生成一个新的候选 agent 版本,SIFT 不会立刻跑基准测试,而是让一个 judge 模型把它和现有的强 agent 做两两比较——像裁判看两段代码,判断哪一段的修改方向更合理。每个新节点只和当前存档中排名最高的10 个节点做对比,控制 judge 成本。
第二层是 Bradley-Terry 模型聚合。所有两两对比的胜负记录被汇总成一个全局的强度分数。Bradley-Terry 模型是经典的成对比较排序方法,它的好处在于能把稀疏、甚至相互矛盾的 judge 偏好“池化”成一个连贯的排名。论文还加了一个正则化项 λ 作为伪计数,避免新节点因为对比数据太少而获得不稳定的分数。
有了 judge 分数之后,父节点的采样规则把三个信号揉在一起:
[
P(i) \propto \exp\bigl(-\alpha r_b(i) - \beta r_a(i) - \eta \log(1+v_i)\bigr)
]
其中 ( r_b(i) ) 是 judge 排名,( r_a(i) ) 是基准测试准确率排名,( v_i ) 是节点被选为父节点的次数。第一项和第二项让搜索偏向“看起来强”的节点,第三项惩罚被反复访问的节点,鼓励探索新的分支。
最关键的工程决策是disaggregated pipeline:扩展(生成新候选)和评估(跑基准测试)完全并行。一个节点还在跑基准测试的时候,judge 已经给出了足够的信号让它被选为父节点、继续生成下一代。这打破了“必须等评估结果才能继续搜索”的串行瓶颈。
研究成果
在 Polyglot-225 的完整基准上,SIFT 的数据很干净:
| 方法 | 编码模型 | Polyglot 准确率 | CPU 小时 | 墙钟时间 |
|---|---|---|---|---|
| Base Agent | Qwen3-30B | 20.0% | — | — |
| DGM | Qwen3-30B | 27.1% | — | — |
| HGM | Qwen3-30B | 30.5% | 347 | — |
| SIFT | Qwen3-30B | 31.1% | 224 | 6.7h |
| Base Agent | o3-mini | 14.2% | — | — |
| DGM | o3-mini | 30.7% | — | — |
| SIFT | o3-mini | 35.1% | 59 | 2.1h |
用 o3-mini 作为编码模型时,SIFT 在59 CPU 小时内达到 35.1% 的准确率,而 DGM 用了 80 个节点才到 30.7%。SIFT 的 CPU 耗时大约是 DGM 的十分之一。在 TerminalBench 上,judge 引导的搜索从起始的 29.2% 提升到 36.7%,no-judge 消融则没有提升。
论文还报告了一个有意思的发现:SIFT 发现的 agent harness 可以跨模型迁移。用 o3-mini 搜出来的 harness,换到 gpt-5-mini 和 gpt-5.4-mini 上跑,准确率依然稳定高于基线。这意味着 SIFT 优化的不是某个特定编码模型的“手感”,而是更通用的 agent 工作流设计。
实际落地应用的可能性
SIFT 直接面向的落地场景是agent harness 的自动化设计。目前 agent 的 prompt 结构、工具调用顺序、错误恢复策略基本靠人工调,SIFT 把这件事变成了一个可搜索的优化问题,而且成本降到了个人研究者和小团队能承受的范围。论文中的成本数据很说明问题:完整搜索 run 的 API 成本在 30-90 美元之间,单次 judge 对比只要 0.044 美元。另一个实际价值是judge 作为筛选器——在跑昂贵的基准测试之前,用便宜的 judge 把明显不好的候选过滤掉,这个思路可以直接迁移到任何需要人工或自动化评估候选方案的场景。
技术细节
Bradley-Terry 聚合的数学形式
BT 模型假设每个节点 ( i ) 有一个潜在的正强度参数 ( \theta_i ),节点 ( i ) 战胜节点 ( j ) 的概率为:
[
P(i \succ j) = \frac{\theta_i}{\theta_i + \theta_j}
]
SIFT 维护一个全局胜负矩阵 ( W ),其中 ( W_{ij} ) 是节点 ( i ) 被偏好于节点 ( j ) 的次数。每轮 judging 后重新拟合正则化 BT 模型,所有分数归一化使 ( \sum_i \theta_i = n )(( n ) 为节点数)。
Disaggregated Pipeline 的工作流
SIFT 的主循环是非阻塞的,每次迭代执行三个操作:
- 采样扩展:按 Eq. 1 的概率采样一个节点,生成候选修改,然后立即跑一个4 任务的“easy gate”把明显坏掉的补丁筛掉。
- Judge 对比与 BT 重拟合:把新 agent 和当前 top-10 的存档节点做两两对比,更新胜负矩阵,重解 BT 分数和排名。
- 入队评估:通过 easy gate 的新节点被插入评估优先队列,按 ( r_b(i) + r_a(i) ) 排序。评估和扩展在两个并行的进程中运行,互不阻塞。
Judge 模型的输入格式
论文比较了两种 judge 输入格式。“Diffs”变体提供根 agent 实现加上从根到当前版本的 diff 链;“Full files”变体提供完整的源文件。实验表明 judge 在这些格式下都能产生有效的排序信号,但judge 的价值主要在于排序而非绝对准确率预测——BT 排名与真实基准分数的 Spearman 相关系数在 ρ ≈ 0.71-0.72 之间,而单纯依赖搜索时的准确率来选择最佳 agent 并不可靠。
成本结构
| 模块 | 模型 | 单次成本 (USD) | 单次时间 (CPU Hours) |
|---|---|---|---|
| Self-Improve(扩展) | gpt-5-mini | 0.12 | 0.186 |
| LLM-Judge(两两对比) | gpt-5.4 | 0.044 | 0.0042 |
| Polyglot-50 完整评估 | o3-mini | 6.0 | 2.6 |
一个节点的 judge 成本(最多 10 次对比)约0.44 美元,而一次完整的 Polyglot-50 评估要6 美元、2.6 CPU 小时——差了一个数量级以上。SIFT 的整个策略就是围绕这个成本差异设计的。
研究设定
硬件与软件配置
所有实验在沙箱化的 Docker 容器中运行,每个容器隔离一个 agent 的评估环境。编码模型使用 Qwen3-Coder-30B-A3B-Instruct(简称 Qwen3-30B)和 o3-mini。自我改进模型和 judge 模型分开配置:Qwen3-480B 同时承担扩展和 judge 角色(在 Qwen3-30B 配置下),gpt-5-mini 作为自我改进模型,gpt-5.4 作为 judge(在 o3-mini 配置下)。
评估协议
论文沿用 DGM 的评估协议但做了精简:用一个4 任务的 easy gate快速过滤坏补丁,然后在一个50 任务的固定子集(Polyglot-50)上做中间评估,完整的225 任务 Polyglot留作最终 held-out 评估。搜索步数统一限制在30 步扩展,与 HGM 的 800 次评估预算对齐,确保比较公平。
消融设置
TerminalBench 上做了 judge vs. no-judge 的对照实验,两个 run 都从同一个起始 agent(14/50)出发,各跑 30 次扩展。Judge-guided run 的最佳 agent 在全量 89 任务上平均 36.7%,no-judge run 的最佳 agent 停留在起始水平(29.2%)。还额外比较了 gpt-5.4-high 和较弱的 gpt-5 作为 judge 的效果,发现弱 judge 仍能引导搜索到强候选(34.5%),但在 top-5 排名精度上明显退化。
综合分析
SIFT 最有价值的地方不是某个单项技术,而是把“评估”这件事重新定义为搜索中的一个可分解信号。先前的工作(DGM、HGM)把基准测试当成“真相”,搜索必须等待真相揭晓才能继续。SIFT 说:真相太贵了,我们先用便宜的代理信号(judge 对比)来导航,只在最后才去验证那些真正有希望的方向。这个思路的普适性很强——任何“生成-评估”循环中,如果评估的成本远高于生成,就应该考虑引入中间信号来做粗筛。
不过,SIFT 也有值得审视的局限。首先,judge 的可靠性高度依赖 judge 模型本身的能力。论文自己的数据就显示,gpt-5 作为 judge 时,top-5 内的 pairwise agreement 只有 0.50,而 gpt-5.4-high 是 1.00。如果 judge 模型本身对代码质量的判断有系统性偏差,搜索可能会被带偏。其次,Bradley-Terry 模型假设节点之间的比较是“可传递的”——如果 A 优于 B,B 优于 C,那么 A 应该优于 C。但代码修改的价值判断未必满足这个假设;一个在错误恢复上更好的版本和一个在工具调用效率上更好的版本,可能在不同任务上各有胜负,BT 模型会把这种“不可比性”强行压缩成一个一维分数。
另一个值得注意的细节是easy gate 的设计。论文用 4 个任务来快速筛掉“catastrophically bad”的补丁。这个设计很务实,但 4 个任务的信号噪声很大——一个补丁可能只是碰巧在这 4 个任务上失败了,就被直接丢弃。论文没有报告 easy gate 的假阴性率,这是一个实际部署时需要关注的参数。
从更宏观的视角看,SIFT 代表了自我改进研究的一个务实转向:从“能不能自我改进”到“能不能便宜地自我改进”。Gödel Machine 的理论框架追求的是全局最优的自我修改,SIFT 接受的是一个更谦逊的目标——在有限预算内找到足够好的 harness 设计。这种转向让自我改进从理论好奇变成了可操作的工程方法。
实践应用
如果你在工程中想借鉴 SIFT 的思路,有几个具体建议:
第一,先量化你的“生成-评估”成本比。SIFT 有效的根本前提是评估成本远高于生成成本。如果你的评估是自动化的、毫秒级的(比如单元测试),引入 judge 层可能反而增加噪声。但如果你的评估涉及人工评审、端到端集成测试、或者昂贵的模型调用,SIFT 的分层策略就值得考虑。
第二,judge 模型的选择要做分层设计。论文的结果暗示了一个实用的 tiered 配置:用便宜的 judge(比如 gpt-5 级别)做大部分粗筛,只在 frontier(BT top-5 左右)用强 judge 做精细排序。粗筛阶段 judge 的排名相关性已经不错(ρ ≈ 0.71),精细阶段再花钱买精度。
第三,disaggregated pipeline 是工程收益最大的部分。论文的消融显示,异步 pipeline 贡献了大部分速度提升,judge 的 speculative expansion 是在此之上的增量优化。如果你已经在做某种形式的 agent 搜索,先把扩展和评估解耦并行化,往往比引入更复杂的评分机制见效更快。
第四,注意 easy gate 的阈值调优。SIFT 用 4 个任务做 gate,在你的场景中这个数字需要根据任务分布和容错率来调整。如果任务之间方差很大,可能需要更多任务来避免假阴性;如果任务很同质,4 个可能够用。
第五,跨模型迁移性是一个值得验证的假设。论文的迁移实验是在同类编码模型之间(o3-mini → gpt-5-mini),如果你的场景涉及完全不同的模型家族(比如从闭源模型迁移到开源模型),harness 的迁移效果需要重新验证。
参考资料
- 原始论文: Self-Improvement via Fast Tree-search, Xinghong Fu, Aravinth Kulanthaivelu, Yutaro Yamada. arXiv:2609.19526, ICLR 2026. https://arxiv.org/abs/2609.19526