让神经网络替你编程:如何用深度学习实现程序自动合成

【新智元导读】本文介绍了训练神经网络学习用复杂的函数式语言(FlashFill DSL)进行编程取得的成功,标志着神经程序合成方面一个令人兴奋的突破。

● 作者:Rishabh Singh、Jacob Devlin、Abdelrahman Mohamed和Pushmeet Kohli

● 请点击文末的阅读原文或直接将网址复制至浏览器中打开即可查看原文。https://www.microsoft.com/en-us/research/blog/deep-learning-program-synthesis/

过去几十年间计算科学领域取得了长足进展,但编写计算机软件的实操过程却没有根本性转变——程序员必须使用专门的编程语言,以手工方式一步一步地精确编写程序中各项算法逻辑。尽管多年来编程语言变得越来越友好,但是学习如何编程仍然令大多数计算机用户望而却步。

在一篇新近发表的论文中,我们展示了将深度学习用于程序合成的最新研究成果,试图让深层神经网络学习根据用户意图生成计算机程序。用户只需提供几个输入/输出(I/O)示例来指定所期望的程序行为,系统则据此生成相应的程序。

假设用户希望以特定方式对名单进行格式整理(如下所示)。他只需提供几个输入/输出示例,系统就会自动填充剩余的输出(以浅灰色显示)。如果用户需要处理成百上千个输入字符串,这个程序可以节省大量时间。

该系统采用领域专用语言(DSL)来生成程序。用户无需了解DSL的细节——实际上他根本看不到程序的内容。在我们的DSL中,对应于上述示例的正确程序是:

程序合成中存在两大关键性难点。首先,在我们的表达性DSL中存在数以万计种可能的程序,而其中的正确程序可能是系统从未见过的。其次,由于I/O示例是由真人手工生成的,所以它们通常包含噪声(例如拼写错误等),如上例所示(在第二个输出示例中,Useato被拼错为Uesato)。

以前,解决这个问题的方法(其中最著名的要数微软Excel的FlashFill系统)是依靠手工编写的规则来引导启发式搜索。然而,这种方法使得DSL的能力很难扩展,不仅需要数年积累的手动规则编写,而且对I/O示例中的任何噪声都非常敏感。

而我们的系统RobustFill则利用了深度学习的最新成果,以数据驱动的方式进行程序合成,无需任何手工编写的规则。相反,它借助最先用于语言翻译的注意力型序列到序列神经网络 (attentionalsequence-to-sequence neural network),以I/O示例为依据生成程序。我们所用神经网络的草图如下,图中提供了详细信息。

我们用了数百万个随机生成的I/O+程序对来对系统加以训练,而且由于能够学习DSL语义,它在现实世界的数据上也有着良好表现。总体而言,我们的系统在一系列真实基准上实现了92%的准确性。特别令人鼓舞的是,即使I/O示例包含显著的噪音,系统也能够保持较高的精确度。

对编程的启示

训练神经网络学习用复杂的函数式语言(FlashFill DSL)进行编程取得成功,这一突破也是朝着实现更为通用的人工智能迈出了虽小却值得关注的一步。它解决这不仅标志着神经程序合成方面一个令人兴奋了纳入可解释性这一关键挑战,而且还触及到将知识的分布式表达与符号式表达相关联的重要课题。

我们目前正在扩展这些神经网络,学习用包含状态变量和控制流的DSL所编写的程序,以期生成更丰富的程序类别。我们认为,沿着这个方向进一步研究,将要求我们去进一步了解和处理程序合成及归纳方面所涉及的最基础的技术问题。

了解更多相关信息:

“RobustFill: Neural Program Learning under Noisy I/O” by Jacob Devlin, Jonathan Uesato, Surya Bhupatiraju, Rishabh Singh, Abdelrahman Mohamed, and Pushmeet Kohli, in arXiv:1703.07469

“Neuro-Symbolic Program Synthesis” by Emilio Parisotto, Abdelrahman Mohamed, Rishabh Singh, Lihong Li, Denny Zhou, and Pushmeet Kohli, in 5th International Conference on Learning Representations (ICLR 2017)

为本文做出贡献的实习生有:Emilio Parisotto(卡内基梅隆大学)、Jonathan Uesato(麻省理工学院)、Surya Bhuptairaju(麻省理工学院)

本文分享自微信公众号 - 新智元(AI_era)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人人都是极客

基于树莓派和Tensowflow的物体识别-brain

近来这篇文章很火:How to build a robot that “sees” with $100 and TensorFlow (作者是Lukas,Cro...

1.1K100
来自专栏技术翻译

10个用于人工智能的开源工具/框架

TensorFlow™是一个开源软件库,最初由研究Google Brain Team的研究人员和工程师开发。TensorFlow用于使用数据流图进行数值计算。图...

2.1K20
来自专栏机器之心

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

选自Microsoft Research blog 作者:Rishabh Singh等 参与:李泽南 长久以来,摆脱编程语言的束缚,让计算机自我生成程序一直是开...

37150
来自专栏互联网数据官iCDO

数据分析图的十大错误,你占了几个?

本文转载自大数据 "数据可视化"是个好帮手,可以帮助用户理解数据。但是,你真的会用它吗?看看这里,数据可视化的十大错误你占了几个? 优秀的数据可视化依赖优异的设...

38180
来自专栏量子位

4小时学会雅达利游戏,AI需要几台电脑?

昨天,优步AI Lab开源了深度神经进化的加速代码。其博客上称,哪怕用户只有一台电脑(台式机),用这个代码也能训练出会打雅达利的AI。而且只需要4!小!时!

13320
来自专栏CSDN技术头条

25个Java机器学习工具&库

本列表总结了25个Java机器学习工具&库: 1. Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。W...

28080
来自专栏华章科技

数据分析图的十大错误,你占了几个?

优秀的数据可视化依赖优异的设计,并非仅仅选择正确的图表模板那么简单。全在于以一种更加有助于理解和引导的方式去表达信息,尽可能减轻用户获取信息的成本。当然并非所有...

10110
来自专栏机器人网

一个简单的多机器人编队算法实现--PID

用PID进行领航跟随法机器人编队控制 课题2:多机器人编队控制 研究对象:两轮差动的移动机器人或车式移动机器人 研究内容:平坦地形,编队的保持和避障,以及避障和...

55270
来自专栏AI科技评论

动态 | ACL 2018 公布四篇最佳 demo 候选论文,三篇论文第一作者来自中国

雷锋网 AI 科技评论按:7 月 9 日,自然语言处理顶会 ACL 公布了最佳 demo 论文的四篇候选论文,名单如下:

15940
来自专栏AI研习社

AI 开发者看过来,主流移动端深度学习框架大盘点

AI 研习社按:移动设备相较于 PC ,携带便携,普及率高。近年来,随着移动设备的广泛普及与应用,在移动设备上使用深度学习技术的需求开始涌现。

46430

扫码关注云+社区

领取腾讯云代金券