APP
让AI自行编写程序
2018-02-11 7672 3
让计算机程序自动生成新的程序看起来是一个非常「人工智能」的概念,事实上,它也是众多 AI 研究者们努力的方向。

来源:机器之心


程序合成有很大的市场。成功的程序在未来可以操控现在人的工作:计算机编程。想象一个可以不用人来调试,重构,转化及整合的世界。甚至可能会出现电脑程序本身不能直接解决问题,但可以提出编程问题并加以解决的世界。在数学和物理学科里,理论证明是需要人来根据已经存在的定理来产生新视角的例子。一个完整的程序合成系统可以跑一个程序来证明或推翻同样的预测,然后这个任务可以被看成非常创新。当计算机视觉瞄准自动化一个生物复杂精细的感知系统,系统合成就是一个瞄准解决问题,逻辑和自动化它自己的领域。


微软的 RobustFill


微软在论文中公布了一项最新的代码合成系统:RobustFill。它基于深度学习技术,可以根据用户指定的输入输出样例进行特征提取,然后自动合成能够实现相应功能的软件代码,大大缩减了程序员的编码工作量。举例来说,假设用户需要编码实现如下功能:将输入的人名信息进行规范化缩写后输出。具体如下图所示,当输入人名为 “jacob daniel devlin” 时,系统应该输出 “Declin,J” 。基于 RobustFill,用户只需要提供一些简单的输入输出样例(图中前三行黑色字体),系统就能自动合成实现这一功能的软件代码,并输出正确结果(图中后三行灰色字体)。如果用户需要处理的人名有成千上万个,这就能节约大量的处理时间。


此前的解决方案是微软 Excel 软件中的 FlashFill 系统。该系统凭借开发人员手动设置规则和启发式搜索(Heuristic Search)的方式,为用户输出特定功能的代码。但 FlashFill 系统严重弱化了 DSL 语言的扩展能力,并且需要开发者大量的人工输入,同时对人工输入的笔误也非常敏感,因此并不是最优的解决方案。与 FlashFill 不同,在深度学习技术的支持下,RobustFill 可以利用数据驱动的方式进行代码合成,而无需开发者手动设置规则。此外,RobustFill 还使用了此前用于自然语言翻译的一种名为“attentional sequence-to-sequence neural network”(注意力序列到序列神经网络)的技术,因此才能基于用户给定的输入输出样例,自动合成代码。

英特尔的 AI Programmer

这个系统被称为AI Programmer。AI Programmer利用机器学习中的遗传算法来模拟复杂的指令,并且该系统生成的程序的复杂程度已经与新手程序员编写的结果相当。从AI Programmer的软件架构图中可以看到,由人类驱动的部分非常少,只需要输入起始指令,最后接收适用于某项任务的函数即可,接下来的部分全都由AI Programmer来完成。虽然该AI系统已经能够编写简单的程序,但其能力相对于中高级程序员差距还是很大的,而且它的算法还存在一定的局限,AI Programmer并不适用于ML编程,而且使用的是面向人类的编程语言,研究人员表示,未来可能会针对该系统开发专门的机器编程语言。


谷歌大脑的优先级队列训练(PQT)

研究者认为程序合成任务是在程序的输出中存在一个奖励函数,目标是找到奖励最大的程序。采用了一种迭代优化方案,在这种方法中,在目前已生成的 K 个最佳程序数据集上训练一个 RNN 模型。随后合成新的程序,并通过 RNN 采样将它们添加到优先级队列中。使用一种简单但富于表达性的图灵完备语言 BF,对该算法(优先级队列训练,PQT)与遗传算法和强化学习基线进行了对比。实验结果证明简单的 PQT 算法显著优于基线。通过在奖励函数中添加程序长度罚分,可以生成简短、人类可读的程序。

这些非常强大的程序合成系统的应用使这一领域变得非常让人着迷,但是它可能会花费几十年的研究才能达到我们之前所展望的程度。相似的,深度学习已经得到了非常大的关注,而且已经被当成一种重要工具在每一种认知任务中被尝试使用。

内容来源:MATRIX下一代区块链

版权声明:本文仅为传播消息之用,不代表币源社区立场,文章不构成投资建议。如需转载,请务必注明文章原作者以及来源,部分图片来源于网络,我们尊重版权,如有疑问敬请联系,我们将核实并删除。

我要评论
字数上限500
评论(3)
  • huyang0412

    发表于9个月前

    看看,赞赞

  • lx22169

    发表于9个月前

    程序合成有很大的市场。成功的程序在未来可以操控现在人的工作:计

  • lx22169

    发表于9个月前

    程序合成有很大的市场。成功的程序在未来可以操控现在人的工作:计···