harness_evolve/notes/ref20_alphaevolve.md

AlphaEvolve: A Coding Agent for Scientific and Algorithmic Discovery

一句话总结:把「LLM 变异 + 进化数据库 + 自动评测器」拼成一个能改整份代码文件的编码 Agent——不是让模型一次性写出答案,而是让它在程序空间里一代代地试错、打分、择优、再变异,最终在数学发现(56 年来首次把 4×4 复数矩阵乘法从 49 次降到 48 次标量乘法、改进 Erdős 最小重叠问题、11 维 kissing number)和 Google 生产基础设施(数据中心调度省 0.7% 算力、Gemini 训练核加速 23%、TPU 电路精简、FlashAttention 提速 32%)上都拿到了真实、可证明正确的新结果。


TL;DR 速览

tags: #进化式代码搜索 #coding-agent #llm-guided-evolution #算法发现 #自动评测 #diff-editing #map-elites #test-time-compute #FunSearch谱系

related: [[ref09_meta-harness]](把本文列为"标量分数驱动的程序进化"对照)· [[ref17_self-harness]](自我改进谱系里引本文为 AlphaEvolve[15])· [[ref13_adas-automated-design-agentic-systems]](同为"用 meta 过程搜索出系统")· [[ref21_shinkaevolve]](后继:更省样本的进化)· [[ref22_thetaevolve]](进化式代码搜索谱系)· [[ref19_gepa]](反思式文本优化,另一支)


摘要

我们提出 AlphaEvolve——一个进化式编码 Agent,它显著增强了 SOTA LLM 在"攻克开放科学问题、优化关键计算基础设施"这类极难任务上的能力。AlphaEvolve 编排一条自主的 LLM 流水线,任务是通过直接改代码来改进一个算法;用进化方法、持续从一个或多个评测器接收反馈,迭代地改进算法,可能带来新的科学与实践发现。

论文展示的广度:在 Google 大规模计算栈上,AlphaEvolve 发现了更高效的数据中心调度算法、给硬件加速器电路设计找到功能等价的化简、并加速了它自己底层 LLM 的训练;在数学与计算机科学上,它发现了可证明正确、超过 SOTA 的新算法——尤其是找到了用 48 次标量乘法 相乘两个 4×4 复数矩阵的过程,为这一设定下 56 年来对 Strassen 算法的首次改进。作者相信 AlphaEvolve 及类似编码 Agent 能在科学与计算的许多领域产生重大影响。


1 介绍:从"答对题"到"做出发现"

论文开篇给出高价值知识发现的一般图景:构思 → 探索 → 在不靠谱的假设上回溯 → 实验 → 验证,是个漫长过程。近期大家很想用 LLM 自动化其中大部分——底气来自 LLM 惊人的能力、test-time compute 的加持、以及"语言生成 + 行动"的 agent 崛起。但作者点破现状:让 LLM 流水线一路走到"做出全新科学或实践发现"仍然很难

AlphaEvolve 的破法是把进化计算LLM 代码生成结合:它专注于"候选可被自动评测"的科学与工程发现问题,把候选(新数学对象、实用启发式)表示成算法,用一组 LLM 去生成、批判、进化这一池算法。关键在于——

[!TIP] 为什么"自动评测"是整个方法的地基?(讲透) LLM 会幻觉:它可能自信地给出一个"看起来对但其实错"的构造。AlphaEvolve 的核心设计是让 代码执行 + 自动评测成为唯一的地面真值——LLM 只负责"提议",是否采纳由评测函数 h 打分说了算([44] 讲幻觉综述)。这样做有三重好处: 1. 过滤幻觉:任何错误提议直接被 0 分淘汰,不会污染后续进化; 2. 可长跑:因为不靠人判断,进化可以跑成千上万步而不累积错误(对比 AI Co-Scientist 那种"自然语言假设 + 自然语言评价"就很难长跑); 3. 代价:也正因如此,只有"能写出机器评测器"的问题才在射程内——需要人工实验的问题(多数自然科学)被排除在外。这是全文最重要的适用边界。

一个反直觉但关键的策略:即便你想要的最终解不是一个算法(比如你要的是一个具体的数学构造 / 一张图),让 AlphaEvolve 去进化"如何构造出该解"的算法,往往比直接搜索那个解更有效 [83]。此时"发现算法"只是工具性目标,却出奇地好使。

