时间:2017-04-24 来源:互联网 浏览量:
最近,微软发布了自己的深度学习程序生成研究。在该研究中,深度神经网络学会了遵从用户的意图来生成计算机程序。用户只需要提供一些简单的输入/输出(I/O)范例以表示自己希望获得的程序是什么形式的。系统就可以使用这些信息生成相应的程序。
例如:假设用户有一个名单,他/她希望将这个名单整理成特定格式,如下图所示。这名用户仅需要向系统提供一些输入-输出的例子,随后系统就会自动填充剩下的输出(在图中以灰色显示)。在一些数据量很大的工作中,这种方法可以为用户节约大量时间。
自动生成程序面临着两个重大挑战。第一、DSL 表达程序有数以亿计的可能性,而用户真正需要的程序可能完全未曾在系统中出现过;第二、因为 I/O 例子是由人类手动输入的,这意味着其中可能经常会出现噪音(例如错字)。如上例所示,第二个输出例子中的 Uesato 被错写为 Useato 了。
在此之前解决这些问题的方法——最为人所知的就是 Excel 中的快速填充(FlashFill)功能——是依靠程序员手动编写的规则和启发方式来引导和搜索用户所需的程序。
微软提出的新系统 RobustFill 采用了最近发展迅猛的深度学习方式,通过数据驱动方法进行程序生成,不需要任何手工编写的规则。与快速填充相反,它使用曾被用于机器翻译的「attentional sequence-to-sequence 神经网络」来通过 I/O 范例生成所需的程序。
这个系统经过了数百万随机生成的 I/O 程序配对的训练,学会了 DSL 中的语义学规则,目前已经可以在真实情况下的数据中展示良好的性能。总体而言,该系统在一个真实世界任务基准测试中达到了 92% 的准确率。其中最令人兴奋的是,在测试中,I/O 范例包含了一些明显的噪音,而系统仍然保持了高精度。
训练神经网络架构来学习一种带有丰富功能的程序语言(FlashFill DSL)不仅是神经语言生成的重大突破,也是走向通用人工智能的坚实一步。它解决了可解释性的关键挑战,也将我们引向了分布式链接形式的知识符号表示问题。
微软正致力于扩展这些 DSL 程序学习架构,试图加入状态变量和控制流程以生成更多种类的程序。研究人员相信他们正走在正确的道路上,未来的研究将指向有关程序生成和归纳的一系列基础技术问题。
可见在不远的未来,机器人可不仅仅是在围棋上战胜人类这么简单了。可能人类各项工作都会被机器人取代,甚至包括程序员的工作。不知道应该是期待,还是畏惧呢?