1

AI编程登上Science封面:AlphaCode打竞赛,三分之二赛题一遍过,成绩超过一半程序员

 1 year ago
source link: https://www.qbitai.com/2022/12/40285.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

AI编程登上Science封面:AlphaCode打竞赛,三分之二赛题一遍过,成绩超过一半程序员

head.jpg萧箫 2022-12-09 12:20:15 来源:量子位

DeepMind:提供0基础编程新机会

鱼羊 萧箫 发自 凹非寺
量子位 | 公众号 QbitAI

DeepMind的NS论文又新添一篇。

这回,是“信息学竞赛选手”AlphaCode,登上了最新一期Science封面。

cd9fb48544cb473bb129d05d6bd52af2~tplv-tt-shrink:640:0.image

对,就是那个悄悄潜入10场编程比赛敲代码,成绩超过了一半人类的编程AI。

并且就在这篇最新更新的论文中,DeepMind还首次透露了AlphaCode的“一次通过率”:66%

也就是说,AlphaCode近三分之二的提交,都是一次AC(Accepted)的。

c006049bcfac489bafd8b90099f0f9c1~tplv-tt-shrink:640:0.image

CMU博世人工智能中心教授J. Zico Kolter的最新评论文章也同时发表在了这一期Science上,他认为:

AlphaCode不仅仅是复制现有的解决方案。

在面对以前没见过的编程题时,它表现得非常好,无论它是在多大程度上真正“理解”了这个任务。

而在DeepMind的官方推特下,还有不少人把AlphaCode同当红炸子鸡ChatGPT联系了起来。

有人已经迫不及待看到两者同台演出:

98cb34e5abca427a9812a5d0d513da32~tplv-tt-shrink:640:0.image

首次通过率66%

尽管AI编程领域,GitHub的Copilot已经快进到收费模式,甚至还和程序员们“法庭上见”了。

但在DeepMind看来,AlphaCode还是颇有些不同之处。

一方面,编程竞赛对于AI而言本身就是比纯编程更为复杂的任务,关键是要为无法预见的问题构建解决方案。

另一方面,在架构上,AlphaCode采用了不同的机制来编码赛题文本。

cc78400644634c348d490ad319812735~tplv-tt-shrink:640:0.image

值得一提的是,AlphaCode“打”的这10场编程比赛都来自Codeforces

相比其他针对算法和数据结构的编程比赛,Codeforces更偏好考查思维能力,这意味着AI无法仅仅通过“背题”来完成挑战。

例如这是Codeforces上关于1553D问题的描述:

有两个字符串s和t,都是由小写字母组成。对于字符串s,我们从前向后扫描整个字符串。

如果按下Backspace键,就删除该光标前到上一个未删除字符之间的所有字符。

也就是说,假设字符串s是”abcbd”,你分别在第一个位置和第四个位置按下Backspace,那么将得到字符串”bd”。

因为在第一个光标位置前没有字符,所以第一次没有动作。第四个光标位置前的字符是c,上一个未删除字符是a,所以按下Backspace将删除前三个字符”bd”。

针对这个“前提”,我们需要解决的问题如下:

我们能否从前向后扫描一次s字符串,让s变为t?如果可以就输出YES,否则输出NO。

针对这个问题,AlphaCode给出的解法如下:

946fc81f88cc4d0aabc5b6dc94c1e8b2~tplv-tt-shrink:640:0.image

那么,我们只需要给定输入的字符串数量(4)和具体的字符串内容,就能让程序输出对应的结果:

第一组ababa(ba),第二组ababa(bb),第三组aaa(aaaa),第四组aababa(ababa)。

c1377975605846d4971933945672a1a6~tplv-tt-shrink:640:0.image

对此程序输出的结果分别是YES、NO、NO和YES。

cf88b81a43b042e2a47f4ad1c7494ac8~tplv-tt-shrink:640:0.image

在做题过程中,AlphaCode的“解题思路”也不再是黑箱。

它不仅成功解决了问题,还能将代码和注意力高亮的对应位置显示出来:

30e8d39ed36940a58ed1a10811323cae~tplv-tt-shrink:640:0.image

上述还只是AlphaCode解的其中一道题。

整体来说,在Codeforces平台举办的编程比赛模拟评估中,AlphaCode在超过5000名参与者的比赛中平均排名前54.3%——击败了一半的选手。

并且第一次提交就通过的概率达到了66%。

AlphaCode是如何读题写码的

所以,AlphaCode究竟是凭借什么原理达成这一“战果”的呢?

它仍然基于预训练-微调的范式打造,采用Transformer架构,其中编码器具备“解读能力”,解码器则具备“写码能力”。

这次发表在Science上的论文,也给出了更直观的原理图,并以Python作为案例,讲解具体训练的过程。

在预训练(pre-training)时,研究人员会先整理出GitHub上的各种代码集,并“喂”给AlphaCode上的编码器和解码器。

以Python上的print(“hello”)为例,这里print()是一个常见的函数,即“打印输出”,”hello”则是具体需要打印输出的内容。

439b9a4eb5434575b84cb8bbfe0cc39a~tplv-tt-shrink:640:0.image

经过预训练后的模型,就具备了基本的“按指令完成任务”的要求,其中编码器负责生成指令,解码器则负责填充剩余的部分。

在微调(fine-tuning)环节,研究人员会整理出竞争性编程竞赛的数据集,包括问题和解决思路两部分,并以GOLD与tempering作为训练目标,进一步减少搜索空间。

其中,问题以注释#的形式交给编码器“学习”,解决思路则交给解码器来尝试理解:

a3ba7f3670a34186a70d9cc41823a6f1~tplv-tt-shrink:640:0.image

微调完成后,解码器就懂得通过编码器生成注释的内容,来尝试输出对应的代码。

经过预训练-微调后,就来到了最终的评测环节。

Codeforces的题目会被直接以注释的形式交给编码器,解码器则尝试输出数百万个不同的程序,对它们进行过滤和聚类(cluster)之后,提交其中的10个程序来解决问题。

(当然前面也提到,有不少问题在第一次提交后就通过了)

090c316144e147fe97d5a2dd764550bd~tplv-tt-shrink:640:0.image

对于AlphaCode的出现,有程序员调侃称“可以在艺术家旁边排队等领救济粮了。”

2a35ff28488142b2b74f25b648e6c509~tplv-tt-shrink:640:0.image

不过,DeepMind官方对于AlphaCode的定调并非“AI版程序员”,而是希望它作为一个辅助的角色出现在编程工作中:

我们希望它能作为软件开发者的助手,尤其是为0编程基础的人提供写代码的机会。

0752119add6d4e0cb99fbb1b028eeb5a~tplv-tt-shrink:640:0.image

论文地址:
https://www.science.org/doi/10.1126/science.abq1158

参考链接:
[1]https://www.science.org/doi/10.1126/science.add8258
[2]https://mp.weixin.qq.com/s/wZcY_hEk_M61wTJVVIXfIg
[3]https://www.deepmind.com/blog/competitive-programming-with-alphacode

版权所有,未经授权不得以任何形式转载及使用,违者必究。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK