清华大学校友李宇佳一作兼通讯!登上《Science》封面!
Original
材料科学前沿
材料科学前沿
材料科学前沿
Weixin ID
MaterialFrontiers
About Feature
聚焦海内外材料领域新研究、新进展!
Posted on
收录于合集
编程是一个强大的、无处不在的解决问题的工具。能够协助程序员甚至自己生成程序的系统可以使编程更有成效,更容易获得。最近的基于变压器的神经网络模型显示了令人印象深刻的代码生成能力,但在需要解决问题技能的更复杂的任务上,如竞争性编程问题,仍然表现不佳。
鉴于此,
来自Deepmind的Research Scientist李宇佳作为第一作者与通讯作者
介绍了
AlphaCode,一个用于代码生成的系统,在Codeforces平台上最近的编程竞赛的模拟评估中取得了平均排名前54.3%的成绩
。AlphaCode通过使用专门训练的基于变压器的网络生成数以百万计的不同程序,然后对这些程序进行过滤和聚类,最多只能提交10个程序,从而解决问题。这一结果标志着人工智能系统首次在编程比赛中取得了竞争性的表现。
此类编码平台的发展可能对程序员的生产力产生巨大影响。它甚至可能通过将人类工作转移到制定问题上来改变编程文化,而机器学习是负责生成和执行代码的主要部分
。相关研究成果登顶今日《Science》封面!论文题目是“Competition-level code generation with AlphaCode”。
【目前存在的问题与解决方案】
解决竞争性编程问题(图1A)
需要理解复杂的自然语言描述,对以前没有见过的问题进行推理,而不是简单地记住代码片段,掌握广泛的算法和数据结构,并精确地实现可以跨越数百行的提交。
为了评估这些提交(图1B),它们被执行在一套详尽的隐藏测试,并检查执行速度和边缘情况的正确性。反馈是最小的;只有在所有的隐藏测试上有正确的输出,提交才是正确的,否则就是不正确的。隐藏测试对提交者来说是不可见的,提交者必须写自己的测试或依靠琐碎的例子测试进行调试
。因为参赛者可以借鉴以前比赛的解决方案和算法,所以每次比赛都会产生具有挑战性的新问题。
图 1. 竞争性编程问题陈述和解决方案
【学习系统与评估】
本文的系统(图2)旨在解决竞争性编程的主要挑战
:(i)在巨大的程序空间中搜索,(ii)只能获得约13,000个用于训练的示例任务,以及(iii)每个问题的提交数量有限。值得注意的是,扩大产生的模型样本量大大改善了性能(图3),因此该系统的许多方面被设计为尽可能快地抽取样本,以确保样本的多样性,并选择最佳样本提交。
具体而言,
本文介绍的AlphaCode系统代表了在机器学习(ML)模型的发展上迈出了实质性的一步,该模型可以合成计算机程序来解决这些类型的挑战性问题。
但该系统最令人惊讶的是AlphaCode不做什么。
AlphaCode不包含关于计算机代码结构的明确的内置知识。相反,AlphaCode依靠一种纯粹的"数据驱动"方法来编写代码,通过简单地观察大量现有代码来学习计算机程序的结构。
AlphaCode是通过使用一种被称为"大型语言模型"(LLM)的ML模型来构建的,它通过每次预测一个"标记"来进行操作(标记是一个小的字符序列的集合,但它们可以被认为是代码中的单个字符)
。AlphaCode预测解决方案代码中的第一个字符(给定问题描述),然后是第二个字符(给定描述和第一个字符),第三个字符(给定描述和第一及第二个字符),以此类推。
最近的工作强调了LLMs生成代码的潜力
--例如,对GPT-3系统进行代码创建的评估,以及使用Codex系统发布GitHub的Copilot--
但AlphaCode生成解决竞争性编程问题的整个程序的能力是一个明显的进步。
虽然AlphaCode包含了一些与过去这项工作不同的架构(例如,AlphaCode不需要生成问题描述,所以它使用了一个稍微不同的机制来编码问题文本),但底层系统的运作方式与以前的LLM类似。
图 2. AlphaCode 概述
从根本上说,是什么让AlphaCode在竞争性编程任务上的表现优于其他系统,归结为两个主要属性:训练数据和候选解决方案的后处理。
可以说,对任何ML系统来说,最重要的经验是,应该在与它在运行时看到的数据相似的数据上进行训练。为此,AlphaCode的开发者在两个现有的数据集的基础上建立了CodeContests数据集。CodeContests由∼13500个竞争性编程问题的解释文本、一些所需的输入-输出对的简单测试案例以及跨越几种编程语言的每个问题的许多潜在解决方案组成。该系统也在GitHub的非结构化代码上进行训练(许多语言的代码字符,没有问题描述)。
然而,为一个问题生成单一的解决方案代码表现不佳;通过编写无效代码或产生不正确结果的程序,逐个标记地编写代码很容易出错。因此,
AlphaCode 还生成了数千个候选解决方案,并通过确保它们有效并通过简单测试用例来过滤它们。该系统还将相似的解决方案聚集在一起,并从每个集群中提交一个示例,以增加潜在解决方案的多样性。
AlphaCode系统明显缺少的是ML模型中与感兴趣的任务相关的任何架构设计:生成代码
。计算机代码是一种高度结构化的媒介;程序必须遵守定义的语法,并且必须在解决方案的不同部分内产生明确定义的前置条件和后置条件。程序综合具有悠久的历史,并且已经开发出多种技术来生成遵守这些类型约束的程序。给定一个像计算机代码这样结构化的媒介,这种结构将被旨在编写代码的ML模型使用,这似乎是很自然的。
但AlphaCode没有这样做。它生成代码的方式是LLM生成任何文本--一次一个符号,并且只在整个程序写完后检查程序的正确性。
模型有时可以有效地记忆数据集中的小模式,然后以重新排列的方式输出这些模式,这导致一些人将其称为"随机鹦鹉"--对基本问题没有真正理解的系统,但能够盲目地模仿可能的输出。最终,
AlphaCode在以前没有见过的编码挑战上表现得非常好
,不管它在多大程度上真正"理解"了这个任务。
图 3. 解决速率缩放问题
【小结】
直观地说,理解程序的结构对于建立能够编写程序的ML模型应该是很重要的。
目前来看,CodeContest基准测试中还有改进的余地(AlphaCode解决了30%∼的问题),也许未来会有一些系统利用AlphaCode的力量与更经典的结构化程序合成相结合来改进结果。
但应该认真对待这种可能性,事实并非如此,数据和规模就是所需要的,曾经被称为“惨痛的教训”(8)。因此,除了是一项引人注目的成就之外,
AlphaCode或许最好被视为“原始”大型模型编写代码的能力的基准。
没准未来可以尝试将数据驱动学习与工程知识相结合的“混合”ML方法。
名称:材料科学前沿
ID:MaterialFrontiers
立志打造
材料领域
有特色的新媒体
投稿、荐稿、爆料:editor@polysci.cn
预览时标签不可点
Scan to Follow
Got It
Scan with Weixin to
use this Mini Program
Cancel
Allow
Cancel
Allow
:
,
.
Video
Mini Program
Like
,轻点两下取消赞
Wow
,轻点两下取消在看