当前位置: 首页 > 科技观察

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

时间:2023-03-22 01:10:34 科技观察

AlphaCode登场!编程版“AlphaGo”悄然进入比赛,打败了之前“偷偷进村”的一半程序员,无人察觉。它默默地参加了著名网站Codeforces最近举办的10场编程比赛,成绩超过了人类的一半。直到今天,DeepMind才公布了最终成绩:AlphaCode在10场比赛中排名前54.3%,Elo得分为1238。更重要的是,在检验算法创造力的编程竞赛中,AI终于不落下风,而这恰恰是AI过去所欠缺的。如果从过去六个月的整体来看这个分数,AlphaCode的表现还要好一些,因为它只做了10周的题,就达到了前28%用户的水平。Codeforces是由俄罗斯程序员MikhailMirzayanov创立的编程竞赛网站,大约每周举办一次名为“CodeforcesRounds”的编程竞赛。Codeforces的Elo分数可以衡量一个程序员的编程水平。△Codeforces创始人MikhailMirzayanov当看到AlphaCode的结果时,就连创始人Mirzayanov也很惊讶。一开始他对人工智能持怀疑态度,因为编程竞赛考的是发明算法的能力,这是最难的。没想到,AlphaCode的结果完全出乎他的意料。DeepMind发布这条消息仅仅半天时间,就已经被转发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给出的代码是这样的:t=int(input())foriinrange(t):s=input()t=input()a=[]b=[]forjins:a。append(j)forjint:b.append(j)a.reverse()b.reverse()c=[]whilelen(b)!=0andlen(a)!=0:ifa[0]==b[0]:c.append(b.pop(0))a.pop(0)elifa[0]!=b[0]andlen(a)!=1:a.pop(0)a.pop(0)elifa[0]!=b[0]andlen(a)==1:a.pop(0)iflen(b)==0:print("YES")否则:print("NO")向上面的程序输入4组字符串:4abababaabababbaaaaaaaaababaababa得到的输出是:YESNONOYES这里AlphaCode不再是一个黑框了。不仅成功解决了问题,还显示了代码对应的位置和注意高亮。有网友说:既然AI能看的这么细,要是能在代码后面加上注释就更好了。至于更多的情况,大家可以去AlphaCode官网观察。DeepMind的负责人表示,Codeforces竞赛要求的解决问题的能力已经超过了现有AI系统的能力。整个AlphaCode模型的流程是这样的:在GitHub代码上用标准的语言建模目标预训练一个基于Transformer的语言模型。该模型可以合理地表示人类编写代码的空间,大大减少了问题的搜索空间。在竞技编程数据集上微调模型,使用GOLD和tempering作为训练目标,进一步缩小搜索空间,利用预训练来弥补竞技编程数据量小的问题。为每个问题从模型中生成大量样本。通过使用实例测试和聚类根据程序行为选择样本,过滤样本以获得候选提交的小样本(最多10个),用于评估隐藏的测试用例。总而言之,通过将大规模Transformer模型与大规模采样和过滤相结合,DeepMind在可解决的问题数量上取得了显着进步,比之前的工作提高了一个数量级。刷题的人是抗拒的。正如Codeforces的创始人所说,算法的发明和创造是编程问题中最难的。常年在全球编程竞赛网站上名列前茅的谷歌工程师PetrMitrichev表示:解决编程竞赛问题是一件非常困难的事情。它既需要良好的编码技能,也需要人类解决问题的创造力。AlphaCode并不是第一个编程工具,Codex和GitHubCopilot都令人印象深刻。但DeepMind认为AlphaCode与其前辈有很大的不同:最近的大规模语言模型已经展示了惊人的代码生成能力,现在已经能够完成简单的编程任务。然而,这些模型在评估更复杂、看不见的问题时仍然表现不佳,这些问题需要解决问题的技能,而不仅仅是将指令转换为代码。与Twitter相反,Codeforces的专家们更有抵抗力。一位程序员心想:“这个AI真是个菜鸟。”因为AlphaCode只有1238分,只相当于学生的水平,而参加信息学奥赛的中学生也能达到这个水平。尽管DeepMind宣称AlphaCode是为了辅助人类,但一些程序员开始担心了:现在连刷题的世界都被AI霸占了。!