[!TIP] 本文相对 FunSearch [83] 的跃迁(Table 1 逐行对照) AlphaEvolve 是 FunSearch 的"大号升级"。为什么这几点升级是质变而非量变,见下面举例:

维度 FunSearch [83] AlphaEvolve
进化对象 单个函数 整份代码文件(跨多函数/组件)
代码规模 10–20 行 数百行
语言 仅 Python 任意语言(含 Verilog)
评测预算 需快(单 CPU ≤20min) 可跑数小时、并行、上加速器
LLM 采样量 数百万 数千次即可
底座 LLM 小模型、大模型无增益 SOTA LLM 越强越好
上下文 极简(只给上一个解) 富上下文 + 反馈
目标 单指标 多指标同时优化

举例理解"整文件 vs 单函数"的意义:矩阵乘法那个应用里(§3.1),AlphaEvolve 一次改动同时动了优化器(adam→adamw)、权重初始化、损失函数、超参 sweep 四个组件(见 Figure 4),而且这些改动必须彼此一致——这是 FunSearch"只改一个函数"根本表达不了的搜索空间。

射程:作者用 AlphaEvolve 攻了算法设计的开放问题(矩阵乘法)、50+ 个构造性数学开放问题、以及 Google 计算栈四层的工程优化(Borg 调度、Gemini 训练核、TPU 电路、Transformer attention)。


2 AlphaEvolve 方法:一个"LLM 驱动的进化循环"

Figure 1: AlphaEvolve 高层总览

Figure 1 逐元素解读(全文的"心智模型图"):整张图分上下两块—— - 上方绿框「Human defines "What?"」:人只负责定义问题是什么——设定评测标准、给一份初始解、以及可选的背景知识。注意人负责"怎么解"。 - 下方蓝框「AlphaEvolve figures out "How?"」:系统自动搞定怎么解。里面是一个四组件闭环: - Prompt sampler(蓝,左上) → 用 rich context containing past trials and ideas(含历史试验和想法的富上下文)喂给 → - LLMs ensemble(红,右上) → 产出 proposals of improved programs(改进程序的提议)给 → - Evaluators pool(黄,右下) → 把 programs with quality scores and other feedback(带质量分和其他反馈的程序)交给 → - Program database(绿,左下) → 再把 programs to improve and act as inspiration(待改进 + 当灵感的程序)回喂给 Prompt sampler,闭环。 - 两个跨框箭头:绿框→蓝框是 Problem definition(问题定义下达),蓝框→绿框是 Improved solution(改进解上交)。 - 一句话读懂这就是一个"采样灵感 → LLM 变异 → 评测打分 → 存库择优"的进化飞轮,人只在最外层定义目标与评分。

Figure 2: AlphaEvolve 发现过程的展开视图

Figure 2 逐元素解读(把 Figure 1 拆到可实现的粒度): - 顶部输入行Scientist / Engineer 提供四样东西——① Initial program with components to evolve(标好待进化块的初始程序)、② Evaluation code(评测代码)、③ Prompt template and configuration(提示模板与配置)、④ Choice of existing or custom LLMs(选用哪些 LLM);产出 Best program。 - 中间「Distributed Controller Loop」——这是方法的伪代码心脏,6 行讲清一次迭代: python parent_program, inspirations = database.sample() # ① 从进化库采一个父代 + 若干灵感 prompt = prompt_sampler.build(parent_program, inspirations)# ② 组装富上下文 prompt diff = llm.generate(prompt) # ③ LLM 生成 diff(SEARCH/REPLACE 块) child_program = apply_diff(parent_program, diff) # ④ 应用 diff 得到子程序 results = evaluator.execute(child_program) # ⑤ 评测器执行、打分 database.add(child_program, results) # ⑥ 带结果注册回库 - 底部四组件Evaluators pool / LLMs ensemble / Prompt sampler / Program database,对应上面 6 行里被调用的四个子系统。 - 闭环含义:控制器异步地反复跑这 6 行,每跑一次库里就多一个"带分数的程序",进化就多爬一步。

下面按论文小节把每个组件讲透。

2.1 任务规范(Task specification)

评测(Evaluation):用户必须提供一个把解映射到一组标量指标的函数 h(约定为"越大越好"),在本文里通常实现为一个签名固定的 Python 函数 evaluate,返回一个标量字典。执行 h 可能只需几秒,也可能触发大规模计算(如跑一个搜索算法、或训练+评一个 ML 模型)。

