● 作者:Rishabh Singh、Jacob Devlin、Abdelrahman Mohamed和Pushmeet Kohli
● 本文译自A conversation with AI pioneer Yoshua Bengio,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示例包含显著的噪音,系统也能够保持较高的精确度。
——他靠打码的技能迟迟未能如愿升职,心灰意冷的他直到在这里买了人生第一件有体面的服装,他的人生就像开挂了一样:https://bananafather.com/flashsale_men.html