今天,DeepMind 的“Alpha”家族再添一名新成员:会刷编程竞赛题的 AlphaCode 来了!
其实,AlphaCode 早在几个月前就“悄悄进村”了,一直没人察觉。它默默参加了著名网站 Codeforces 最近举行的 10 场编程比赛,成绩超过了一半人类。
直到今天 DeepMind 才公布最终成绩:AlphaCode 在这 10 场比赛中排名前 54.3%,Elo 评分 1238。
更重要的是,在编程比赛这样考察算法创造力的问题中,AI 终于不落下风,而这恰恰是 AI 过去所欠缺的。
如果把这个分数放到过去六个月总体来看,AlphaCode 的成绩更为优秀,因为它只刷了 10 周的题目,就已经达到了前 28% 用户的水平。
Codeforces 是一个由俄罗斯程序员 Mikhail Mirzayanov 创办的编程竞赛网站,大约每周举行一次名为“Codeforces Rounds”的编程比赛。
通过 Codeforces 的 Elo 评分可以衡量一位程序员的编程水平。
△ Codeforces 创始人 Mikhail Mirzayanov
当看到 AlphaCode 的成绩后,连创始人 Mirzayanov 都惊讶不已。
他原本对 AI 持怀疑态度,因为编程比赛考验的是发明算法的能力,这是最困难的,没想到 AlphaCode 的结果完全超出了他的预期。
DeepMind 发布这条消息仅半天,在 Twitter 上已经有 2000 多次转发、5000 多点赞。
AlphaCode 如何编程
说了这么多,下面我们来看看 AlphaCode 是如何成为“编程做题家”的。
以下是 Codeforces 上的 1553D 问题:(链接:https://codeforces.com/ problemset / problem / 1553 / D)
有两个字符串 s 和 t,都是由小写字母组成。对于字符串 s,我们从前向后扫描整个字符串。
如果按下 Backspace 键,就删除该光标前到上一个未删除字符之间的所有字符。
例如字符串 s 是”abcbd”,你分别在第一个位置和第四个位置按下 Backspace,那么将得到字符串”bd”。
因为在第一个光标位置前没有字符,所以第一次没有动作。第四个光标位置前的字符是 c,上一个未删除字符是 a,所以按下 Backspace 将删除前三个字符”bd”。
好了,现在问题来了:
我们能否从前向后扫描一次 s 字符串, 让 s 变为 t。如果可以输出 YES,否则输出 NO。
AlphaCode 给出的代码是这样的:
向以上程序输入 4 组字符串:
得到的输出是:
在这里,AlphaCode 不再是黑箱。
它不仅成功解决了问题,还能将代码和注意力高亮的对应位置显示出来。
一位网友表示:既然 AI 能看得这么细,那么如果能在代码后面加入注释就更好了。
至于更多的案例,可以去 AlphaCode 网站观摩。
原理
DeepMind 说,在 Codeforces 比赛中所需解决问题的能力,已经超出了现有 AI 系统的能力。
整个 AlphaCode 模型的流程如下:
用标准的语言建模目标在 GitHub 代码上预训练一个基于 Transformer 的语言模型。这个模型可以合理地代表人类编写代码的空间,大大减少了问题的搜索空间。
在竞争性编程数据集上微调模型,使用 GOLD 与 tempering 作为训练目标,进一步减少了搜索空间,并利用预训练弥补了少量的竞争性编程数据。
为每个问题从模型中生成非常多的样本。
对样本进行过滤,以获得一小部分候选提交的样本(最多 10 个),在隐藏的测试案例上进行评估,方法是利用实例测试和聚类,根据程序行为挑选样本。
总而言之,通过将大规模 Transformer 模型与大规模采样和过滤相结合,DeepMind 在可以解决的问题数量方面取得了重大进展,比之前的工作高出一个数量级。
刷题人士抵触
正如 Codeforces 创始人所说,在编程问题中对算法的发明创造是最难的。
在全球编程比赛网站上常年排名前几的谷歌工程师 Petr Mitrichev 说:解决编程比赛问题是一件非常困难的事情。它既需要良好的代码技能,也需要人类解决问题的创造力。
AlphaCode 不是第一个编程工具,Codex 以及 GitHub Copilot 都给人留下了深刻的印象。
但 DeepMind 认为,AlphaCode 和前辈们大有不同:最近的大规模语言模型展示了生成代码的惊人能力,现在能够完成简单的编程任务。然而,当对更复杂、看不见的问题进行评估时,这些模型的表现仍然很差,这些问题需要解决问题的技能,而不仅仅是将指令翻译成代码。
与 Twitter 上截然不同的是,Codeforces 高手们却多有抵触情绪。
一位程序员认为:“这个 AI 真是个菜鸟。”
因为 AlphaCode 只有 1238 分,只相当于一个学生水平,一个参加信息学奥赛的中学生也能刷到这个水平。
虽然 DeepMind 声称 AlphaCode 是为了辅助人类,但也有程序员开始担心了:
现在连刷题的世界都被 AI 占领,本来这里是程序员们切磋的地方,AI 应该适可而止,给程序员们留一片净土吧!