点击下方卡片,关注“CVer”公众号
AI/CV重磅干货,第一时间送达
今天,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评分可以衡量一位程序员的编程水平。
当看到AlphaCode的成绩后,连创始人Mirzayanov都惊讶不已。
他原本对AI持怀疑态度,因为编程比赛考验的是发明算法的能力,这是最困难的,没想到AlphaCode的结果完全超出了他的预期。
DeepMind发布这条消息仅半天,在Twitter上已经有2000多次转发、5000多点赞。
说了这么多,下面我们来看看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给出的代码是这样的:
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
得到的输出是:
YES
NO
NO
YES
在这里,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应该适可而止,给程序员们留一片净土吧!
参考链接:
[1]https://deepmind.com/blog/article/Competitive-programming-with-AlphaCode
[2]https://alphacode.deepmind.com/
[3]https://storage.googleapis.com/deepmind-media/AlphaCode/competition_level_code_generation_with_alphacode.pdf
[4]https://github.com/deepmind/code_contests
ICCV和CVPR 2021论文和代码下载
后台回复:CVPR2021,即可下载CVPR 2021论文和代码开源的论文合集
后台回复:ICCV2021,即可下载ICCV 2021论文和代码开源的论文合集
后台回复:Transformer综述,即可下载最新的3篇Transformer综述PDF
CVer-Transformer交流群成立
扫码添加CVer助手,可申请加入CVer-Transformer 微信交流群,方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。
一定要备注:研究方向+地点+学校/公司+昵称(如Transformer+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群
▲长按加小助手微信,进交流群
▲点击上方卡片,关注CVer公众号