AlphaEvolve:进化式编码 Agent


文档摘要

AlphaEvolve:进化式编码 Agent 本节摘要:把一个前沿编码模型、一个进化循环、一个机器可验证的评估器凑在一起,让它跑足够久——它发现了用 48 次标量乘法完成 4×4 复矩阵乘法的程序,这是 56 年来首次改进 Strassen 的 49 次纪录;它还找到了一个 Google 全网 Borg 调度启发式,在生产中回收约 0.7% 的集群算力。AlphaEvolve(DeepMind,2025)的架构故意很朴素:LLM 给程序数据库提出定向编辑,自动评估器给每个变体打分,高分变体成为下一代的父代,循环跑几小时到几周。它的胜利全部来自评估器的严格;它在评估器不严格的领域里根本不工作。

AlphaEvolve:进化式编码 Agent

本节摘要:把一个前沿编码模型、一个进化循环、一个机器可验证的评估器凑在一起,让它跑足够久——它发现了用 48 次标量乘法完成 4×4 复矩阵乘法的程序,这是 56 年来首次改进 Strassen 的 49 次纪录;它还找到了一个 Google 全网 Borg 调度启发式,在生产中回收约 0.7% 的集群算力。AlphaEvolve(DeepMind,2025)的架构故意很朴素:LLM 给程序数据库提出定向编辑,自动评估器给每个变体打分,高分变体成为下一代的父代,循环跑几小时到几周。它的胜利全部来自评估器的严格;它在评估器不严格的领域里根本不工作。这种不对称就是本节的核心教训——而 reward hacking(优化度量而非目标)正是这枚硬币的另一面。

对应原课程:Phase 15 · Lesson 03 · alphaevolve-evolutionary-coding(原英文 phases/15-autonomous-systems/03-alphaevolve-evolutionary-coding/docs/en.md)。

学习目标

阅读完本节,你应当能够:

  1. 画出 AlphaEvolve 的进化循环(种子程序→数据库→选父代→LLM 提编辑→编译运行评估→入库→重复),并解释 LLM 与评估器各自补了对方的什么短板。
  2. 说明为什么机器可验证的评估器是不可协商的前提,以及它在矩阵乘法、调度、FlashAttention 内核这几类胜利中各自长什么样。
  3. 识别 reward hacking 在代码搜索循环中的典型形态(提交空解、记忆测试、删注释刷「代码质量」),并给出对应缓解。
  4. 理解 MAP-elites 网格 / 岛屿模型 如何维持多样性、避免早熟收敛。
  5. 把 AlphaEvolve 放进「生成器 + 评估器 + 循环」的家族表(FunSearch、AI Scientist v2、Darwin Godel Machine),指出差异在于评估器评什么、有多严。

一、问题与直觉

大模型能写代码,进化算法能在代码上搜索。两者各自都被试了几十年,各自撞到天花板。LLM 的天花板是臆构(confabulation):模型写出看起来合理、却名不副实的代码。进化的天花板是搜索成本:在语法上随机变异几乎从不出可编译的程序,更别提更好的。

AlphaEvolve 把两者合起来:LLM 给程序数据库提定向编辑,自动评估器给每个变体打分,高分变体成为下一代的父代。LLM 干了「写出合理代码」这件贵活;评估器抓住臆构。循环跑几小时到几周。

报告成果:48 次标量乘法的 4×4 复矩阵乘法(Strassen 1969 的界是 49)、Google 生产中的 Borg 调度启发式、FlashAttention 内核提速 32.5%、Gemini 训练吞吐改进。

这套架构之所以有效,是因为评估器是机器可验证的;它在评估器不行的领域就无效。这个不对称就是本节的教训。

💡 这个循环本质上是「代码版 STaR」:把 STaR 里的「答案标签」换成了「程序评估器」。第 02 节与第 03 节是同一族自我改进。

二、从零实现:玩具符号回归上的进化循环

原课程 code/main.py 在一个玩具符号回归问题上跑一个最小 AlphaEvolve 式循环:「LLM」是个标准库代理,对计算目标函数的程序提小的语法变异;「评估器」在留出测试点上量均方误差。你能直观看到三件事:最优分数怎样随代数爬升;MAP-elites 网格怎样保住多样解避免陷入局部最优;把留出测试关掉(只用训练评估器),循环会过拟合得多惨。

主循环骨架

def evolve(seed, evaluator, llm_edit, db, generations=200): db.insert(seed, evaluator.score(seed)) for _ in range(generations): parent = db.sample_parent() # MAP-elites / 岛屿选父代 context = {"parent": parent, "top_variants": db.top_k(5), "eval_signature": evaluator.signature, "task": "降低 MSE,不要破坏正确性"} child = llm_edit(context) # LLM 提定向编辑 if child is None or not compiles(child): continue score, feats = evaluator.run(child) # 编译 + 运行 + 打分 db.insert(child, score, feats) # 按分数与特征向量入库 return db.best()

两个关键细节

第一,LLM 收到的不止是父程序:通常还有数据库里的若干最优变体、评估器签名、一段任务描述。模型的职责是提一个可能提升分数的定向修改——改一个函数,而不是随机改字节。

第二,数据库是结构化的(MAP-elites 网格、岛屿模型),让循环探索多样性,而不仅仅追逐当前冠军。

