编程|AlphaCode惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员


编程|AlphaCode惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员

文章图片


编程|AlphaCode惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员

文章图片


编程|AlphaCode惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员

文章图片


编程|AlphaCode惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员

文章图片


编程|AlphaCode惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员

今天 , 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” 。
好了 , 现在问题来了:
【编程|AlphaCode惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员】
我们能否从前向后扫描一次s字符串 让s变为t 。 如果可以输出YES , 否则输出NO 。
AlphaCode给出的代码是这样的:
t=int(input()) for i in range(t):s=input()t=input()a=[
b=[
for j in s:a.append(j)for j in t:b.append(j)a.reverse()b.reverse()c=[
while len(b)!=0 and len(a)!=0:if a[0
==b[0
:c.append(b.pop(0))a.pop(0)elif a[0
!=b[0
and len(a)!=1:a.pop(0)a.pop(0)elif a[0
!=b[0
and len(a)==1:a.pop(0)if len(b)==0:print(\"YES\")else:print(\"NO\")

向以上程序输入4组字符串:
4 ababa ba ababa bb aaa aaaa aababa ababa
得到的输出是:
YESNONOYES
在这里 , AlphaCode不再是黑箱 。
它不仅成功解决了问题 , 还能将代码和注意力高亮的对应位置显示出来 。

一位网友表示:既然AI能看得这么细 , 那么如果能在代码后面加入注释就更好了 。

至于更多的案例 , 可以去AlphaCode网站观摩 。
原理DeepMind说 , 在Codeforces比赛中所需解决问题的能力 , 已经超出了现有AI系统的能力 。
整个AlphaCode模型的流程如下:

  1. 用标准的语言建模目标在GitHub代码上预训练一个基于Transformer的语言模型 。 这个模型可以合理地代表人类编写代码的空间 , 大大减少了问题的搜索空间 。
  2. 在竞争性编程数据集上微调模型 , 使用GOLD与tempering作为训练目标 , 进一步减少了搜索空间 , 并利用预训练弥补了少量的竞争性编程数据 。