AlphaCode 2 Technical Report


前言

原文链接
两年前,谷歌推出的 AlphaCode,是第一个在编程竞赛中达到竞争性性能水平的 AI 代码生成系统。
这两天google推出新一代模型Gemini,展现出超越GPT-4的极强性能。第一个 Gemini 版本可以理解、解释和生成世界上最流行的编程语言(如 Python、Java、C++ 和 Go)的高质量代码。它能够跨语言工作并推理复杂信息,使其成为世界上领先的编码基础模型之一。
Gemini Ultra 在多个编码基准测试中表现出色,包括 HumanEval(用于评估编码任务性能的重要行业标准)和 Natural2Code(我们内部保留的数据集),它使用作者生成的来源而不是基于 Web 的信息。
使用Gemini的专用版本,我们创建了一个更高级的代码生成系统AlphaCode 2,它擅长解决竞争性编程问题,这些问题超越了编码,涉及复杂的数学和理论计算机科学。
在与原始 AlphaCode 相同的平台上进行评估时,AlphaCode 2 显示出巨大的改进,解决了近两倍的问题,我们估计它的表现优于 85% 的比赛参与者——高于 AlphaCode 的近 50%。当程序员通过定义代码示例要遵循的某些属性来与 AlphaCode 2 协作时,它的性能会更好

一、摘要

AlphaCode (Li et al., 2022)是第一个在竞争性编程中达到中等竞争对手水平的人工智能系统,竞争性编程是一项涉及高等数学、逻辑和计算机科学的困难推理任务。本文介绍了AlphaCode 2,这是一个由Gemini (Gemini Team, Google, 2023)提供支持的性能大幅提高的新增强系统。AlphaCode 2依赖于强大的语言模型和定制的搜索和重新排序机制的组合。在与原始AlphaCode相同的平台上进行评估时,我们发现AlphaCode 2解决的问题多1.7倍,并且优于85%的比赛参与者。

二、介绍

竞争性编程是对编程技能的终极试金石之一。参与者在有限的时间内编写代码来解决复杂的问题,这些问题需要批判性思维、逻辑以及对算法、编码和自然语言的理解。因此,它是高级推理和解决问题能力的一个很好的基准。
AlphaCode (Li et al., 2022)是第一个在这项任务上达到竞争水平的人工智能系统。它的继任者AlphaCode 2利用了几个基于Gemini (Gemini Team, Google, 2023)的模型作为大规模改进系统的一部分。在Codeforces平台(竞争性编程的支柱)上进行评估时,AlphaCode 2在10次尝试中解决了43%的问题,几乎是原始AlphaCode(25%)的两倍。虽然其前身的表现与竞争对手的中位数水平相当,但我们估计AlphaCode 2的平均表现达到了第85个百分位数。
采用Gemini作为AlphaCode 2所有组件的基础模型是实现这一性能水平的关键。AlphaCode 2的成功强调了Gemini的灵活性和适应性,因为我们能够对它进行微调,并优化几个不同任务的性能,包括代码生成和代码重新排序。
整体系统
AlphaCode 2依赖于强大的大型语言模型,结合了为竞争性编程量身定制的高级搜索和重新排名机制。如图1所示,其主要组件包括:
•为每个问题生成代码示例的一系列策略模型;
•抽样机制,鼓励生成广泛的代码样本来搜索可能的程序空间;
•过滤机制,删除不符合问题描述的代码样本;
•聚类算法,将语义相似的代码样本分组,从而避免冗余;
•一个评分模型,我们使用它来从10个最大的代码样本集群中选出最佳候选。

图1 | AlphaCode 2系统的高级概述。
图1 | AlphaCode 2系统的高级概述。

1.策略和微调

我们的起点是Gemini Pro模型(Gemini Team, Google, 2023),我们使用GOLD (Pang and He, 2020)作为训练目标,对其进行连续两轮微调。首先,我们对CodeContests数据集的更新版本进行微调(在验证集中包含更多的问题、更多的解决方案和更高质量的手动策划测试)。该数据集包含大约1.5万个问题和3000万个人类代码样本。我们通过改变超参数来生成几个微调模型,并最终得到一系列微调模型。其次,我们在不同的、更高质量的数据集上执行一些额外的微调步骤。依靠一揽子政策而不是单一政策,可以最大限度地发挥多样性,这仍然是解决难题的关键。

2.采样

我们的抽样方法接近于AlphaCode。我们为每个问题生成多达一百万个代码样本,为每个样本使用随机温度参数以鼓励多样性。我们还随机化了提示中包含的目标元数据,例如问题难度等级及其分类标签。
我们将采样样本数均匀地分配到一系列微调模型中。我们在AlphaCode中使用Python和c++进行采样,但是在AlphaCode 2中使用c++样本,因为我们发现它们的质量更高。大规模抽样允许我们彻底地搜索模型分布,并生成大量不同的代码样本,从而最大化生成至少一些正确样本的可能性。考虑到样本的数量,过滤和重新排序对整个系统的性能至关重要,因为我们每个问题最多只提交10个代码样本。

