APP下载
报价宝  ›  资讯  › 

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

报价宝 来源:baojiabao.com 发布时间:2022-12-21 11:50:44 09月10日更新
报价宝综合消息AI 编程登上 Science 封面:AlphaCode 打竞赛,三分之二赛题一遍过,成绩超过一半程序员

DeepMind 的 NS 论文又新添一篇。

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

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

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

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

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

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

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

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

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

首次通过率 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 给出的解法如下:

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

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

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

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

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

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

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

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

AlphaCode 是如何读题写码的

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

论文地址:

https://www.science.org/doi/10.1126/science.abq1158

参考链接:

本文来自微信公众号:量子位 (ID:QbitAI),作者:鱼羊 萧箫

文章标签: 字符 编程 问题 字符串 输出 程序 编码 编码器 解码器 训练 代码 比赛 位置 论文 程序员 竞赛 不同 任务 光标 内容 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 数码相机价格 手机价格 汽车价格 笔记本电脑价格 耳机价格