API(进化块标注):为了能进化一份代码里的多个组件,AlphaEvolve 让用户用注释标记"待系统进化"的代码块:

# EVOLVE-BLOCK-START
...  # 这里的用户代码是"初始解",会被 AlphaEvolve 改进
# EVOLVE-BLOCK-END

块内代码是初始解,块外代码是把各进化块"串起来、可被 evaluate 调用"的骨架。初始实现必须完整但可以很简陋(比如返回常数的单行函数即可)。

[!TIP] 抽象层次的自由(Flexibility in choosing the abstraction)——这是很聪明的一招 同一个问题,AlphaEvolve 能用很不同的方式去建模,尤其当"进化的程序不是最终产物、而是发现解的手段"时: - 直接进化解的原始字符串表示(经典进化算法风格); - 进化一个"从零构造解"的定形函数(FunSearch [83] 的做法); - 进化一个定制搜索算法,在固定算力预算内去找解; - 甚至协同进化"中间解 + 搜索算法"——让每个搜索算法专门为改进某个特定中间解而生。

作者的经验法则:不同抽象层对不同问题更优。例如"解高度对称"的问题,进化构造函数更有利(这类解往往更简洁 [83]);而"解非对称"的问题,进化定制搜索算法更好使。这条经验在 §3.2 的数学发现里被反复用到(多阶段自适应搜索启发式)。

2.2 Prompt sampling(提示采样)

因为用 SOTA LLM,AlphaEvolve 能提供长上下文并做多种定制。主 prompt 包含从库里采样的多个历史解 + 如何提改动的系统指令。此外可加:显式上下文(问题细节、公式、代码片段、相关文献 PDF)、随机格式化(模板占位符 + 人给的多个替代项,按概率分布实例化以增多样性)、渲染的评测结果(程序 + 执行结果 + 分数)、以及 meta prompt evolution(让 LLM 自己在一个单独数据库里"进化提示本身",与解程序类比)。

2.3 Creative generation(创造性生成)与 diff 格式

LLM 的核心角色是消化历史解的信息、提出新颖多样的改进。AlphaEvolve 模型无关,但消融显示"底座 LLM 越强,AlphaEvolve 越好"。

[!IMPORTANT] diff-based 编辑(SEARCH/REPLACE 块)——AlphaEvolve 落到大代码库的关键机制 当 LLM 要改现有代码(尤其大代码库)时,AlphaEvolve 要求它以一串特定格式的 diff 块给出改动: ``` <<<<<<< SEARCH

要在当前程序里精确匹配并替换掉的原始代码块

=======

用来替换原始块的新代码块

REPLACE ``SEARCH=======之间是**要精确匹配**的原文段,=======REPLACE` 之间是新段。这允许对代码特定部位做定向更新。当被进化的代码很短、或整体重写比小改更合适时,AlphaEvolve 也可配置成让 LLM 直接输出整块代码

为什么这很重要:这正是 [[ref09_meta-harness]]/[[ref17_self-harness]] 里"diff / 有界编辑"的思想源头之一——用 diff 而非整文件重写,既让 LLM 能精准动刀,又天然把改动局部化、可审计

Models used(LLM 集成):用 Gemini 2.0 Flash + Gemini 2.0 Pro 的组合。

[!TIP] 为什么要"快模型 + 慢模型"混用?(讲透 + 直觉) - Gemini 2.0 Flash:延迟低 → 候选生成率高 → 单位时间探索的想法更多(进化的"广度"); - Gemini 2.0 Pro:能力更强 → 偶尔给出高质量、能显著推进搜索甚至带来突破的建议(进化的"深度")。 - 组合的收益:这是一个 explore/exploit 的算力分配——用便宜模型把搜索空间铺开,用贵模型偶尔打穿。类比 [[ref09_meta-harness]] 用单一强提议者(Opus)、Self-Harness 用被评估模型自身,AlphaEvolve 走的是"模型集成分工"路线。

2.4 Evaluation(评测的三个增强机制)

执行 h 是评测的本体,但 AlphaEvolve 加了三个可选机制让评测更灵活高效:

