AlphaEvolve:超级编码智能体
一、简介
AlphaEvolve,它是一种进化编码 Agent ,可大幅提升最先进的 LLM 在高难度任务(如解决开放科学问题或优化计算基础设施的关键部分)上的能力。AlphaEvolve 负责协调 LLM 的自主流水线,其任务是通过直接修改代码来改进算法。AlphaEvolve 采用进化方法,不断接收来自一个或多个评估者的反馈,迭代改进算法,从而可能带来新的科学和实践发现。我们将这种方法应用于一些重要的商业问题,从而证明了它的广泛适用性。
AlphaEvolve 的进化过程利用了现代大型语言模型对反馈作出响应的能力,使得能够发现与初始候选池在语法和功能上都截然不同的新候选项。这一方法不仅适用于以发现新算法为核心目标的问题,也适用于那些感兴趣的解本身不是算法、但可以通过算法描述其构造或寻找过程的广泛问题。在后一种情况下,发现算法只是实现目标的手段,但事实证明,这种策略相比直接搜索解本身,往往更加高效。
| FunSearch | AlphaEvolve |
|---|---|
| 进化单一函数 | 进化整个代码文件 |
| 进化代码量最多为 10-20 行 | 进化代码量可达数百行 |
| 进化 Python 代码 | 可进化任意编程语言 |
| 需要快速评估(1 个 CPU 上 ≤ 20 分钟) | 可在加速器上并行评估数小时 |
| 需使用数百万次 LLM 采样 | 只需数千次 LLM 采样即可 |
| 使用小型 LLM,大模型无优势 | 受益于最先进的大型语言模型 |
| 上下文极少(仅限先前的解) | 提示中包含丰富的上下文和反馈 |
| 优化单一指标 | 可同时优化多个指标 |
将进化方法与编程大型语言模型相结合的想法,之前已经在各种专业场景中得到探索。特别是,AlphaEvolve 是对 FunSearch (见上表) 的重大提升,后者利用 LLM 指导的进化来发现启发式方法,以构建新的数学对象或驱动在线算法的运行。此外,相关方法还被应用于诸如为仿真机器人发现策略、符号回归以及为组合优化综合启发式函数等任务。与这些系统相比,AlphaEvolve 利用最先进的大型语言模型,进化实现跨越多个函数和组件的复杂算法的大段代码。因此,它在规模和通用性上都远远超越了前辈系统。
二、AlphaEvolve流程介绍
AlphaEvolve 是一个编程Agent,它能自主管理计算流水线,包括向 LLMs 查询,并生成解决用户指定任务的算法。从高层次上讲,编译程序是一种进化算法,它能逐步开发出提高与任务相关的自动评估指标得分的程序。
用户提供一个初始程序(其中标记了待演化的组件)、评估代码和可选配置。然后,AlphaEvolve 启动演化循环。提示采样器使用程序数据库中的程序构建丰富的提示。根据这些提示,LLM 生成代码修改(差异),并将其应用于创建新程序。然后,评估器对这些修改进行评分,并将有希望的解决方案重新注册到程序数据库中,从而推动迭代式地发现越来越好的程序。
2.1 明确任务
2.1.1 评估
由于 AlphaEvolve
处理的是可以由机器评分的问题,用户必须提供一种机制,用于自动评估生成的解。该机制表现为一个函数evaluate,具有固定的输入/输出签名,返回一个标量字典。
根据具体应用,执行这个函数可能只需在单台设备上花费几秒钟,也可能需要大规模计算。对于数学问题,函数
2.1.2 API
为了支持在整个代码库中对多个组件进行进化,AlphaEvolve 提供了一个输入 API,用户可以对代码块进行标注,指定哪些部分需要由系统进化;;见下图示例。这种设计便于将其集成到现有代码库中,仅需做极少量的更改,只需在代码中以注释的方式加入特殊标记(# EVOLVE-BLOCK-START 和 #EVOLVE-BLOCK-END)即可。
在这些进化代码块中,用户提供的任何代码都作为 AlphaEvolve
后续优化的初始解,其余部分则构成骨架,将进化生成的各个部分连接起来,以便能够从
evaluate
函数中调用。虽然这个初始实现必须是完整的,但可以非常简陋——例如,只包含返回相应类型常量的单行函数。
- (a)用户提供的文件,其中标记了需要演化的块,以及可以调用来对当前代码版本进行评分的特殊评估函数。
- (b)提供给LLM的assembled prompt。
- (c)LLM的示例输出。
(c)中提出的差异将应用于pompt (b) 中显示的“当前程序”,然后将生成的修改后的程序发送给评估人员。评估人员将调用 (a) 中的评估函数,以获取新提出的程序的分数。
2.1.3 在抽象层次选择上的灵活性
AlphaEvolve 可以以非同寻常的方式应用于同一个问题——尤其是在进化得到的程序不是最终输出,而是发现解的手段时。例如,AlphaEvolve 可以进化原始字符串表示的解(类似于经典的进化算法);也可以进化一个明确形式的函数,用于从零开始构建解;还可以进化专门的搜索算法,在固定的算力预算内找到解;甚至可以让中间解和搜索算法共同进化,使每个搜索算法都专门针对某个特定的中间解进行进一步优化。
我们发现,不同的抽象层次对于不同的问题效果更佳。例如,我们推测,对于具有高度对称性解的问题,进化构造函数会更有优势,因为这类函数通常更简洁;而对于非对称性解的问题,则更适合进化定制化的搜索算法。
2.2 提示词采样
由于 AlphaEvolve 利用的是最先进的大型语言模型(SOTA LLMs),它支持多种定制方式,并能在主要的进化提示中提供较长的上下文。这一提示包括了从程序数据库中抽样获得的多种先前发现的解方案,以及系统关于如何对特定解进行修改的指令。除了这些关键要素之外,用户还可以根据自身的具体需求,以多种方式进一步定制提示,例如如下几种:
- 显式上下文(Explicit context):关于所解决问题的详细信息,例如人工编写的固定指令、公式、代码片段或相关文献(如 PDF 文件)。
- 随机格式化(Stochastic formatting):模板中的占位符由人工提供的多样化替代项组成,以增加多样性,这些替代项通过单独配置文件中给定的概率分布进行实例化。
- 结果渲染(Rendered evaluation
results):通常包括一个程序、该程序的执行结果,以及由
evaluate函数分配的得分。 - 元提示词进化(Meta prompt evolution):由 LLM 本身在额外的提示生成步骤中提出的指令和上下文,这些指令和上下文与解程序类似,在单独的数据库中共同进化。
2.3 开放性生成
为了推动进化过程,AlphaEvolve 利用了最先进的大型语言模型(SOTA LLMs)的能力,其主要作用是消化以往已开发解决方案的信息,并提出改进这些解决方案的新颖且多样化的方法。尽管 AlphaEvolve 对模型本身没有特定要求,但在消融实验中我们观察到,随着底层 LLM 的提升,AlphaEvolve 的表现也会显著提升。
2.3.1 输出格式
当 AlphaEvolve 要求 LLM
修改现有代码,尤其是在较大的代码库中时,它会要求以特定格式的一系列
diff 块来提供更改内容:
1 | |
在这里,<<<<<<< SEARCH 和 =======
之间的代码是当前程序版本中要精确匹配的片段;======= 和
>>>>>>> REPLACE
之间的代码则是将替换原始代码的新片段。这样可以针对代码的特定部分进行有针对性的更新。
在被进化的代码非常简短,或者相比小幅修改更适合完全重写时,AlphaEvolve
也可以配置为指示 LLM 直接输出整个代码块,而不是使用 diff 格式。
2.3.2 模型使用
AlphaEvolve 采用的是大型语言模型组合。具体来说,我们采用了 Gemini 2.0 Flash 和 Gemini 2.0 Pro 的组合。这种集合方法使我们能够在计算吞吐量和生成解决方案的质量之间取得平衡。Gemini 2.0 Flash 的延迟更低,因此候选方案生成率更高,从而增加了单位时间内探索的想法数量。同时,Gemini 2.0 Pro 拥有更强的功能,可以偶尔提供更高质量的建议,从而大大推进进化搜索,并有可能带来突破。这种战略组合优化了整个发现过程,既最大限度地增加了已评估创意的数量,又保留了由功能更强大的模型推动实质性改进的潜力。
2.4 评估
为了跟踪 AlphaEvolve 的进展,并选择哪些想法将在未来几代中传播,每个由 LLMs 提出的新解决方案都会被自动评估。原则上,这一过程相当于对生成的解决方案执行用户提供的评估函数 h。实际上,AlphaEvolve 支持一些可选机制,使得这种评估更加灵活和高效:
- 评估级联(假设检验):用户可以指定难度逐步增加的测试用例集,只有当新解决方案在所有早期阶段都取得了足够有前景的结果时,才会在下一个阶段进行评估。这有助于更快地淘汰不太有前景的解决方案。此外,新解决方案最初会在较小规模上进行评估,在进入主要测试用例前先筛除有问题的程序。
- LLM 生成反馈:在某些应用中,理想的解决方案具有一些难以通过用户提供的评估函数 h 精确定义的特性,比如所发现程序的简洁性。可以通过单独的 LLM 调用对这些属性进行评分,并将其添加到评分字典中以引导进化,或者在某项标准不满足时用来淘汰解决方案。
- 并行化评估:AlphaEvolve 的样本效率使其可以在评估每个新解决方案上花费约 100 个计算小时。然而,除非将单个评估任务并行化以减少实际耗时,否则这可能会降低新一代出现的速度,从而限制进化算法连续多次变异的能力。在许多应用中,评估本身是极易并行化的(例如,从多个随机初始化状态运行搜索算法),这使得 AlphaEvolve 能够通过异步调用评估集群来分发这项工作。
2.4.1 多重评分
AlphaEvolve 允许针对多个用户提供的评分进行优化,即进化那些能够在一个或多个评价指标下获得高分的对象。这兼具内在价值和工具价值。虽然在许多应用中,我们确实关心如何针对多个评价指标开发解决方案(或开发一个在所有指标上都很强的解决方案),我们发现,即使只关注某一个指标,对多个指标进行优化通常也会提升单一目标指标的表现。也许这是因为,在不同评价标准下表现优异的程序往往具有不同的结构或逻辑,通过将这些多样且高性能的程序示例(每个都代表了“优秀”的不同定义)纳入提供给语言模型的提示中,能够激发生成更多样化的候选解决方案,从而提升发现对目标指标高度有效的新颖方法的机会。
2.5 进化
在其进化过程中,AlphaEvolve 持续生成越来越多的解决方案,并附带它们的评估结果(分数和程序输出)。这些解决方案被存储在进化数据库中,其主要目标是在未来的迭代中能够最优地重新利用先前探索过的想法。设计此类数据库的一个关键挑战在于探索与利用的平衡,即在不断提升最佳程序的同时,保持多样性以鼓励对整个搜索空间的探索。在 AlphaEvolve 中,进化数据库实现了一种受 MAP 精英算法和基于岛屿的种群模型启发的混合算法。
2.6 分布式流水线
AlphaEvolve 是作为异步计算流水线(使用 asyncio Python 库)实现的,其中许多计算同时运行,每项计算的下一步依赖于另一项未完成计算的结果时,都会阻塞(等待)。更具体地说,异步流水线由控制器、LLM 采样器和评估节点组成。整个流水线针对吞吐量(而非某个特定计算的速度)进行了优化,以便在特定的总体计算预算内,最大限度地增加可提出和评估的创意数量。
三、结果
3.1 通过寻找新的张量分解算法实现更快的矩阵乘法
从问题描述和基于标准梯度的算法(包括初始化器、重建损失函数和 Adam 优化器)出发, AlphaEvolve 能够开发出超越现有方法的复杂张量分解算法。为了评估每个演化后的程序,我们选择一组矩阵乘法目标并运行该算法,使用评估级联,用多个随机种子初始化该算法。然后,以在每个目标上取得的最好(最低)排名以及取得该排名的种子比例来衡量性能,从而为 AlphaEvolve 提供爬山算法的信号。为了确保分解的准确性并避免任何潜在的数值错误,在评估时,我们将每个元素四舍五入到最接近的整数或最接近的半整数;并且,为了鼓励算法生成近似整数解,我们在 LLM 的提示中以自然语言包含了这一要求。

从上表中可以看出, AlphaEvolve 开发的各种算法提高了 14
种不同矩阵乘法目标的当前最佳水平。值得注意的是,对于两个

AlphaEvolve提出的发现更快矩阵乘法算法的变更。完整的差异概述在左侧并且右侧突出了一些摘录。在这个例子中,AlphaEvolve在多个组件上提出了广泛的变更,包括优化器及权重初始化(右上角)、损失函数(中间右方)和超参数扫描(右下角)。这些变更非常非同寻常,在进化过程中需要15次变异。
如上图所示, AlphaEvolve
对初始程序进行了重大修改,引入了一些原创想法,以设计出更优的算法。虽然上表中的大多数结果(包括
3.2 为广泛的开放数学问题寻找定制的搜索算法
数学研究的一个重要前沿是发现具有某种度量的最优或近似最优性质的对象或结构 。例如,从寻找几何形状的密集堆积到识别满足特定组合或解析约束的函数或集合。进展通常依赖于找到一个超越所有已知示例的单一结构,从而为最优值建立新的下限或上限。我们证明, AlphaEvolve 是一个强大的工具,可以探索这些问题中固有的广阔搜索空间,并成功应对各种开放的数学挑战。
为了评估其能力,我们将 AlphaEvolve 应用于精选的 50 多个数学问题,涵盖五个以上的不同数学分支,包括分析、组合、数论和几何,并在许多特定参数设置(例如不同的维度或大小)上进行评估。在 75% 的案例中, AlphaEvolve 重新发现了已知的最佳构造,在 20% 的案例中,它发现了比以前已知的最佳构造更好的新对象,从而改进了 SOTA。在所有这些案例中,最初的起点都是简单或随机的构造。这些结果凸显了 AlphaEvolve 作为数学研究多功能工具的广泛潜力。
AlphaEvolve 的多功能性使我们能够解决分析(自相关和不确定性不等式)、几何(填充和最小/最大距离问题)和组合(Erdős 最小重叠问题以及有限集的和与差)中的问题。
促成这些发现的关键方法创新在于 AlphaEvolve 能够演化启发式搜索算法, 而非直接演化构造本身。对于许多问题,尤其是那些在数学中常见的快速目标函数评估问题,我们采用了迭代改进策略。每一代 AlphaEvolve 的任务都是演化一个代表搜索启发式算法的程序。该程序被赋予固定的时间预算(例如 1000 秒),并被展示前一个最佳启发式算法找到的最佳构造。它的目标是利用这个起点和分配的时间来找到更好的构造。因此,演化过程会选择那些能够有效改进高质量解决方案的启发式算法。最终的构造通常是 AlphaEvolve 发现的一系列不同的专用启发式算法的结果——早期的启发式算法擅长从随机或简单的初始状态中获得巨大收益,而后期的启发式算法则擅长微调接近最优的配置。这种多阶段自适应搜索策略的自动发现对于手动复制来说具有挑战性,并且对于超越 SOTA 至关重要。
以下是 AlphaEvolve 取得新成果的一些问题的详细描述。
- 分析
- 自相关不等式(Autocorrelation inequalities):AlphaEvolve 能够改进几个自相关不等式的最佳已知界限。
- 不确定性原理(Uncertainty principles):通过完善不确定性原理的构造, AlphaEvolve 能够为傅里叶分析中出现的问题生成精细的配置,从而得到略微更好的上限。
- 组合学和数论
- 埃尔德什最小重叠问题(Erdős’s minimum overlap problem):AlphaEvolve 为最小重叠问题建立了新的上限,略微提升了之前的记录。
- 几何和包装(Geometry and packing)
- 接吻数问题(Kissing number problem):在 11 维空间中, AlphaEvolve 改进了接吻数的下限,找到了一个由 593 个不重叠单位球体组成的配置,这些单位球体可以同时与中心单位球体接触,超过了之前 592 个单位球体的纪录。
- 包装问题(Packing problems):AlphaEvolve
在包装问题上取得了一些新成果,例如将
个点包装成一个形状以最小化最大距离和最小距离的比率,以最有效的方式将各种多边形包装在其他多边形中,以及关于避免小面积三角形的点集的 Heilbronn 问题的变体。
3.3 优化谷歌的计算生态系统

该图表展示了 AlphaEvolve 如何帮助 Google 提供更高效的数字生态系统,从数据中心调度和硬件设计到 AI 模型训练。
3.3.1 改进数据中心调度
AlphaEvolve 发现了一种简单却极其有效的启发式方法,可以帮助 Borg 更高效地协调 Google 庞大的数据中心。该解决方案已投入生产超过一年,平均持续恢复 Google 全球 0.7% 的计算资源。这种持续的效率提升意味着,在任何特定时刻,相同的计算资源占用空间可以完成更多任务。AlphaEvolve 的解决方案不仅带来了强大的性能,还带来了人类可读代码的显著操作优势:可解释性、可调试性、可预测性和易于部署性。

左图: AlphaEvolve 发现的启发式函数,针对 Google 的工作负载和容量进行了定制。右图:启发式评分函数的可视化。黄色区域代表高分,紫色区域代表低分。
3.3.2 增强人工智能训练和推理
AlphaEvolve 正在加速 AI 性能和研究速度。通过更智能地将大型矩阵乘法运算分解为更易于管理的子问题,它将 Gemini 架构中这一关键内核的速度提高了 23%,从而使 Gemini 的训练时间缩短了 1%。由于开发生成式 AI 模型需要大量的计算资源,因此每提高一点效率,都意味着可观的节省。除了性能提升之外,AlphaEvolve 还显著缩短了内核优化所需的工程时间,从数周的专家工作缩短为数天的自动化实验,从而帮助研究人员更快地进行创新。
创建一个能够自动为所有输入形状选择正确平铺大小
AlphaEvolve 还可以优化低级 GPU 指令。这个极其复杂的领域通常已经由编译器进行了深度优化,因此人类工程师通常不会直接修改它。AlphaEvolve 在基于 Transformer 的 AI 模型中,为 FlashAttention 内核的实现实现了高达 32.5% 的加速。这种优化可以帮助专家精准定位性能瓶颈,并将改进轻松融入到他们的代码库中,从而提高生产力,并在未来节省计算和能源成本。
3.3.3 协助硬件设计
AlphaEvolve 提出了一个 Verilog 重写方案,删除了矩阵乘法关键算术电路中高度优化的、不必要的位。至关重要的是,该方案必须通过稳健的验证方法,以确认修改后的电路保持功能正确性。该方案已被集成到即将推出的谷歌定制 AI 加速器—— 张量处理单元 (TPU) 中。通过用芯片设计师的标准语言提出修改建议,AlphaEvolve 促进了 AI 和硬件工程师之间的协作,以加速未来专用芯片的设计。
3.3.4 直接优化编译器生成的代码
我们要求 AlphaEvolve 直接优化 XLA 生成的、封装了 FlashAttention
内核的 IR 以及预处理和后处理代码。我们优化了一个与用于在 GPU
上进行大规模推理的高影响力 Transformer
模型对应的配置,目标是最大限度地缩短模块的整体执行时间。这项任务极具挑战性,因为
- 该 IR 的设计初衷是调试,而非供开发者直接编辑;
- 它由编译器生成,并且已经高度优化。
为了确保优化过程中的数值正确性, AlphaEvolve
提出的每项修改都会在随机输入下与参考(未修改)代码进行比对。最终版本的代码经过人工专家的严格验证,确保其对所有可能的输入均正确无误。
AlphaEvolve 能够针对 IR 暴露的两个抽象级别提供有意义的优化。首先,针对目标配置的 FlashAttention 内核速度提升了 32%。其次, AlphaEvolve 发现内核输入和输出的预处理和后处理有所改进,从而使这部分速度提升了 15%。这些结果证明了 AlphaEvolve 优化编译器生成代码的能力,并有可能将已发现的优化功能集成到特定用例的现有编译器中,或者从长远来看,将 AlphaEvolve 集成到编译器工作流程本身中。
四、Ablations
- 进化方法(Evolutionary approach):AlphaEvolve 采用进化方法,将先前生成的程序存储在数据库中,并在后续迭代中用于生成更优的程序。为了分析进化的重要性,我们考虑了一种替代方法,即反复将相同的初始程序输入语言模型。我们将这种方法称为“无进化”。
- 提示中的上下文(Context in prompts):AlphaEvolve 使用强大的语言模型,该模型具有庞大的上下文窗口,通过在提示中提供特定于问题的上下文,可以显著提升其输出效果。为了测试上下文的重要性,我们考虑了一种替代方法,即不在提示中添加任何明确的上下文。我们将这种方法称为“提示中不添加上下文”。
- 元提示(Meta prompts):lphaEvolve 还使用元提示来改进提供给语言模型的提示。这使得它的性能有可能超越使用人工提示器所能达到的性能。为了测试元提示的有效性,我们在张量分解任务中禁用了元提示。我们将这种方法称为“无元提示进化”。
- 全文件演化(Full-file evolution):与 FunSearch 等先前的方法不同, AlphaEvolve 可以演化整个代码库,而不是专注于单个函数。为了测试全文件演化的重要性,我们在张量分解的背景下考虑了一种替代方案,即只演化损失函数。我们将这种方法称为“非全文件演化”。
- 强大的语言模型(Powerful language models):AlphaEvolve 依赖于小型和大型语言模型的混合,以获得高度多样化的样本。为了理解这一组件的重要性,我们考虑了一种替代方案,即仅使用单个小型基础模型。我们将这种方法称为“仅使用小型基础 LLM”。

左图:AlphaEvolve 在寻找低秩张量分解以实现更快矩阵乘法的问题上的简化图。右图:AlphaEvolve 在寻找球体填充以提高接吻数的问题上的简化图。每条曲线显示了单个设置的性能,随着计算预算的增加,对所有考虑的目标取平均值(目标指标的值越高越好)。阴影表示目标内部标准差,对 AlphaEvolve 的三次独立运行取平均值,并使用不同的随机种子进行初始化。
Reference
- AlphaEvolve: A coding agent for scientific and algorithmic discovery
- AlphaEvolve: A Gemini-powered coding agent for designing advanced algorithms
- AlphaEvolve – AI Powered Coding Agent For Designing Algorithms
- Results of AlphaEvolve
- 【论文导读】AlphaEvolve:A coding agent for scientific and algorithmic discovery
- 破解百年数学难题,刷新算法认知!DeepMind 发布超级编码智能体 AlphaEvolve
- Agent又暴风进化!谷歌发布AlphaEvolve:能发明新算法、改进芯片设计、解疑难数学题