剑桥与微软提交ICLR 2017论文提出DeepCoder:组合其它程序代码生成新程序

机器学习系统第一次获得了自我编码的能力,剑桥与微软联合提交ICLR 2017的论文提出DeepCoder,可以组合其它程序代码生成新程序。


「走开吧,人类,我自己能搞定了。」


这是第一次,有机器学习系统获得了自我编码的能力。这个机器学习系统叫做 DeepCoder,是由微软和剑桥大学的研究人员所创造的,这一系统可以解决编程竞赛设置的基本挑战。这种方法让人们编写简单程序容易了许多,甚至可以让不会编写代码的人完成任务。


「突然之间,人们的工作效率就提高了很多,」麻省理工学院的 Armando Solar-Lezama 说道。「人造系统此前是无法做到这一点的。」Marc Brockschmidt 是英国剑桥微软研究院 Deepcoder 的开发者之一,它认为这种方法最终可以让那些不懂编码的人只要简单描述一个建立程序的想法,就能够让系统来构建。


DeepCoder 利用了一种叫做「程序合成」(program synthesis)的技术:它创造新程序的方法就是将从现有软件中提取出来的一行一行的代码组合起来——就像是程序员一样。列出每一个代码片段的输入和输出,DeepCoder 就会知道要总体上完成预期结果需要哪些代码。


利用这种方法,那些不懂编码的人只要能够简单描述一个建立程序的想法,就能够让系统来构建。


这样放任人工智能的一个优势在于,比人类程序员相比,它能够更全面、更广泛地进行搜索,这样组合源代码的方式可能是人类都没有想到的。此外,DeepCoder 利用机器学习来搜寻源代码数据库,并根据它们对这些源代码可能存在的可用性的判断挑出一些代码片段。


这些特性使得该系统比之前的其他系统要快得多。DeepCoder 在一秒钟的时间内就可以建立可用的程序。以前的系统在将可用的代码组合起来之前,要花费好几分钟来追踪不同代码的组合。因为 DeepCoder 知道哪种源代码的组合可用,哪些不可用,在每次解决新问题的时候它都能随之改进。


构建 IPS 系统需要解决两个问题。首先是搜索问题:我们需要搜索一组可能的程序而找到一致性程序(consistent programs)。我们需要定义数据集(如程序空间)和搜索进程。其次是排序问题:如果有多个程序和输入-输出样本具有一致性,哪一个程序是需要返回的结果?这两个问题都取决于问题构想(problem formulation)的具体细节。因此,构想程序合成方法(program synthesis approach)的第一个要点就是选择特定域语言(Domain Specific Language)。


这一技术可以应用到很多不同的地方。2015 年,麻省理工学院的研究人员建立了一个自动修复软件漏洞的程序,可以将程序中错误的代码行用其他程序中可以使用的代码行替代。Brockschmidt 说,未来的版本将会让建立常规程序变得非常简单,例如它可以从网站上搜寻信息,或者自动将 Facebook 上的照片进行分类,而人类程序员连动动手指都不需要。


Solar-Lezama 表示:「这种科技所蕴含的自动化的潜力或许真的意味着编写代码耗费的经历将大幅减少。」


但是他不认为这些系统会让程序员失业。我们可以通过程序合成(program synthesis)自动编译一些最繁杂的代码,而程序员可以花更多的时间来做一些更复杂的工作。


目前,DeepCoder 仅仅只能解决五行代码内的编程难题。但是在优良的编程语言中,少量几行代码可以完成相当复杂的程序。


Solar-Lezama 说:「一次性生成大段代码是非常困难的,甚至是不切实际的,但是那些真正大量的代码都是由许多小块代码所拼接的。」


最后,经过不断的训练,系统会变得更加聪明,如果 DeepCoder 能找出哪些程序块在一起能更好地运行,以及什么时候使用一个代码块替换另一个,那么将大大减轻程序员的工作,这也将会是深度学习系统一个非常好的应用。DeepCoder 是一个会学习的系统,随着构建越来越多的程序块,它将越来越强大。


  • 论文:DEEPCODER: LEARNING TO WRITE PROGRAMS


image.png


摘要:我们开发了一种使用输入-输出样本的深度学习来解决编程竞赛风格(programming competition-style)问题。该方法通过训练神经网络来预测由输入到输出生成的程序属性。我们使用神经网络的预测来增强在编程中进行搜寻的技术,其包括了枚举搜寻(enumerative search)和基于 SMT 的解算器(SMT-based solver)。实证表明,我们的方法可以在强非增强型基线(strong non-augmented baselines)和递归神经网络(Recurrent Neural Network)方法上产生一个数量级的加速,并且我们能够解决和在编程竞赛中比最简单问题更复杂一些的问题。


原文链接:https://www.newscientist.com/article/mg23331144-500-ai-learns-to-write-its-own-code-by-stealing-from-other-programs/

理论机器学习剑桥大学微软论文ICLR 2017自动编程理论
暂无评论
暂无评论~