AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

DeepMind 的 NS 论文又新添一篇。

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

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

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

并且就在这篇最新更新的论文中,DeepMind 还首次透露了 AlphaCode 的“一次通过率”:66%。 也就是说,AlphaCode 近三分之二的提交,都是一次 AC(Accepted)的。

CMU 博世人工智能中心教授 J. Zico Kolter 的最新评论文章也同时发表在了这一期 Science 上,他认为:「AlphaCode 不仅仅是复制现有的解决方案。 在面对以前没见过的程序题时,它表现得非常好,无论它是在多大程度上真正“理解”了这个任务。”

而在 DeepMind 的官方社交平台下,还有不少人把 AlphaCode 同当红炸子鸡 ChatGPT 联络了起来。

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

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

首次突破通过率 66%

尽管 AI 程序领域,GitHub 的 Copilot 已经快进到收费模式,甚至还和程序员们“法庭上见”了。 但在 DeepMind 看来,AlphaCode 还是颇有些不同之处。

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

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

值得一提的是,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 给出的解法如下:

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

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

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

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

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

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

在做题过程中,AlphaCode 的“解题思路”也不再是黑箱。 它不仅成功解决了问题,还能将代码和注意力高亮的对应位置显示出来:

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

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

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

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

AlphaCode 是如何读题写码的

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

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

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

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

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

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

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

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

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

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

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

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

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

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

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

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

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员

不过,DeepMind 官方对于 AlphaCode 的定调并非“AI 版程序员”,而是希望它作为一个辅助的角色出现在程序工作中:我们希望它能作为软件开发者的助手,尤其是为 0 程序基础的人提供写代码的机会。

AI 程序员又赢了:AlphaCode 参加程序竞赛66%题目一次看懂完成,成绩超过一半程序员
(0)
打赏 微信扫一扫 微信扫一扫

相关推荐

发表评论

登录后才能评论