神经网络DeepCoder通过从其他程序借用代码来学习编程


神经网络和500个程序(长度为3行)的测试集的不准确性的条件矩阵。 每个单元格包含一个假阳性结果的平均概率(在大字体中)和从中得出该值的测试程序的数量(在小字体中,方括号中)。 颜色饱和度与假阳性的可能性相关

程序员很快就会有一个很好的帮手:可以执行例行任务的智能神经网络。 而且,借助这种神经网络,人们甚至可以在不了解特定语言的语法的情况下创建程序,而实际上却无法进行编程。 必须组成一个算法并设置任务-神经网络将编写代码来解决这些问题。

结果,所有工作将变得更加富有成果:“人们将能够创建以前无法创建的系统,”麻省理工学院的独立专家Armando Solar-Lezama在给“ 新科学家”评论中说。

微软和剑桥大学的研究人员已经开发了一个名为DeepCoder的系统,该系统现在可以正确解决学校编程竞赛中的简单问题。 DeepCoder使用一种称为归纳程序综合的技术,该技术为许多开发人员所熟知。 她从其他程序中获取代码行,并制作了自己的独特程序。 请记住,与其他软件综合系统一样,DeepCoder也使用专用于特定应用程序的领域特定语言(DSL)。 它可以称为“迷你语言”或“截断的编程语言”。 它仅包含九个一阶函数:

HEAD,LAST,TAKE,DROP,ACCESS,MINIMUM,MAXIMUM,REVERSE,SORT,SUM

和五个高阶函数:

MAP,FILTER,COUNT,ZIPWITH,SCANL1

特定领域语言的范围相对于通用编程语言是有限的。

在分析每个代码段的输入和输出值之后,选择用于编译程序的行。 在科学工作中,您可以研究DeepCoder神经网络编写的9个5行程序示例。 例如,这是一个糖果问题(左)的解决方案,其中有文本描述(右)和输入值(在中间):



在寻找合适的代码行时,DeepCoder超越了man:他能够索引和分析比man能力更多的源代码。 机器学习系统学习了解如何使用这些模式-并预先形成基础。 另外,神经网络将以从未发生过的方式将找到的线连接到活人的方式连接。 通过反复试验,神经网络正在逐步学习以实现其目标。 DeepCoder系统中软件综合的这种实现方式称为学习归纳程序综合(LIPS)。


直接耦合编码器和DeepCoder解码器的示意图

下图显示了DeepCoder神经网络如何预测每个函数出现在源代码中的可能性。



所有这些优点使DeepCoder能够比其前身更快地编写程序。 她在一秒钟内编写了三行程序,而以前的系统需要更多或数十倍的时间才能尝试所有可能的选项。 例如,该表显示了从具有各种任务的三行代码生成程序的速度。



五行代码的程序生成速度降低了一个数量级。 右图显示了速度对程序长度的依赖性。



如您所学,系统将了解哪些代码组合有效,哪些无效。 她在每项新任务中的编程能力都在不断提高。

该技术可以潜在地用于重构和搜索程序中的错误。 她会找到错误的行,并用其他程序中的正确行替换它们。 作者认为,借助它的帮助,可以轻松创建著名的IFTTT风格的例行程序-自动执行不同Web服务之间的基本交互。 甚至非程序员也可以做出简单的指示,例如从Facebook选择照片并根据指定的标准对照片进行排序。 这样的简单程序可以在几分钟内创建而无需编程知识。

当然,这些工具还不能替代真正的程序员。 它们仅被视为辅助工具。 DeepCoder开发人员本身在将来将非常有用:它将减轻日常操作的负担,并使您能够专注于更复杂和重要的任务。

目前,DeepCoder能够使用大约五行代码来解决编程问题。 当然,在高级编程语言中,五行代码使您可以编写一个非常有用的程序,但这仍然是非常简单的基本操作。 专家认为,不可能使用软件综合来生成具有大量代码的复杂程序。 另一方面,在人类的帮助下这是可能的。 毕竟,大型程序由大量小片段组成。

至少在接下来的几年中,大多数程序员不会因为编码自动化而面临失业。 但是机器学习方法正在迅速改善。 令人惊讶的是最近在这方面做了多少工作。

Source: https://habr.com/ru/post/zh-CN401859/


All Articles