您现在的位置是:首页 > 人工智能人工智能
清华博士后用10分钟讲解AlphaCode背后的技术原理,原来程序员不是那么容易被取代的!
cc博主2022-02-10【人工智能】521人已围观
-论文地址:https://storage.googleapis.com/deepmind-media/AlphaCode/competition_level_code_generation_with_alphacode.pdf
-数据集:https://github.com/deepmind/code_contests根据DeepMind的博客介绍,AlphaCode 在号称「全球最强算法平台」Codeforces 上的 5,000 名用户解决的 10 项挑战中进行了测试。AlphaCode能够以与人类完全相同的格式在这10项挑战中自动输入代码,生成大量可能的答案,然后像人类程序员一样通过运行代码和检查筛选出可行答案,最终在人类程序员中取得了排名前 54%的好成绩。
也就是说,AlphaCode的代码能力媲美在Codeforces上参加过测试的几乎一半程序员(2300名)。按照一个初级程序员月薪2万的算法,AlphaCode有望每年替全球人类资本家省下5.52亿的人力成本,使一半程序员失业……
不过,DeepMind团队当时也明确指出了:AlphaCode目前只适用于竞争类编程比赛。
不可否认,这也是继DeepMind发布Alpha Go、AlphaZero与AlphaFold之后的又一研究突破,极大地增加了其Alpha系列的传奇色彩。但与该系列的其他工作(如AlphaGo打败世界围棋冠军)相比,AlphaCode的性能似乎并不突出,
目前正在清华大学朱军门下担任博士后研究员的Tea Pearce对AlphaCode的技术原理十分感兴趣,对DeepMind的这篇31页论文进行仔细阅读后,制作了一个短视频发表在油管上,从系统概述、测试阶段、数据集的预训练与微调、Transformer模型的训练过程与Transformer架构等维度对AlphaCode的细节进行了较为详细的讲解。
视频地址:https://www.youtube.com/watch?v=YjsoN5aJChA
与OpenAI之前开发的GPT-3一样,AlphaCode也是基于Transformer模型,只不过前者侧重于言生成,后者则强调对顺序文本(如代码)的解析。
下面AI科技评论对该短视频进行了简单整理:
AlphaCode的代码问题
当前,AlphaCode的目标编码问题集中为特定的竞赛类型,在诸如Codeforces的网站上参加编码挑战,其中,这些挑战包含对一个问题的简短描述与带有测试案例的示例,为挑战者提供了能与正确预期输出相匹配的输入。
简而言之,这些挑战的目标就是编写一些代码,为示例的测试案例与一组隐藏测试案例提供符合预期的输出。如果你的代码通过了所有测试,那么你就解决了这个问题。
根据DeepMind的介绍,AlphaCode在Codeforces网站所举办的编码挑战中取得了与普通用户相媲美的成功率。
AlphaCode系统概述
那么,AlphaCode的工作原理究竟是怎样的呢?
在DeepMind团队所发表的“Competition-Level Code Generation with AlphaCode”一文中,他们给出了一个高级的概要图(如下)。如图所示,AlphaCode的核心组件仍然是Transformer语言模型,其余单独组件也是旧的。
图注:AlphaCode的系统图
使用的协议
我们先看看AlphaCode在测试时是如何工作的。
首先要知道的一点是,在解决写代码的问题时,AlphaCode使用了一个非常具体的协议(protocol),且该协议决定了该系统的管道。根据论文显示,DeepMind团队获得了使用尽可能多的示例测试案例的权限,因为这些测试案例也包含在该问题内。
不过,他们确实将自己的测试限制在了10个提交的隐藏测试发送案例内。
测试阶段的AlphaCode
AlphaCode的测试时间分为三个独立的阶段。
他们首先使用了一个大规模的Transformer模型,将问题描述示例测试和问题的一些元数据作为输入,然后从模型中取样,生成大量潜在的解决方案。之所以先生成大量的潜在解决方案,是因为大多数脚本无法为某些人、甚至编译器所编译。
因此,在第二与第三阶段,他们就主要针对这100万个潜在代码脚本作「减法」,选出他们认为在给定协议的前提下可能有用的10个方案。而他们的做法也很简单,就是在示例测试案例中测试完这100万个代码脚本,然后将无法通过测试的大约99%个脚本排除掉,这就将脚本的数量减少到了千位数。
不过,协议要求其还要继续缩减到10个解决方案。于是,他们又采取了一个非常聪明的方法:
他们使用了第二个Transformer模型将问题描述作为输入,但不是尝试生成代码来解决问题,而是用Transformer生成测试案例输入,并为每个问题抽样50个测试案例输入。现在,他们不尝试生成输入与输出对,而只是试图产生一些与问题相关的现实输入。所以,AlphaCode可能必须根据问题所在,生成字符串、二进制数或数字列表等。
图注:Tim Pearce对AlphaCode在测试时的三个阶段进行讲解
为什么这是个好主意?因为他们认为如果两个脚本对所有 50 个生成的测试所返回的答案是相同的,那么它们就可能使用相同的算法,并且可能不想浪费两个提交来尝试这两个脚本。
所以,他们在这 50 个生成的输入上编译并运行大约 1000 个脚本。然后,他们根据这 50 个虚构输入的输出对脚本进行聚类。接着,他们会从每个聚类中选择一个示例脚本。如果十个脚本中的任何一个通过了所有隐藏测试,那么这些脚本就是最终的10个脚本,他们也就成功地解决了编码问题,否则就是失败。这就是 AlphaCode 在测试时的工作方式。
这其中涉及到对Transformer模型的训练,可以看下文。
对数据集进行预训练与微调
AlphaCode 使用的是当今深度学习中相当标准的预训练微调过程。
这里有两个数据集:第一个数据集是由各种编程语言组成的公共 Github 存储库,包含 715 GB 海量代码,用于预训练阶段,目的是让Transformer学习一些非常通用的知识,比如代码结构和语法。
第二个数据集要小得多,只服务于 AlphaCode 的目标,用于微调。该数据集是从一些编码挑战网站上抓取的,包括Codeforces。他们稍后会在数据集上进行测试,包含问题描述测试用例和人工编写的解决方案。这些是数据集。现在,我们该怎么处理它们?
Transformer模型的训练过程
首先说一下预训练阶段。
他们抓取了一些 github 代码,并随机选择所谓的枢轴点(pivot point)。
枢轴点之前的所有内容都会被输入编码器,而解码器的目标是重建枢轴点以下的代码。
编码器仅输出代码的向量表示,可用于整个解码过程。
解码器以自回归方式运行:首先预测代码的第一个标记。然后,损失函数只是预测的 softmax 输出和真实令牌(token)之间的交叉熵。第一个真正的令牌会成为解码器的输入,然后预测第二个令牌,并且当要求解码器预测代码令牌的意外结束时,重复此过程直到代码结束。
现在,这些损失通过解码器和编码器反向传播,尽管事实证明:只为编码器添加第二个损失很重要。
这被称为掩码语言,可以高效地建模损失。将输入到编码器中的一些令牌清空。作为一种辅助任务,编码器尝试预测哪个令牌被屏蔽。一旦预训练任务完成,我们就进入微调任务。
在这里,我们将问题描述的元数据和示例输入投喂到编码器中,并尝试使用解码器生成人工编写的代码。这时,你可以看到这与编码器-解码器架构强制执行的结构非常自然地吻合,损失与预训练任务完全相同。
还有一个生成测试输入的Transformer。这也是从同一个 github 预训练任务初始化而来的,但它是经过微调来生成测试输入,而不是生成代码。
Transformer架构
DeepMind 团队对各种大小的模型进行了实验。经实验,较大规模的模型往往表现更好。编码器和解码器本身由多头注意力层组成,且这些层非常标准。
其他技巧
该论文有许多进步之处。在这里,我不打算全部介绍,只想强调一个我认为很酷炫的点,就是标签和评级增强,以及问题描述。
我们总是将元数据作为Transformer的输入。这包括问题的编程语言难度等级。一些问题的标签与解决方案在训练时是否正确?他们显然知道这些字段的值是什么,但是在测试时他们并不知道什么是酷炫的,那就是他们实际上可以在测试时将不同的内容输入到这些字段中以影响生成的代码。例如,你可以控制系统将生成的编程语言,甚至影响这种解决方案。
它尝试生成比如是否尝试动态编程方法或进行详尽搜索的答案。他们在测试时发现有帮助的是,当他们对 100 万个解决方案的初始池进行抽样时,是将其中的许多字段随机化。通过在这个初始池中拥有更多的多样性,其中一个代码脚本更有可能是正确的。
结语以上就是 Tea Pearce 对 AlphaCode 工作原理的讲解。从AlphaCode的工作出发,他谈到自己的思考:为什么DeepMind团队在这些编码问题上实现的性能水平比在围棋(AlphaGo)或星际争霸(AlphaZero)游戏中的超人水平系统要低得多呢? Tea Pearce的分析是,从自然语言描述中编写代码本质上就比玩游戏要困难得多,但这也可能是因为游戏中可用的数据少得多。你可以根据需要模拟尽可能多的数据,而编码问题的数量是有限的。最后,Tea Pearce抛出问题:AI写代码之所以难的原因可能是什么?在未来,AI的代码水平要怎样才能超越人类最优水平? 欢迎在评论区留言讨论。
参考链接:
1. https://www.youtube.com/watch?v=YjsoN5aJChA
2. https://www.reddit.com/r/MachineLearning/comments/slwh69/p_alphacode_explained/
3. https://storage.googleapis.com/deepmind-media/AlphaCode/competition_level_code_generation_with_alphacode.pdf
4. https://www.deepmind.com/blog/article/Competitive-programming-with-AlphaCode
雷峰网(公众号:雷峰网)雷峰网
雷峰网版权文章,未经授权禁止转载。详情见转载须知。
相关文章
- 用机器学习算法解决密度泛函问题?若成功,药物发现、超导研究有望更上一层楼
- 学 AI 也能进编制了?「人工智能安全研究中心」公开招聘,计算机技术岗有51个坑位!
- 微软不敢豪赌 HoloLens
- 我在超级QQ秀看到,有生命力的虚拟世界
- B站向爆料人发出律师函,并否认篡改员工加班记录;许家印称不能靠贱卖资产还债;腾讯否认永不录用怒怼管理层应届生|雷峰早报
- IPhone又出新隐私漏洞,这次问题出在Siri上
- FPGA江湖:英特尔一寸短,赛灵思一寸强
- 卖身英伟达失败,10年掌舵人下马,Arm何错之有?
- 马斯克SpaceX遭遇重创,40颗星链卫星刚发射1天就宣布报废,损失高达1200万美元
- 抖音老照片变视频处理教程Deep Nostalgia使用教程
猜你喜欢
斯坦福李飞飞团队新研究登 Nature 子刊:实现可信 AI,数据的设计、完善、评估是关键
人工智能作者 | 李梅、王玥编辑 | 陈彩娴在当前 AI 模型的开发以模型为中心转向以数据为中心的趋势下,数据的质量变得尤为重要。在以往的 AI 开发流程中,数据集通常是固定的,开发工作的重点是迭代模型架构或训练过程来提高基准性能。而现在,数据迭代成为重心,因此我们...
阅读更多开业半小时停业、代购200元1杯、惊动警方出动警力,茶颜悦色回应雇人排队;百度网盘回应人工审核事件;橙心优选重启运营|雷峰早报
业界开业半小时就停业,代购200元1杯,南京抽调警力维护秩序.....茶颜悦色回应雇人排队8月18日上午,茶颜悦色南京店开业,从早上8点30分开始,陆续挤满一支5小时的排队队伍。南京市公安局江宁分局发出警方提示,新开业饮品店排队人员仍然较多,目前人员排队已至...
阅读更多新一代华为MatePad Pro发布,智慧办公体验再次升级
业界2022年7月27日,备受期待的新一代华为MatePad Pro在“HarmonyOS 3及华为全场景新品发布会”上正式发布,拥有曜金黑、星河蓝、晶钻白、锦白四种配色,8GB+128GB版本售价3499元(仅在华为商城、部分授权电商开售)、8GB+256GB版...
阅读更多最新谷歌翻墙免费v2ray节点分享-永久ss/ssr节点链接每日更新(2022/7/23)
技术好文今日星期六,为大家提供最新免费v2ray节点分享-永久ss/ssr节点链接每日更新,更新于2022年7月23日17点更新。需要付费节点下方推荐点击出门右拐即可,周末更新资源部分可用,免费资源不易,请大家珍惜。CC博客将持续更新可用资源,尽力更新更多好用资源给大...
阅读更多香港云服务器1核2G 2M 82元/月 美国云服务器 1核2G 5M 69元/月 日本云服务器1核2G 2M 74元/月 【恒创科技】
服务器评测恒创科技,是香港 SonderCloud Limited 旗下的老牌IDC品牌,主营中国香港、美国、日本、韩国等地骨干级机房优质资源,BGP国际多线网络,三网直连,CN2 GIA高速回国,以稳定的网络质量吸引众多开发者和企业选择。恒创科技【618出海盛惠】活...
阅读更多