[!TIP] 什么是 evaluator cascade(评测级联 / 假设检验式剪枝)? 用户可以指定一组难度递增的测试用例,新解只有在前面所有阶段都足够好时才进入下一(更难/更贵)阶段评测。此外,新解会先在小规模上评,把有 bug 的程序早早筛掉。这本质是"便宜的测试先跑、通过才配跑贵测试"的漏斗,用来在海量候选里快速剪枝——直觉上就像招聘先做电话筛、通过才安排 onsite。这个机制让 §3.1 矩阵乘法里"多随机种子跑张量分解"这种昂贵评测变得可行。

Multiple scores(多目标):AlphaEvolve 允许优化多个用户指标。有趣的是——即使你只在意一个目标指标,同时优化多个指标常常也能把那个目标指标做得更好。作者的解释:擅长不同评测标准的程序往往有不同的结构/逻辑,把这些"各有所长"的高分程序塞进 prompt,能刺激 LLM 生成更多样的候选,从而更可能撞见对目标指标极其有效的新路子。

2.5 Evolution(进化数据库)

进化中会不断产生"带评测结果(分数 + 程序输出)"的解,存进进化数据库。其首要目标是把过去探索过的想法在未来代际里最优地重新端上来。核心挑战是平衡探索与利用——既要持续改进最好程序,又要维持多样性以探索整个空间。

[!TIP] 什么是 MAP-Elites + 岛屿模型(island model)?(本文进化库的算法灵感) AlphaEvolve 的进化库融合了两个经典思想: - MAP-Elites [74]:不是只保留"全局最优一个",而是把解按若干行为描述维度划成网格(map),每个格子里保留一个精英(elite)。好处是天然维持行为多样性——即使某个格子的解全局分数不高,它可能代表一条独特的解题风格,日后能被杂交出突破。类比:不是只留班级第一名,而是"每种解题流派各留一个尖子"。 - 岛屿模型(island-based population)[83,97]:把种群分成若干半隔离的"岛",各岛独立进化,偶尔迁移(migration)个体。这抑制了"整个种群过早收敛到单一局部最优",让不同岛探索不同区域。 - 在本文的角色:两者结合让进化库既保住最优、又保住多样性,是长跑进化不"早熟收敛"的关键。这也是 [[ref09_meta-harness]] 讨论"程序进化对照"时点名 AlphaEvolve 用 MAP-Elites/island 的地方。

2.6 Distributed pipeline(分布式流水线)

用 Python asyncio 实现的异步计算流水线:许多计算并发跑,某步若依赖别的未完成计算就阻塞等待。包含控制器 + LLM 采样器 + 评测节点。整条流水线为吞吐量(而非任何单次计算的速度)优化,目标是"在给定总算力预算内,最大化能提议并评测的想法数"。

[!NOTE] 把方法论一句话钉住:AlphaEvolve = 「富上下文 prompt(2.2)→ 强 LLM 集成生成 diff(2.3)→ 级联/多目标/并行评测(2.4)→ MAP-Elites+岛屿进化库择优重采(2.5)」在异步吞吐流水线(2.6)上反复循环,唯一地面真值是自动评测器。它把 LLM 从"一次性答题者"变成了"进化搜索里的智能变异算子"。


3 成果:数学发现 + 生产基础设施

3.1 更快的矩阵乘法(张量分解)

[!TIP] 什么是 matrix multiplication tensor rank(矩阵乘法张量的秩)?(本节的数学核心概念) 自 Strassen [95] 起就知道:两个矩阵相乘的算法空间,可表示为把一个给定 3D 张量分解成若干秩一(rank-one)张量的问题。这个分解的秩(项数)恰好等于计算该矩阵积所需的标量乘法次数。 - 举例:把 \(\langle m,n,p\rangle\) 记作"\(m\times n\) 矩阵乘 \(n\times p\) 矩阵"对应的张量。朴素算法乘 2×2 矩阵要 8 次乘法(秩 8);Strassen 发现秩 7 的分解 → 递归用下去就能亚立方地乘大矩阵。秩越低 = 乘法越少 = 算法越快。 - 难在哪:即便最简单的 3×3 矩阵,最小可达秩至今未知。前人用过交替最小二乘 [93]、深度强化学习(AlphaTensor [26])、定制搜索 [47],数十年仍是开放问题。 - AlphaEvolve 怎么做:它不直接搜分解,而是进化一个"基于梯度的搜索算法"(初始含 initializer、重构损失、Adam 优化器),跑多随机种子 + 评测级联,以"每个目标达到的最低秩 + 达此秩的种子比例"作为爬坡信号。为保证分解精确(避免数值误差),评测时把每个元素四舍五入到最近整数或半整数,并在 prompt 里用自然语言要求算法生成近整数解。

