雷锋源中文网
最快捷的苹果资讯

微软RobustFill:无需编程语言,神经网络自动生成程序

选自Microsoft Research blog

作者:Rishabh Singh等

参与:李泽南

1

长久以来,摆脱编程语言的束缚,让计算机自我生成程序一直是开发者们的梦想,最近微软研究者推出的RobustFill让梦想更近了一步,他们的研究成果即将在 ICLR 2017 大会上出现。

在过去几十年中,计算机科学有了长足的发展,但人们编写计算机软件的过程却没有发生根本的改变——程序员必须使用特定的程序语言一步步手工编写程序的精确算法逻辑。尽管编程语言近年来正在变得越来越友好,但这项工作仍然是绝大多数计算机用户未曾接触的事物。

在最近的一项研究中,微软发布了自己的深度学习程序生成研究。在该研究中,深度神经网络学会了遵从用户的意图来生成计算机程序。用户只需要提供一些简单的输入/输出(I/O)范例以表示自己希望获得的程序是什么形式的。系统就可以使用这些信息生成相应的程序。

例如:假设用户有一个名单,他/她希望将这个名单整理成特定格式,如下图所示。这名用户仅需要向系统提供一些输入-输出的例子,随后系统就会自动填充剩下的输出(在图中以灰色显示)。在一些数据量很大的工作中,这种方法可以为用户节约大量时间。

1

该系统通过域特定语言(domain specific language,DSL)生成用于执行任务的程序,用户不需要理解 DSL 的所有细节。事实上,在使用过程中,用户完全不会看到编程的过程。在微软的 DSL 中,对应于上个例子的正确程序是:

Concat(

自动生成程序面临着两个重大挑战。第一、DSL 表达程序有数以亿计的可能性,而用户真正需要的程序可能完全未曾在系统中出现过;第二、因为 I/O 例子是由人类手动输入的,这意味着其中可能经常会出现噪音(例如错字)。如上例所示,第二个输出例子中的 Uesato 被错写为 Useato 了。

在此之前解决这些问题的方法——最为人所知的就是 Excel 中的快速填充(FlashFill)功能——是依靠程序员手动编写的规则和启发方式来引导和搜索用户所需的程序。这种方式显然不能满足 DSL——这意味着数年的手动规则编写,而且最终的结果仍然对 I/O 例子的噪音非常敏感。

微软提出的新系统 RobustFill 采用了最近发展迅猛的深度学习方式,通过数据驱动方法进行程序生成,不需要任何手工编写的规则。与快速填充相反,它使用曾被用于机器翻译的「attentional sequence-to-sequence 神经网络」来通过 I/O 范例生成所需的程序。下图展示了微软的神经网络架构:

1

这个系统经过了数百万随机生成的 I/O 程序配对的训练,学会了 DSL 中的语义学规则,目前已经可以在真实情况下的数据中展示良好的性能。总体而言,该系统在一个真实世界任务基准测试中达到了 92% 的准确率。其中最令人兴奋的是,在测试中,I/O 范例包含了一些明显的噪音,而系统仍然保持了高精度。

编程新启示

训练神经网络架构来学习一种带有丰富功能的程序语言(FlashFill DSL)不仅是神经语言生成的重大突破,也是走向通用人工智能的坚实一步。它解决了可解释性的关键挑战,也将我们引向了分布式链接形式的知识符号表示问题。

微软正致力于扩展这些 DSL 程序学习架构,试图加入状态变量和控制流程以生成更多种类的程序。研究人员相信他们正走在正确的道路上,未来的研究将指向有关程序生成和归纳的一系列基础技术问题。

未经允许不得转载:雷锋源中文网 » 微软RobustFill:无需编程语言,神经网络自动生成程序

点赞 (0)
分享到:更多 ()

评论 抢沙发