3.过滤

每个竞争性编程问题至少包含一个公共输入/输出测试,表明代码示例应该如何运行。我们在相应的测试输入上执行每个代码样例,并过滤掉所有不能产生预期输出的,因此可能是不正确的,以及不到5%的不能编译的样例。平均而言,这种过滤去除了大约95%的样本

4.聚类

过滤后,我们平均每个问题有5万个候选,但我们将自己限制在10个提交。为了进一步减少候选样本,我们根据它们的运行时行为,对样本进行聚类:就像在AlphaCode中一样,我们训练一个单独的模型来为每个问题生成新的测试输入,然后在这些新输入上执行剩余的样本。生成的输出形成一个签名,我们使用该签名将相似的代码样本分组到集群中。然后我们根据它们的基数对聚类排序,只保留最大的10个
聚类的重点是避免冗余:由于同一集群中的代码样本行为相似,我们可以向每个集群提交单个代码样本以获得最佳结果

5.打分模型

我们对第二个Gemini Pro模型进行了微调,将代码样本的估计正确性得分设定在0到1之间。使用这个评分模型,我们为剩下的聚类中的每个代码样本计算一个分数;然后,我们根据这个预测分数从每个集群中选择最佳候选样本,形成我们最终的10个提交列表

6.评估

们在Codeforces上评估了AlphaCode 2,这是与原始AlphaCode相同的平台。我们选择了最近的12场比赛,参与者超过8000人,他们要么来自第二赛区,要么来自更难的“1+2”赛区。这样总共有77道题。对于每个问题,我们对100万个候选者进行抽样,并根据上面详细的过程选择和排序提交最多10个解决方案,直到找到一个正确的解决方案,或者我们用完了候选者。
我们发现AlphaCode 2解决了43%的竞争问题,比之前创下记录的AlphaCode系统(解决了25%)提高了近2倍。将其映射到竞争排名中,我们估计AlphaCode 2平均位于第85百分位-即它比85%的参赛者表现更好,排名在Codeforces的“专家”和“候选大师”类别之间。AlphaCode的表现仅超过46%的竞争对手,这是AlphaCode的一大进步。在表现最好的两场比赛中,AlphaCode 2的表现超过了99.5%的参赛者!
我们评估了增加每个问题的样本数量的影响。与AlphaCode的情况一样,我们发现随着样本数量的增加,性能大致呈对数线性增长。AlphaCode 2需要大约100个样本才能达到拥有100万个样本的AlphaCode的性能水平,使其样本效率提高10000倍以上。
在这里插入图片描述图2 | AlphaCode 2的估计排名我们绘制了人类竞争对手的Codeforces分数——通过除以每场比赛的最佳人类分数归一化为[0,1]——与他们的排名相对,在我们评估的12场比赛中取平均值。然后我们计算AlphaCode 2的平均标准化分数,并在排名轴上报告它,这使它轻松地高于第85个百分位数。假设AlphaCode 2通过增加难度来解决问题,并在2小时标记时完成最后一个问题的抽样,那么这个排名就会导致模拟时间损失。

三、讨论与结论

竞争性编程与其他编程任务非常不同,后者通常遵循命令式范式:用户指定明确的指令,模型输出所需的代码。相比之下,竞争性编程问题是开放式的。为了解决这些问题,在编写代码实现之前,需要理解、分析和推理问题,这涉及到高等数学和计算机科学的概念。
这就解释了为什么一般可用的AI系统在这个基准测试中表现不佳。AlphaCode 2在竞争性编程比赛中的成功代表了在这个极其困难的推理任务上性能上令人印象深刻的进步。
采用Gemini Pro作为我们的基础模型,可以显著提高系统的两个关键组件的性能:生成代码样本的策略模型,以及用于选择其中最佳的评分模型。事实上,我们能够为这两种截然不同的任务微调Gemini的高性能,这说明了它令人难以置信的灵活性。我们怀疑,使用Gemini Ultra作为基础模型,凭借其改进的编码和推理能力,将导致整个AlphaCode 2方法的进一步改进。
在这里插入图片描述
图3 |最近12场比赛的解决率作为每个问题样本数量的函数。这为系统和人类编码人员之间的积极互动打开了大门,他们可以指定额外的过滤属性;在这个alphacode2 +人类设置中,我们的得分超过了第90个百分位数!我们希望这种交互式编码将成为编程的未来,程序员可以利用高性能的人工智能模型作为协作工具,帮助他们推理问题,提出代码设计,并协助实现。我们正在努力将AlphaCode 2的独特功能引入我们的基础Gemini模型,作为让每个人都可以使用这种新的编程范式的第一步。

尽管AlphaCode 2取得了令人印象深刻的成绩,但在我们看到能够可靠地达到最佳人类编码员性能的系统之前,还有很多工作要做。我们的系统需要大量的试验和错误,而且成本太高,无法大规模运行。此外,它在很大程度上依赖于过滤掉明显不好的代码样本的能力。

おすすめ

転載: blog.csdn.net/Brilliant_liu/article/details/134888324