头条结果(Table 2):AlphaEvolve 改进了 14 个矩阵乘法目标的 SOTA。对 \(\langle 4,4,4\rangle\)——把 Strassen 递归用会得秩 49(任意域都成立);Fawzi 等 [26] 在 2 元域下找到秩 47;但在特征 0 的任意域上,56 年来"秩 <49"是开放问题AlphaEvolve 是第一个找到"用 48 次乘法相乘两个 4×4 复数矩阵"的方法

\(\langle m,n,p\rangle\) 最佳已知 [ref] AlphaEvolve
\(\langle 2,4,5\rangle\) 33 [42] 32
\(\langle 3,4,7\rangle\) 66 [91] 63
\(\langle 4,4,4\rangle\) 49 [95] 48
\(\langle 4,5,6\rangle\) 93 [48] 90
\(\langle 5,5,5\rangle\) 93 [72] 93(追平)

[!NOTE] 一个重要的技术注脚(原文脚注 3):确实存在"用少于 49 次乘法"的算法,但它们不对应矩阵乘法张量的分解,因此不能递归地用于相乘更大的矩阵——AlphaEvolve 的 48 次分解的价值恰恰在于它一个合法张量分解、可递归。

Figure 4: AlphaEvolve 为矩阵乘法提出的代码改动(diff)

Figure 4 逐元素解读(这张图是"diff-based 编辑 + 整文件进化"的最佳实证): - 左侧细长条:这一轮 AlphaEvolve 提出的完整 diff 的缩略全貌——绿色是新增行、红色是删除行,可见改动贯穿整个文件的多处(放大版在附录 Figures 9a–9c)。 - 右侧三块高亮摘录(对应三个被改的组件): - top right(优化器 + 权重初始化):把 optax.adam(...) 改为 optax.adamw(..., weight_decay=...);并把初始化 scale 乘 0.2"以鼓励找低秩解"。 - middle right(损失函数):加入离散化损失dist_to_half_ints / dist_to_ints,鼓励元素取整数或半整数)、幻觉损失(随机替换值以促探索)、目标张量加噪、软裁剪、余弦退火权重等一整套。 - bottom right(超参 sweep)hyper.zipit([...]) 里新增了 discretization_weighthallucination_probgrad_noise_stdhalf_int_start 等一大批新超参及其区间。 - 图注关键信息这些改动"高度非平凡,进化过程中需要 15 次变异(15 mutations)"——即最终这个强搜索算法不是一步生成的,而是跨 15 代逐步累积出来的。这正是"进化 vs 单次采样"的价值所在。

大多数 Table 2 结果(含 \(\langle 4,4,4\rangle\))都从简单初始程序得到;但对某些参数,用研究者自己的想法(如给评测函数加随机性、用进化式方法)播种初始程序能进一步提升——凸显了"研究者 × AlphaEvolve"科学协作的可能。

3.2 为大量开放数学问题定制搜索算法

设置:应用于精选的 50+ 个数学问题,横跨分析、组合、数论、几何 5+ 个分支,在众多具体参数下评测。结果:~75% 追平最佳已知构造、~20% 发现更优新对象(改进 SOTA);所有情形的起点都是简单或随机构造。

[!TIP] 关键方法创新:进化"搜索启发式"而非"构造本身"(多阶段自适应搜索) 对目标函数评测快的问题(数学里常见),作者用迭代精炼策略:每一代 AlphaEvolve 进化一个"搜索启发式程序",给它固定时间预算(如 1000 秒)和"上一个最佳启发式找到的最好构造",让它在此基础上找更好的。于是进化选择的是"擅长改进已经很好的解"的启发式。最终构造往往是一串专门化启发式的接力——早期启发式擅长从随机/简单初态大步前进,后期启发式擅长在近最优配置上精调。这种"多阶段、自适应搜索策略的自动发现"手工很难复制,是超过 SOTA 的关键。

具体新结果: - 分析:改进多个自相关不等式的最佳已知界;打磨一个 Fourier 分析里的不确定性原理构造 [33] 得到略好上界。 - 组合/数论:为 Erdős 最小重叠问题 [25] 建立新上界(略超此前记录 [40])。 - 几何/装填11 维 kissing number 找到 593 个不重叠单位球同时触碰中心球的配置(超过此前记录 592 [31]);以及若干装填问题(最小化最大/最小距离比、多边形装填、Heilbronn 变体)的新结果。