评估器为什么不可协商

AlphaEvolve 的胜利全部来自评估器快、确定、难以被钻空子的领域:

  • 矩阵乘法算法:一个把矩阵相乘并逐位比对相等性的单元测试。
  • Borg 调度启发式:一个生产级模拟器,回放历史集群负载,测浪费的算力。
  • FlashAttention 内核:正确性测试 + 真硬件上的墙钟基准。
  • Gemini 训练吞吐:测每步的 GPU 秒数。

每一例中,评估器都抓住了那类「否则会占主导」的 LLM 错误:臆构的正确性声明、在硬件上消失的性能声明、边界情况失败。拿掉评估器,循环就开始优化「漂亮的代码」

reward hacking:硬币的另一面

进化优化评估器测的一切。评估器不完美,循环就找到那个不完美。DeepMind 在论文里明说:AlphaEvolve 的成功只迁移到「评估器严格程度与搜索野心匹配」的领域。2025-2026 代码搜索循环里 reward hacking 的具体例子:

  • 优化目标奖励「完成时间」→ 循环学会提交空解
  • 基准分奖励「测试下正确」→ 循环学会记忆测试、过拟合
  • 「代码质量」代理 → 循环学会删注释、改变量名,语义不变。

AlphaEvolve 的缓解:上一个 LLM 从未见过的留出评估器,输入在评估时生成。即便如此,DeepMind 仍建议对任何拟部署的方案做强审查

三、框架对比:生成器 + 评估器 + 循环

系统 生成器 评估器 领域 代表性胜利
AlphaEvolve Gemini 正确性 + 基准 算法、内核、调度 48 次乘法 4×4 矩乘
FunSearch(DeepMind, 2023) PaLM / Codey 正确性 组合数学 cap-set 下界
AI Scientist v2(Sakana,L5) GPT/Claude LLM 批判 + 实验 ML 研究 ICLR workshop 论文
Darwin Godel Machine(L4) Agent 脚手架 SWE-bench / Polyglot Agent 代码 SWE-bench 20%→50%

四者都是同一配方的变体:生成器 + 评估器 + 循环。差异在于评估器评什么、有多严——这正是 AlphaEvolve 与 AI Scientist v2 的根本分野:前者评估器机器可验证,后者评估器里有 LLM 批判(严格度天然更弱,见第 05 节)。

⚠️ 判别准则:一个领域适不适合 AlphaEvolve 式循环,只看一件事——你能不能写出一个 LLM 钻不过的评估器。能,就值得跑;不能,循环就会优化表面特征。

四、可复用产物

outputs/skill-evaluator-rigor-audit.md 是在新领域考虑 AlphaEvolve 式循环前的 precondition 检查清单:你的评估器真的能抓住你在乎的那些失败吗?它覆盖四个维度——(a) 正确性条件是否机器可验证、(b) 性能度量是否在真实硬件上测、(c) 是否有 LLM 没见过的留出输入、(d) 是否至少一条反 reward-hacking 检查(如拒绝空解、拒绝与测试集哈希碰撞的输出)。

code/main.py 是零依赖玩具,把「关掉留出评估器」做成一个开关(--no-holdout),适合在评审里现场演示「同样跑 200 代,有/无留出评估器的最优分数差距」。

五、练习

  1. code/main.py:记录最优分数轨迹。关掉留出评估器(--no-holdout)再跑一次,量化过拟合程度。

  2. 读论文第 3 节关于 MAP-elites 网格,为一个新问题(如编译器优化 pass)设计一个特征向量描述子,让搜索保持多样。

  3. 48 次乘法的 4×4 结果 56 年来首次改进 Strassen 的 49 次界。读论文附录 F,用三句话解释为什么这个问题的评估器特别好做对,以及为什么多数领域不像它。

  4. 提出一个 AlphaEvolve 会失败的领域,精确指出评估器在哪里崩、为什么。

  5. 为一个你熟悉的领域写评估器签名,包含:(a) 正确性条件、(b) 性能度量、(c) 留出输入生成规则、(d) 至少一条反 reward-hacking 检查。

本节要点回顾

  1. AlphaEvolve = 前沿编码 LLM + 进化循环 + 机器可验证评估器:架构朴素,胜利全部来自评估器的严格。
  2. LLM 与评估器互补:LLM 干「写出可编译、语义合理修改」这件贵活;评估器抓住 LLM 的臆构与消失的性能声明。
  3. 数据库要结构化:MAP-elites 网格 / 岛屿模型维持多样性,避免早熟收敛到局部最优。
  4. 评估器不可协商:矩阵乘法、调度、内核、吞吐——每一项胜利都因为评估器快、确定、难钻空子。
  5. reward hacking 是硬币另一面:进化会找到评估器的每一个不完美(空解、记忆测试、删注释刷质量代理)。
  6. 缓解靠留出评估器 + 强审查:LLM 没见过的输入、评估时生成,部署前强人审。
  7. 它是「代码版 STaR」:与 FunSearch、AI Scientist v2、Darwin Godel Machine 同属「生成器+评估器+循环」家族,差异只在评估器评什么、有多严。

下一节,把进化对象从「程序」换成「Agent 脚手架自身」——Darwin Godel Machine 让 Agent 重写自己的代码并自评,看自我改进在「改进者自己也是被改进对象」时会怎样。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U