Self-Taught Optimizer (STOP): Recursively Self-Improving Code Generation
STOP:用 improver,改进 improver
从一个调用 language model 的程序 improver 出发,让它优化自身,在代码生成流程中探索 recursive optimization。
Classification & RSI Relation 1 Variant · Editorial Assessment
主题标签用于检索;以下按实际 Experiment / Variant 判断更新对象与证据。Not Demonstrated 表示这项研究未提供相应证据。
Main Method
- Update Target
- Architecture Evolution
- Loop Role
- Proposer · Selector · Integrator
- Persistence
- Across Improvement Rounds
- Recursive Reuse
- Demonstrated
- Evidence
- Task Gain · Recursive Reuse
- System Boundary
- Optimizer Code;以该论文实际可更新组件为边界,固定部分见下方判定。
- Feedback
- 人工给定 utility function 评估候选程序;improver 通过下游任务效用获得自身修改的 feedback。
- Evidence Scope
- 论文明确说明 base language model 没有改变,因此这不构成完整的 Recursive Self-Improvement。 已核验固定版本的相关方法与主要结果;未独立复现。
更新的 Improver 源码再次用于修改 Improver,属于程序层 Recursive Reuse;LLM 与外部任务分布保持固定。作者对更广 RSI 使用较窄表述,本条只判断明确的程序边界。
检查原文设置 ↗原论文明确提出或报告的内容
相关文献中已有的知识与结论
基于证据的解释、重建或教学推演
待验证的猜测、实验计划或新研究提案
Idea Reconstruction 是从已知背景出发的推演,不代表作者真实心理过程。Follow-up 是研究提案;相关工作比较不等于已证实 Novelty。教学示例与原文案例在正文中区分。
Contents · 12 Questions
Core Intuition
用一个清楚的视角抓住方法本质。
STOP 将程序 improver 本身作为待优化程序,recursive objective 因而从一次解题转向如何更好地 search 解法。改进是否有效由下游效用判断,保存的是新的优化代码;这里通过 recursion 改变的是组织 language model 调用的算法,而非 language model 的参数。
Method & Worked Example
沿着输入、处理、输出走完 Pipeline。
沿用原文程序优化任务的接口,作一个简化演示:输入是初始求解程序 s、评分器 u 和固定 LLM。Seed Improver 采样多个改写版本,执行评分后返回最好者。Meta 阶段把 s 换成 Improver 源码,把 u 换成“它改进一组程序后的平均得分”。输出可能是带 Beam Search 或候选重用的新 Improver;随后用这个新版继续优化自身。原文确实分析了多种此类搜索策略,具体简化输入并非原文样本。
Mathematical Foundations
从符号、直觉与简单例子理解理论。
先区分两层函数。u(s) 给一个解打分;I(u,s,L) 接收评分器、原解和 LLM,返回新解。把 I 放到多道任务上,平均最终得分得到 Meta-Utility。于是 I 也可以被自身当作字符串程序修改。递归写法定义了一个过程,不能单凭公式推出每步必然增益;有限样本 Meta-Utility 与真实任务分布之间还存在泛化误差。
s′ = I(u, s, L) û(I) = (1/|D|) Σ_(u,s)∈D u(I(u,s,L)) I_(t+1) = I_t(û, I_t, L)
先看内层:u 是给程序打分的函数,s 是待改程序,L 是可调用的语言模型;I 返回修改后的 s′。第二式把一组任务 D 中这些修改结果的分数取平均,从而得到给 Improver 打分的函数 û。最后,将待改程序的位置换成 I_t 自己,并将评分函数换成 û,输入输出类型就闭合了。比如 I_t 原来只提一个候选,修改后会提三个候选并择优,下一轮就能用这个新过程继续修改 Improver。候选数增加也增加成本,因此更高分需要与等预算搜索比较。
Experiments & Claims
Research Question → Experiment → Answer
Question:改进后的 Improver 是否更能帮助下游任务?→ Experiment:比较 Seed 与演化 Improver 在程序优化任务上的效用,并分析产生的搜索策略和迁移。→ Answer:作者报告有限任务上的增益,同时单独检查了生成代码尝试绕过 Sandbox 的行为;性能实验不等于对所有程序的安全或泛化保证。
Takeaways
这篇论文改变了哪些判断?
STOP 的关键是把 Improver Quality 定义为它让别人变好的程度。它不要求更新 LLM Weights,但也没有覆盖全系统。读代码时要追踪两层预算:优化 Improver 的成本,以及使用它解决每个新任务的成本。
One-Week Reproduction
用一周检验一个最小且明确的命题。
Day 1–2:写五类简单程序任务及隐藏输入。Day 3–5:用固定 LLM、固定调用上限比较 Seed Best-of-N 与两轮自我修改的 Improver。Day 6–7:在未见函数族上评估,每次记录实际 LLM 调用和执行次数。只检验搜索策略的迁移,不以几次成功推断无界 RSI。
Counterexample Design
如何构造有辨识力的反例?
令训练评分器总是先执行小输入,而隐藏任务包含超大输入及失败超时。一个学会加大无意义搜索或利用固定测试顺序的 Improver 可能在训练上很好。严格控制执行预算后若优势消失,就能将机制收益与预算利用区分。
Follow-up Research
从缺陷与需求推导新的研究问题。
后续相关工作 HyperAgents 已研究可编辑 Meta-Agent,并用受控的 Improvement@k 比较产生更好后继的能力。因此,仅增加 Improver 评测不足以支撑新颖性。
Sources & Verification
阅读已固定版本的原文 Background、方法与主要结果,结合下列相关文献撰写。Paper Claim 表示作者报告,未独立复现;Inference 包括数学教学推演与 Idea Reconstruction。One-Week Reproduction、Counterexample 和 Follow-up 均为待执行提案,Novelty 尚需更全面的文献与实验检验。
- [1] Self-Taught Optimizer (STOP): Recursively Self-Improving Code Generation · v3 ↗原文 Background、Method / Formalization 与主要实验或理论结论。数字沿用原文设置;未独立运行完整实验。
- [2] ReAct: Synergizing Reasoning and Acting in Language Models ↗相关方法与研究背景;用于说明具体差异,不能替代对本篇结论的验证。
- [3] Large Language Models as Optimizers ↗相关方法与研究背景;用于说明具体差异,不能替代对本篇结论的验证。
- [4] HyperAgents ↗Follow-up 的相关工作核查;晚于原论文的研究仅用于评估提案,不作为作者当时的知识或动机。
