因此,在第二与第三阶段,他们就主要针对这100万个潜在代码脚本作「减法」,选出他们认为在给定协议的前提下可能有用的10个方案。而他们的做法也很简单,就是在示例测试案例中测试完这100万个代码脚本,然后将无法通过测试的大约99%个脚本排除掉,这就将脚本的数量减少到了千位数。
不过,协议要求其还要继续缩减到10个解决方案。于是,他们又采取了一个非常聪明的方法:
他们使用了第二个Transformer模型将问题描述作为输入,但不是尝试生成代码来解决问题,而是用Transformer生成测试案例输入,并为每个问题抽样50个测试案例输入。现在,他们不尝试生成输入与输出对,而只是试图产生一些与问题相关的现实输入。所以,AlphaCode可能必须根据问题所在,生成字符串、二进制数或数字列表等。
文章插图
为什么这是个好主意?因为他们认为如果两个脚本对所有 50 个生成的测试所返回的答案是相同的,那么它们就可能使用相同的算法,并且可能不想浪费两个提交来尝试这两个脚本。
所以,他们在这 50 个生成的输入上编译并运行大约 1000 个脚本。然后,他们根据这 50 个虚构输入的输出对脚本进行聚类。接着,他们会从每个聚类中选择一个示例脚本。如果十个脚本中的任何一个通过了所有隐藏测试,那么这些脚本就是最终的10个脚本,他们也就成功地解决了编码问题,否则就是失败。这就是 AlphaCode 在测试时的工作方式。
文章插图
这里有两个数据集:第一个数据集是由各种编程语言组成的公共 Github 存储库,包含 715 GB 海量代码,用于预训练阶段,目的是让Transformer学习一些非常通用的知识,比如代码结构和语法。
文章插图
文章插图
他们抓取了一些 github 代码,并随机选择所谓的枢轴点(pivot point)。
文章插图
枢轴点之前的所有内容都会被输入编码器,而解码器的目标是重建枢轴点以下的代码。
文章插图
编码器仅输出代码的向量表示,可用于整个解码过程。
解码器以自回归方式运行:首先预测代码的第一个标记。然后,损失函数只是预测的 softmax 输出和真实令牌(token)之间的交叉熵。第一个真正的令牌会成为解码器的输入,然后预测第二个令牌,并且当要求解码器预测代码令牌的意外结束时,重复此过程直到代码结束。
现在,这些损失通过解码器和编码器反向传播,尽管事实证明:只为编码器添加第二个损失很重要。
这被称为掩码语言,可以高效地建模损失。将输入到编码器中的一些令牌清空。作为一种辅助任务,编码器尝试预测哪个令牌被屏蔽。一旦预训练任务完成,我们就进入微调任务。
在这里,我们将问题描述的元数据和示例输入投喂到编码器中,并尝试使用解码器生成人工编写的代码。这时,你可以看到这与编码器-解码器架构强制执行的结构非常自然地吻合,损失与预训练任务完全相同。
还有一个生成测试输入的Transformer。这也是从同一个 github 预训练任务初始化而来的,但它是经过微调来生成测试输入,而不是生成代码。
- 芯片|清华大学不负众望,打破芯片领域技术限制,成功出货核心设备!
- 骨骼|4.6亿中国人的需求,康复赛道大爆发!这位85后博士刚刚拿下上亿融资
- 意图|4.6亿中国人的需求,康复赛道大爆发!85后博士刚刚拿下上亿融资
- 图分析|TigerGraph CEO许昱博士:图分析正在达到广泛采用的临界点|探路2022
- 高通骁龙|为何要进口设备?清华大学半导体项目落地:国际先进、自主产权
- 研究机构|清华和阿里跻身全球AI研究机构20强
- 学霸|3位清华学霸创业,拿百亿融资及2亿补贴,却4年半亏了150多亿
- 荔枝|荔枝《2021互联网音频收听报告》:90后、00后用户合计占比达9成,年度高峰在线时间为21时
- 计算器|江苏美女博士走红,回国打破外国芯片垄断,这才是我们的“明星”
- 苹果|超越华为,位居世界第二,80后哈工大博士做出一个IPO!