用AlphaCode进行竞争性编程
'使用AlphaCode进行竞争性编程'
注意:本博客首次发布于2022年2月2日。根据2022年12月8日在《科学》杂志上发表的论文,我们对文本进行了微小的更新以反映这一点。
解决新问题并在竞赛编程中创造新的里程碑
解决未预料到的问题是人类智慧的本能,是经验支持的批判性思维的结果。机器学习社区在生成和理解文本数据方面取得了巨大进展,但在问题解决方面的进展仍局限于相对简单的数学和编程问题,或者是检索和复制现有解决方案。
作为DeepMind解决智能问题的使命的一部分,我们创建了一个名为AlphaCode的系统,该系统可以编写具有竞争水平的计算机程序。通过解决需要批判性思维、逻辑、算法、编码和自然语言理解的新问题,AlphaCode在编程竞赛中的参与者中排名预计在前54%。
我们的论文详细介绍了AlphaCode,该系统使用基于transformer的语言模型以前所未有的规模生成代码,然后智能地过滤出一小组有前途的程序。
我们使用Codeforces上举办的竞赛进行了性能验证。Codeforces是一个流行的平台,定期举办吸引来自世界各地的数万名参与者来测试他们的编码技能的比赛。我们选择了10个最近的比赛进行评估,每个比赛都比我们的训练数据更新。AlphaCode的排名大致与中位数竞争者相当,这标志着AI代码生成系统首次在编程竞赛中达到了竞争水平的性能。
为了帮助他人在我们的研究基础上进行进一步的工作,我们在GitHub上发布了我们的竞赛编程问题和解决方案数据集,其中包括大量的测试来确保通过这些测试的程序是正确的——这是当前数据集缺少的关键特性。我们希望这个基准将引领问题解决和代码生成方面的进一步创新。
竞赛编程是一项受欢迎且具有挑战性的活动;成千上万的程序员参加编码比赛,以获得经验,并以有趣和合作的方式展示他们的技能。在比赛中,参与者会收到一系列长问题描述以及几个小时的时间来编写解决方案。
典型的问题包括在一定约束条件下找到放置道路和建筑物的方法,或者创建赢得自定义棋盘游戏的策略。然后,参与者主要根据他们解决的问题数量进行排名。公司使用这些比赛作为招聘工具,类似类型的问题在软件工程师的招聘过程中很常见。
“我可以毫不夸张地说,AlphaCode的结果超出了我的预期。我曾经怀疑,因为即使在简单的竞争问题中,不仅需要实现算法,还需要(而且这是最困难的部分)发明算法。AlphaCode设法表现得像一个有前途的新竞争者。我迫不及待地想看到未来的发展!” – Codeforces创始人Mike Mirzayanov
在这些比赛中脱颖而出所需的问题解决能力超出了现有AI系统的能力。然而,通过将大规模transformer模型的进步(最近显示出生成代码的有希望能力)与大规模采样和过滤相结合,我们在问题解决方面取得了重大进展。我们在选定的公共GitHub代码上进行预训练,并在相对较小的竞赛编程数据集上进行微调。
在评估时,我们为每个问题创建了大量的C++和Python程序,比以前的工作大几个数量级。然后,我们将这些解决方案进行过滤、聚类和重新排序,得到一小组10个候选程序,我们将其提交进行外部评估。这个自动化系统取代了竞争者的试错调试、编译、通过测试并最终提交的过程。
在Codeforces的许可下,我们通过模拟参加了10个最近的比赛来评估AlphaCode。竞赛编程社区的出色工作已经创造了一个领域,在这个领域中,不能通过复制以前看到的解决方案或尝试每个可能相关的算法来解决问题。相反,我们的模型必须创造新颖且有趣的解决方案。
总体而言,AlphaCode的表现大致与中位数竞争对手相当。虽然离赢得比赛还有很大差距,但这个结果代表了人工智能问题解决能力的重大飞跃,我们希望我们的结果能激励竞技编程社区。
“解决竞技编程问题是一件非常困难的事情,需要人类具备良好的编码技巧和问题解决创造力。我对于AlphaCode在这个领域能取得进展感到非常印象深刻,并且很兴奋地看到这个模型如何利用其对陈述的理解来生成代码,并通过随机探索创建解决方案。” – Petr Mitrichev,谷歌软件工程师和世界级竞技程序员
为了帮助人类,人工智能系统需要具备问题解决能力。AlphaCode在现实世界的编程竞赛中排名前54%,这是一个展示深度学习模型在需要批判性思维的任务中的潜力的进步。这些模型巧妙地利用现代机器学习将问题的解决方案表达为代码,回到了几十年前人工智能的符号推理根源。而这仅仅是一个开始。
我们对代码生成的探索还有很大的改进空间,并且暗示着更多令人兴奋的想法,可以帮助程序员提高生产力,并向那些目前不编写代码的人打开领域的大门。我们将继续这个探索,并希望进一步的研究能够产生增强编程的工具,使我们更接近一个问题解决的人工智能。
在alphacode.deepmind.com上查看AlphaCode的解决方案并探索该模型。