多数发现是外部数学家 Javier Gomez Serrano 与 Terence Tao 建议的开放问题(并指导如何formulate成 AlphaEvolve 的输入)——凸显 AI 发现引擎与人类数学专长的协同。

3.3 优化 Google 计算生态

3.3.1 数据中心调度(Borg)

问题:把计算作业调度到机群(Borg [102] 编排)本质是两变量向量装箱(vector bin-packing)——机器是有 CPU/内存容量的箱子,作业是有资源需求的物品。低效分配会造成搁浅资源(stranded resources):一台机器某种资源(如内存)耗尽而其他资源(如 CPU)还空着,就再也接不了活。启发式函数吃"作业的 CPU/内存需求 + 机器的 CPU/内存可用量",输出机器优先级分。因为它只对"Borg 已判定可行的机器"重排序,调度决策天然正确(correct by construction)

Figure 6: AlphaEvolve 发现的 Borg 调度启发式函数

Figure 6 逐元素解读: - 左侧代码:AlphaEvolve 发现的启发式 alpha_evolve_score(required, free)——先算 cpu_residual = required.cpu/free.cpumem_residual = required.mem/free.mem,再返回 -1.0 * (cpu_residual + mem_residual + mem_residual/cpu_residual + cpu_residual/mem_residual)。关键在那两个交叉比值项 mem/cpu + cpu/mem:它们在"两种资源残差不平衡时"给出惩罚,从而偏好让 CPU、内存被均衡消耗,避免一种先耗尽造成搁浅。 - 右侧热力图:横轴 CPU residual、纵轴 Memory residual,黄色=高分、紫色=低分。可以看到高分黄色区集中在"两个残差都中低且相近"的左下-中部对角带,而任一残差趋于 0 或 100% 的边缘都是低分紫色——直观印证了"惩罚不平衡"的设计。 - 成效:部署到全 fleet 后,实测确认持续平均回收 0.7% 本会搁浅的算力。选 AlphaEvolve 而非深度 RL,是因为代码解在可解释性、可调试性、可预测性、易部署性上对关键系统更友好。

3.3.2 Gemini 训练核工程

问题:Gemini 建在 JAX 上、用 Pallas 写定制核(kernel)。核里矩阵乘法的tiling(分块)策略——把大矩阵乘法切成小子问题以平衡计算与数据搬运——极大影响速度。传统靠"搜索式 autotuning(每换输入形状就得重调、打断研究流)"或"手写启发式(工程瓶颈,要深懂核与硬件)"。

AlphaEvolve 优化这个核的 tiling 启发式,目标是最小化真实 TPU 上的运行时;核正确性by construction保证(只改分块策略、不改底层数学运算)。自动采集真实核输入形状,一半做训练集、一半做评估集测泛化。结果:平均 23% 核加速、Gemini 整体训练时间 -1%;核优化周期从几个月缩到几天。已部署上线——这标志着 Gemini 通过 AlphaEvolve 优化了它自己的训练过程

3.3.3 硬件电路设计(TPU RTL)

AlphaEvolve 被挑战去优化一个已高度优化的 Verilog 实现(TPU 矩阵乘法单元里的关键算术电路),目标是减面积、减功耗、保功能。它找到一个简单的代码重写去掉了不必要的比特,被 TPU 设计师验证正确(虽然下游综合工具也能独立发现,但 AlphaEvolve 在 RTL 阶段就贡献了优化)。将集成进下一代 TPU——这是 Gemini 经 AlphaEvolve 对 TPU 算术电路的首次直接贡献。优势:改动直接用 Verilog(硬件工程师标准语言)表达,利于建立信任、简化采纳。

3.3.4 直接优化编译器生成的代码(FlashAttention)

问题:Transformer 的核心 attention 常用 FlashAttention [22] 实现,在栈里是 Pallas 核 + JAX 高层代码,经 XLA 编译成一系列中间表示(IR)。AlphaEvolve 被挑战去直接优化 XLA 生成的 IR(含 FlashAttention 核 + 前后处理)。这很难,因为 (1) IR 是为调试而非人工编辑设计的,(2) 它是编译器生成且已高度优化。每次改动都对照参考代码在随机输入上校验数值正确性,最终由人类专家严格确认对所有输入正确。结果:FlashAttention 核 +32%、前后处理 +15%。展示了 AlphaEvolve 优化编译器生成代码的能力(未来或可把发现的优化并入编译器工作流)。


