DeepMind又加了一篇NS论文。
这次是信息学选手中的奥数AlphaCode,登上了最新一期《科学》的封面。
没错,就是那个潜入10次编程比赛并打出代码,得分超过人类一半的编程AI。
并且在这篇新更新的论文中,DeepMind还首次透露了AlphaCode的一次通过率:66%。
也就是说,AlphaCode近三分之二的投稿都是AC。
CMU博世人工智能中心教授j·济科·科尔特的最新综述文章也发表在这一期《科学》杂志上。他认为:
AlphaCode不只是复制现有的解决方案。
当面对从未见过的编程问题时,它表现得非常好,不管它有多理解这项任务。
在DeepMind的官方推特下,还有很多人把AlphaCode和现在流行的炸鸡ChatGPT联系在一起。
有人迫不及待地想看到他们两人同台演出:
一次通过率66%
尽管是AI编程领域,GitHub的Copilot还是快进到了收费模式,甚至和程序员法庭上见。
但在DeepMind看来,AlphaCode就大不一样了。
一方面,编程比赛本身对于AI来说是一个比纯编程更复杂的任务,关键是为不可预见的问题构建解决方案。
另一方面,在架构方面,AlphaCode采用不同的机制对竞赛题的文本进行编码。
值得一提的是,AlphaCode玩的10场编程比赛都是来自Codeforces。
相比其他算法和数据结构的编程竞赛,Codeforces更倾向于考察思维能力,也就是说AI不能仅仅通过反点来完成挑战。
例如,这是Codeforces上1553D问题的描述:
有两个字符串S和T,都是由小写字母组成的对于字符串S,我们从前到后扫描整个字符串
如果按下退格键,从光标前面到前一个取消删除字符的所有字符都将被删除。
也就是说,假设字符串S是abcbd,你分别在第一个位置和第四个位置按Backspace,那么就会得到字符串bd。
因为第一个光标位置之前没有字符,所以第一次没有动作第四个光标位置之前的字符是C,最后一个未删除的字符是A,所以按Backspace会删除前三个字符bd
对于这个前提,我们需要解决以下几个问题:
能不能把S串从前到后扫描一次让S变成T如果可能,输出YES,否则,输出no
为了解决这个问题,AlphaCode给出了以下解决方案:
然后,我们只需要给出输入的字符串编号和具体的字符串内容,这样程序就可以输出相应的结果:
第一组是亚贝巴,第二组是亚贝巴,第三组是aaa,第四组是aababa。
这个程序的输出结果分别是YES,NO,NO,YES。
在解决问题的过程中,AlphaCode的解决问题的思路不再是黑箱。
它不仅成功地解决了问题,还显示了代码的相应位置和注意亮点:
以上只是AlphaCode解决的问题之一。
总体而言,在Codeforces平台举办的编程竞赛模拟评测中,AlphaCode在平均参赛人数超过5000人的竞赛中排名前54.3%——击败了一半的参赛者。
而第一次提交的概率是66%。
AlphaCode如何读取铭文代码
那么,AlphaCode是靠什么原理取得这种胜利的呢。
它仍然基于预训练—微调范式,采用Transformer架构,其中编码器具有读能力,解码器具有写能力。
发表在《科学》上的这篇论文也给出了更直观的示意图,并以Python为案例讲解了具体的训练过程。
在预训练期间,研究人员会在GitHub上整理出各种代码集,并将其喂给AlphaCode上的编码器和解码器。
以Python上的print为例,其中print是一个常用函数,即printout,hello是需要打印出来的具体内容。
经过预训练,模型具备了按指令完成任务的基本要求,其中编码器负责生成指令,解码器负责填充其余部分。
在微调环节,研究人员会对竞技编程比赛的数据集进行整理,包括问题和解决方案,以炼金和磨炼为训练目标,进一步缩小搜索空间。
其中,问题以注释#的形式交给编码者学习,解决方案交给解码者尝试理解:
经过微调后,解码器知道如何通过编码器生成注释来尝试输出相应的代码。
经过前期训练——微调,就到了最后的测评环节。
Codeforces的标题会以注释的形式直接给编码者,解码者会尝试输出数百万个不同的程序在对它们进行过滤和聚类之后,它将提交其中的10个来解决问题
对于AlphaCode的出现,有程序员调侃说可以在艺人旁边排队领救济粮了。
不过,DeepMind对于AlphaCode的官方口吻并不是AI程序员,而是希望它以辅助角色的身份出现在编程工作中:
我们希望它可以作为软件开发人员的助手,尤其是那些编程基础为0的人。
论文地址:
参考链接: