Press "Enter" to skip to content

【简要笔记】deepmind新工作:alphacode

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

今天上午被alphacode刷屏了,都在说以后找不到工作了,被激起了好奇心。粗略看一下这个工作。

 

论文的preprint在这儿: https:// storage.googleapis.com/ deepmind-media/AlphaCode/competition_level_code_generation_with_alphacode.pdf

 

背景

 

alphacode 这个工作主要是提出一个方法,可以生成代码用于 codeforce 的题目。类似的工作近几年有不少,比如 Evaluating large language models trained on codeProgram synthesis with large language models 。alphacode 的区别在于它是在竞赛任务上做的,并且精度不错。

 

方法

 

方法不复杂,paper里面这张图概括得很好,分为4个步骤

 

 

    1. pretrain:在github的数据集上做pretrain。模型就是BERT,pretrain方法也差不多。

 

    1. fine-tune:在 codeforce 数据集上做 fine-tune,这个模型是标准的基于 transformer 的 encoder-decoder 结构,encoder输入是题目的描述(也包括:题目的tags、solution使用的语言、题目中的样例),decoder的输出对应的ground-truth是一个solution,可以是对的,也可以是错的。

 

    1. 用训练完的模型 sample 大量的 solution 出来,并且做过滤和聚类。过滤是为了去掉无法通过样例的代码(会干掉绝大部分),聚类是为了让实现不同但输出相同的代码只提交一次(节约提交的budget)。聚类中,还需要一个独立训练的生成测试数据的模型。这个步骤是针对竞赛题设计的,从这个步骤看,直接用生成的代码直接run错误的概率很高。

 

    1. 从聚类最大的类开始挑选,选出10个solution来提交。

 

 

注意 :alphacode 并不像 alphazero/master 一样在 OI 平台上反复试错,它只是收集历史比赛数据做训练。

 

几个重要技巧

 

 

    1. Tempering:训练的时候在 logit 之后调整 temperature,它是往小于1去调,具体方法如下。

 

 

截图自 ”Softmax Tempering for Training Neural Machine Translation Models“

2. Value conditioning & prediction:在 encoder 的输入中,补充很多信息,比如:RATING、TAGS、solution的语言、solution是否是正确的。注意:inference 的时候TAGS、语言等用于提升多样性,solution则都填“正确”。例子如下图所示。

 

原文的 figure5

3. GOLD:loss 选择 off-policy 的 loss,物理意义上是希望一个 solution 能从否到尾都是正确的,而不是前一半对后一半错(竞赛中对一半其实就是错),也就是为了让模型更加focus在准确(precision)而非召回(recall)。

 

原文的公式(1)

实验可以看原文,而且很多公众号上来就贴了实验结果,不再赘述。

 

总结

 

 

    1. 总体来看,方法并不惊艳,甚至没有用 OI 平台反复博弈的环节,只是用了历史数据。

 

    1. 这个实验结果,不确定和 codeforce 本身会有一些重复题目有没有关系(论文里面做了一些对比来观察模型是否是复制粘贴训练集,但不能完全回答这个问题)。

 

    1. 非常针对 codeforce 竞赛题的机制来做了独特设计(尤其是采样和选择子集的部分),距离通用代码生成还比较远(比如1-2年?)。

 

    1. 应用场景:简单的代码任务,取代一部分人工。但有个疑问,如果 ML 方法可以生成正确运行的代码了,那为什幺不用这个方案直接解决问题,完全可以跳过代码生成的步骤。

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。