4 消融:每个组件都重要

Figure 8: AlphaEvolve 消融(左:矩阵乘法张量分解;右:kissing number)

在两个任务上做消融:矩阵乘法张量分解(§3.1)与 kissing number 下界(§3.2)。

Figure 8 逐元素解读: - 两个面板=矩阵乘法(纵轴聚合目标指标 −10 到 −1,越高越好;实为"越接近 0 的负秩相关量越好"),=kissing number(纵轴 −50 到 0)。横轴都是算力预算占比 0→100%。每条曲线是一个设定随算力增长的性能,阴影是三次独立随机种子跑出的 intra-target 标准差。 - 左面板 6 条曲线的排序(自上而下即从好到差): - Full method(绿)——全程领先,最快爬到最高; - No meta prompt evolution(橙)——次好,说明 meta prompt 有正贡献但非决定性; - Small base LLM only(棕)——只用小模型,明显掉队 → 底座 LLM 强弱很重要; - No context in the prompt(红)No full-file evolution(紫)——中下,说明"富上下文"和"整文件进化"都有实质贡献; - No evolution(蓝)——垫底,反复喂同一初始程序、不进化 → 进化本身是最大功臣。 - 右面板 3 条曲线:Full method(绿)远超 No context(红)与 No evolution(蓝),且绿线在 ~25% 算力处就基本封顶,另两条则长期低迷。 - 一句话结论进化(evolution)、富上下文、整文件进化、强底座 LLM、meta prompt——每一个组件都对最终结果有显著贡献,其中"有没有进化"和"底座强不强"是最粗的两根杠杆。

[!TIP] 五个被消融的组件(对照理解) | 消融名 | 拿掉了什么 | 掉多少(定性) | |---|---|---| | No evolution | 不用数据库,反复喂同一初始程序 | 掉最多(进化是核心) | | Small base LLM only | 只用一个小底座模型 | 掉很多(底座强弱关键) | | No context in the prompt | prompt 里不加显式上下文 | 明显掉 | | No full-file evolution | 只进化 loss 函数(回到 FunSearch 式单函数) | 明显掉(整文件重要) | | No meta prompt evolution | 关掉"进化 prompt 本身" | 小幅掉 |


5 相关工作与讨论

5.1 相关工作(把 AlphaEvolve 放进谱系)

[!TIP] ① 进化 / 遗传编程(AlphaEvolve 的老家) - 遗传编程(Genetic Programming)[54,51,5]:用一组手写的变异/交叉算子反复进化程序池。经典成功于符号回归 [66,87]、自动科学 [21]/算法 [16] 发现、调度 [118]。 - 痛点:手写进化算子难设计、可能抓不住领域重要性质。AlphaEvolve 的破法用 LLM 当变异算子——借 LLM 的世界知识去变异程序,无需预定义允许的变异操作集。 - FunSearch [83]:AlphaEvolve 的直接前身(见 §1 Table 1 对照),把 LLM-guided evolution 用于数学发现。AlphaEvolve 在"整文件/多语言/多目标/强底座+富上下文"四点上超越它。

[!TIP] ② 超优化(superoptimization)与算法发现 - 超优化思想可溯到 1980s [69];前 LLM 方法有系统枚举 [69]、遗传搜索 [20]、Monte Carlo 采样 [86]、深度 RL [68]。 - AlphaTensor [26]:在"矩阵乘法"这一单一问题上用深度 RL 发现可证明正确的算法——AlphaEvolve 通用得多,且在 \(\langle 4,4,4\rangle\) 上(复数域)超过了它。 - AlphaCode [60]:LLM 在(模拟)编程竞赛上的成功,是 LLM-based 超优化/发现的底气来源。近期还有用 LLM 优化 GPU 核 [15,56]、发现进化算法 [55]、训练 LM [58]、优化仓储级计算机 [61] 等。

