为不可预见的问题创造解决方案是人类智力的第二天性,是经验指导下的批判性思维的结果。机器学习社区在生成和理解文本数据方面取得了巨大进步,但在解决问题方面的进步仍然局限于相对简单的数学和编程问题,或者检索和复制现有的解决方案。作为DeepMind解决智能问题使命的一部分,我们创建了一个名为AlphaCode的系统,该系统可以编写具有竞争力的计算机程序。AlphaCode通过解决需要结合批判性思维、逻辑、算法、编码和自然语言理解的新问题,在编程比赛的前54%参与者中取得了估计的排名。
问题来自Codeforces,解决方案由AlphaCode生成。
竞争性节目制作是一项受欢迎且具有挑战性的活动;成千上万的程序员参加编码竞赛,以获得经验,并以有趣和协作的方式展示他们的技能。在比赛期间,参赛者会收到一系列长长的问题描述,并需要几个小时来编写程序来解决这些问题。典型的问题包括寻找在特定限制条件下放置道路和建筑的方法,或创建赢得自定义棋盘游戏的策略。然后,参与者主要根据他们解决了多少问题进行排名。公司将这些竞争用作招聘工具,类似的问题在软件工程师的招聘过程中很常见。
我可以放心地说,AlphaCode的结果超出了我的预期。我对此持怀疑态度,因为即使是在简单的竞争问题中,通常不仅需要实现算法,还需要(这是最困难的部分)发明算法。AlphaCode的表现达到了一个有前途的新竞争对手的水平。我迫不及待地想看看前方会发生什么!
在这些比赛中脱颖而出所需的解决问题能力超出了现有人工智能系统的能力。然而,通过将大规模变压器模型(最近显示出很有希望生成代码的能力)的进展与大规模采样和过滤相结合,我们在可以解决的问题数量上取得了重大进展。我们在选定的公共GitHub代码上预先训练我们的模型,并在我们相对较小的竞争性编程数据集上对其进行微调。在评估时,我们为每个问题创建了大量C++和Python程序,数量级比以前的工作要大。然后,我们将这些解决方案过滤、聚类并重新排序为一组10个候选方案,提交外部评估。这个自动化系统取代了竞争对手的调试、编译、通过测试和最终提交的反复试验过程。
在我们的论文中,我们详细介绍了AlphaCode,它使用基于转换器的语言模型以前所未有的规模生成代码,然后智能地过滤到一小组有前途的程序。
我们通过在Codeforces上举办的比赛来验证我们的性能,Codeforves是一个流行的平台,定期举办比赛,吸引了来自世界各地的数万名参与者前来测试他们的编码技能。我们选择了10个最近的比赛进行评估,每个比赛都比我们的训练数据更新。AlphaCode大约处于中等竞争对手的水平,这标志着AI代码生成系统首次在编程竞赛中达到竞争水平。
为了帮助其他人建立我们的结果,我们正在GitHub上发布我们的竞争性编程问题和解决方案的数据集,包括广泛的测试,以确保通过这些测试的程序是正确的——这是当前数据集所缺乏的一个关键特性。我们希望这个基准测试将导致在解决问题和代码生成方面的进一步创新。