[!TIP] ③ AI for 科学/数学发现(更广背景) - AI Co-Scientist [34]:用不同 agent 做假设发现/排序/文献综述,但用自然语言表示假设与评价——难以长跑。AlphaEvolve 用代码 + 程序化评测,得以绕开 LLM 幻觉、跑很多步(这是二者最本质的分工,也可原则上结合)。 - FunSearch [24,83] 把 LLM-guided evolution 立成"为数学命题找见证/反例"的工具(与"找形式/非形式证明"互补)。 - AlphaEvolve 与多数方法的差异:用程序化的假设表示 + 评测指标

[!NOTE] 本文在本项目坐标系里的位置:AlphaEvolve 是"标量分数驱动的、局部变异的、面向单个(较)无状态程序"的进化式代码搜索巅峰。[[ref09_meta-harness]] 正是以它为对照,指出其反馈被压缩成标量分数(只知失败、不知为何失败)、且历史访问受限;[[ref17_self-harness]] 则在自我改进谱系里引它 [15] 作为"自演化 agent 系统"的代表。理解 AlphaEvolve,是理解后续 harness 自动优化"要突破什么"的前提。

5.2 讨论与局限


个人思考

与其他论文的关联(放进本项目的坐标系)

我的判断:AlphaEvolve 用"评测器过滤幻觉 + 分数爬坡"换来了能跑成千上万步的长跑能力(这是它做出 48 次乘法的底气);但代价是"只知失败、不知为何失败"。Meta-Harness 说:当优化对象是长程、可诊断的 harness 时,压缩成标量分数就丢了把"下游失败"追溯到"上游决策"的信息——所以要给原始轨迹。两者其实是同一进化范式在"目标可诊断性"这条轴上的两端。 - 对 [[ref17_self-harness]]:Self-Harness 在自我改进谱系里引 AlphaEvolve [15] 为"自演化 agent 系统"代表,但刻意收窄到"固定模型 + 有界编辑 + 回归门"。可以说 AlphaEvolve 的"diff 编辑 + 评测器把关"被 Self-Harness 继承并加了纪律(held-in/held-out 非回退门 = 比"单标量分数更高"更严的准入)。 - 对 [[ref13_adas-automated-design-agentic-systems]]:ADAS 用 meta-agent 从历史"编程出"新 agent;AlphaEvolve 用进化 + LLM 变异"进化出"新算法。都属"用一个自动过程搜索出系统/程序",差别在 ADAS 搜 agent 架构、AlphaEvolve 搜算法/构造,且 AlphaEvolve 的评测器更硬(机器可验证)。 - 对 [[ref21_shinkaevolve]] / [[ref22_thetaevolve]]:这两篇是 AlphaEvolve 的直系后继——沿"进化式代码搜索"继续走(ShinkaEvolve 主打样本效率,把 AlphaEvolve 的"数千次采样"再压低)。读它们时,AlphaEvolve 的五大组件(ensemble/diff/database/cascade/异步)是必备的 baseline 参照系。 - 对 [[ref19_gepa]]:GEPA 是"反思式文本优化"另一支(用 rollout 轨迹的反思反馈进化 prompt)。与 AlphaEvolve 对比能看出"进化 + 标量分数"(AlphaEvolve)vs"反思 + 语言反馈"(GEPA)两条自动优化哲学。

方法论启示(可迁移的通用思路)

  1. "评测器即环境(evaluator-as-environment)"是可复用的元原则:只要你能把目标写成一个机器可打分的函数,就能把 LLM 从"一次性生成器"升级成"进化搜索里的变异算子",用 test-time compute 换质量。反过来——做不出评测器的任务,这套就不灵,这是判断"某问题能否上 AlphaEvolve 式方法"的第一性筛子。
  2. diff-based 编辑 > 整文件重写:让 LLM 输出 SEARCH/REPLACE 而非重写整文件,既精准又可审计——这个机制被后续 harness 工作普遍继承,值得直接抄进任何"让 LLM 改大代码库"的工具。
  3. 多目标优化能反哺单目标:即使只在意一个指标,加几个辅助指标能刺激候选多样性、提高撞见突破的概率——一个便宜且反直觉的 trick。
  4. 快慢模型集成做 explore/exploit:用便宜模型铺广度、贵模型偶尔打深度,是 LLM 算力分配的通用配方。
  5. 进化库要防早熟收敛:MAP-Elites(保风格多样)+ 岛屿模型(防整体收敛)是长跑搜索的护栏;任何"迭代改进 + 择优"的系统都该想清楚"多样性怎么维持"。

在我的工作中能怎么用

开放问题 / 疑问

局限性(承接作者自陈 + 我的补充)