

英语原文共 18 页,剩余内容已隐藏,支付完成后下载完整资料
神经程序员:应用梯度下降来推导出潜在的程序
Arvind Neelakantan* Quoc V.Le IlyaSutskever
University of Massachusetts Amherst Google Brain Google Brain
arvind@cs.umass.edu qvl@google.com ilyasu@google.com
摘要
深度神经网络在许多任务中取得了令人吃惊的监督分类性能,包括图像识别、语音识别和序列学习。但是,所取得的成功还没有转换成类似于问答的应用,该类应用可能涉及复杂的算术和逻辑推理。这些模型的其中一个主要限制是它们甚至无法学习简单的算术和逻辑运算。例如,事实表明,神经网络无法学会如何可靠地添加两个二进制数。在这项工作中,我们提出了神经程序员,添加了一小组基本的算术和逻辑操作,这样可以使用反向传播来端对端地训练。神经程序员可以通过几个步骤来调用这些增加的操作,因此可以推导出复合的程序,要比内置的操作更加复杂。模型会从虚弱的监管信号中学习,该信号是正确程序执行的结果,因此它不需要对正确程序自身的大量注解。调用什么操作,对哪些数据应用,这完全由神经程序员决定。在训练期间,这样的决定是通过可区分的方式来实现,因此整个神经网络可以通过梯度下降来联合训练。我们发现训练模型是有难度的,但是可以往梯度上添加随机杂音来改善效果。对于一个相当复杂的人工制作的总格表格数据集,传统的复发网络和注意模型表现的不尽人意,而神经程序员一般会取得近乎完美的效果。
1 引言
过去的几年里,深度神经网络(DNNs)在各种监督分类任务已经取得了巨大的成功,从开始的图像识别(Krizhevsky et al., 2012)和语音识别(Hinton et al., 2012),DNNs对于这些任务是采用固定长度的输入和输出。最近,神经网络的成功已经转换成了涉及到不固定长度序列的应用,例如机器翻译(Sutskever et al., 2014; Bahdanau et al., 2014;Luong et al., 2014)、图像字幕(Vinyals et al., 2015; Xu et al., 2015)、对话模型(Shang et al., 2015; Vinyals amp; Le, 2015)、端对端问答(Sukhbaatar et al., 2015; Peng et al.,2015; Hermann et al., 2015)和端对端语音识别(Graves amp; Jaitly, 2014; Hannunet al., 2014; Chan et al., 2015; Bahdanau et al., 2015)。
虽然这些结果强烈表明DNN模型能够学习数据中模糊的底层模式,但是它们在涉及到推理的应用中没有类似的效果。这些模型的一个主要限制是它们甚至无法学习简单的算术和逻辑操作。例如Joulin amp; Mikolov(2015)表明复发神经网络(RNN)无法对两个二进制数进行相加,即便结果小于10位。这使得现有的DNN模型不适合需要复杂推理的应用,例如自然语言问答。比如,为了回答”德克萨斯州边境有多少个州”(参考Zettlemoyer amp; Collins(2005)),算法必须要执行对表中数据的求和,而这是神经网络不擅长的工作。
解决这些问题的相当常见方法是程序推导,目标是发现能够解决任务的程序(使用SQL或一些高级语言)。这些模型的应用在于语义解析,任务是建立一个结构化数据库(Zelle amp; Mooney,1996)的自然语言结构。这个问题经常被规划位将自然语言问题映射成可执行的查询。
语义解析的现有方法存在的缺点是它们难以训练和需要大量的人力监督。由于程序的空间是不平滑的,所以它很难应用简单的梯度下降;最常见的是,梯度下降通过复杂搜索来增加程序,如抽样(Liang et al.,2010)。为了进一步简化训练,算法设计者必须以注释的形式手动地向模型添加更多监督信号每个问题的完整程序(Zettlemoyer&Collins,2005)或领域特定的语法(Liang et al.,2011)。例如,设计包含用于将词汇项关联的规则的语法正确的操作,例如,单词“largest”引射到操作“argmax”,或在语法上产生有效程序,例如,禁止程序gt; =狗。手工制作的语法的作用是至关重要的语义解析还将其一般适用性限制到许多不同的域。在最近的工作by Wang et al.(2015)为7个域构建语义解析器,作者手工设计了一个单独的语法。
这项工作的目标是开发一个不需要大量人力监督的模型,并且广泛适用于不同的领域,数据源和自然语言。我们建议神经程序员(图1),即一个增加了一小组基本算术以及可以使用反向传播来端对端训练的逻辑操作的神经网络。在我们的方案中,神经网络可以使用循环神经网络运行几个步骤。在每个步骤,它可以选择一个数据源中的片段以及要应用于该数据的特定操作。神经网络在每一步传播这些输出以形成最终的,更复杂的输出。使用目标输出,我们可以调整网络选择正确的数据段和操作,从而推导出正确的程序。我们的方法的关键是以可区分的方式(例如软选择或注意)来完成选择过程(对于数据源和操作)来进行,使得整体神经网络可以通过梯度下降联合训练。在测试时,我们使用硬选择取代软选择。
图1是神经程序员的架构,一个增加了算术和逻辑运算的神经网络。 控制器选择操作和数据段。内存存储应用于数据段的操作的输出和由控制器执行的先前动作。控制器运行几个步骤,从而推导出比内置操作更复杂的合成程序。虚线表示控制器使用内存中的数据来在下一个时间步做出决定。
通过组合神经网络与数学运算,我们可以利用深度网络的模糊模式匹配能力和传统可编程电脑的清晰算法能力。 这种使用增强逻辑和算术分量的方法让人联想到在常规计算机中使用ALU(算术和逻辑单元)的想法(Von Neumann,1945)。 它与在脑的intraparietal沟(IPS)区域中显示的符号数值处理能力松散相关(Piazzaet al.,2004; Cantlon et al.,2006; Kucian et al.,2006; Fiaset al.,2007; Dastjerdi et al.,2013)。 我们的工作也受到软注意的成功的启发机制(Bahdanau et al.,2014)及其在学习神经网络中的应用额外的内存组件(Graves et al.,2014; Sukhbaatar et al.,2015)。
神经程序员有两个有吸引力的特性。 首先,它从弱监督信号中学习该信号是执行正确程序的结果。 它不需要大量对来自训练实例的正确程序的注释。人的监督努力的形式问题,数据源和答案三元组。 第二,神经程序员不需要额外的规则引导节目搜索,使其成为一个通用框架。 与神经程序员,算法设计者只定义了需要比人力更少的基本操作的列表在先前的程序感应技术。
我们使用一个人工制作的综合表格数据集来进行实验,包括各种难度级别的问题。 自然语言转换查询的示例包括“打印H列中的元素,这些元素在C列的字段大于50且E列的字段小于20“或”A列元素的和与表中行数的差别是什么?“是列A中的元素的和与表中的行数之差“。 我们发现LSTM周期网络(Hochreiter&Schmidhuber,1997)和LSTM模型的关注(Bahdanau et al.,2014)不能很好地工作。 然而,Neural Programmer可以完全解决这个问题任务或通过诱导所需的潜在程序在大多数情况下实现大于99%的准确性。我们发现,训练模型是困难的,但它可以通过注入随机大大提高高斯噪声对梯度的影响(Welling&Teh,2011; Neelakantan et al。,2016)神经程序员的泛化能力
- 神经程序员
即使我们的模型是相当一般的,在本文中,我们应用神经程序员来进行问答表的任务,这是神经网络以前没有尝试过的任务。在我们的这个任务的实现中,Neural Programmer运行总共T个时间步长选择以预先推导多达T操作的合成程序。 该模型包含四个模块:
bull;一个问题Recurrent Neural Network(RNN)来处理输入问题,
bull;一个选择器,用于在每个步骤分配两个概率分布,一个在操作集合上
而另一个在数据段上,
bull;一系列模型可以采用的操作
bull;一个历史RNN,用于记忆由模型选择的之前的操作和数据段
直到当前时间来到
这四个模块也显示在图2中。历史RNN与选择器模块结合作为这里的控制器。每个组件的信息将在下一节中讨论。
图2是用于完成问答任务的神经程序员的实现。在时间步骤t处的模型的输出通过对数据段应用操作来获得,其中数据是通过其概率加权。 模型的最终输出是在时间步骤T的输出。 虚线线表示在步骤t 1对历史RNN的输入。
除了操作列表,所有其他模块都是使用梯度下降学习的训练集由三元组组成,其中每个三元组有一个问题,一个数据源和一个答案。 我们假设数据源是以表的形式,表2 RMtimes;C,包含M行和C列(M和C可以在示例中变化)。 我们的实验中的数据段是列,其中每个列也有一个列名。
2.1问题模块
问题模块将问题令牌转换为分布式表示。 在基本版本的模型中,我们使用一个简单的RNN(Werbos,1990)参数化W问题和最后隐藏状态被用作问题表示(图3)。
图3是处理输入问题的问题模块。 q = zq表示神经程序员使用的问题表示。
考虑包含Q个字的输入问题{w1,w2,..., wg},问题模块执行
以下计算:
其中V(wi)2 Rd表示词wi的嵌入表示,[a; b] 2连接两个向量a; b 2 Rd,W问题2 Rdtimes;2d是的循环矩阵问题RNN,tanh是元素方面的非线性函数,zQ 2 Rd是表示的问题。 我们将z0设置为[0] d。 我们通过从中移除数字来预处理问题将数字存储在单独的列表中。 与数字一起,我们存储出现的词左边它在有用于计算比较操作的枢轴值的问题中如第2.3节所述。
对于涉及较长问题的任务,我们使用双向RNN,因为我们发现一个简单的单向RNN有困难记住问题的开始。 当双向RNN,则问题表示通过连接的最后隐藏状态来获得双向RNN的两端。问题表示由q表示
2.2选择器
选择器在每个时间步长t(t = 1; 2;:::; T)产生两个概率分布:一在该组操作上的概率分布和在该组上的另一概率分布的列。 到选择器的输入是来自问题的问题表示(q 2 Rd)模块和历史RNN的输出(在2.4节中描述)在时间步骤t(ht 2 Rd)存储关于由模型选择的操作和列的信息,直到上一步为止
每个操作使用d维向量来表示。 让操作数为O和令U 2 ROtimes;D是存储操作的表示的矩阵
操作选择由下面执行:
其中W op 2 Rdtimes;2d是产生概率的操作选择器的参数矩阵分布alpha;opt 2 [0; 1] O超过该组操作(图4)。
选择器还在每个时间步长产生列上的概率分布。 我们获得使用问题模块中的参数的列名称的向量表示2.1)通过词嵌入或RNN短语嵌入。 令P 2 RCtimes;D为存储的矩阵列名称的表示。
数据选择是由以下执行:
图4:在时间步骤t的操作选择,其中选择器分配概率分布
该组操作。
其中W col 2 Rdtimes;2d是产生概率的列选择器的参数矩阵分布alpha;col
t 2 [0; 1] C(图5)。
图5:在时间步骤t的数据选择,其中选择器在其上分配概率分布
组列。
2.3操作
神经程序员目前支持两种类型的输出:a)标量输出,和b)项目列表从表中选择(即,表查找).1第一类型的输出是针对类型“总和”的问题列C中的元素“,而第二类型的输出是用于类型”打印元素“的问题“为了方便这一点,模型在每个步骤t保持两种输出变量,标量应答器2 R和查找应答器2 [0; 1] Mtimes;C。输出查找应答器(i; j)存储表中的元素(i; j)是输出的一部分的概率。模型的最终输出是标量answerT或查找answerT,取决于哪一个的两个更新后T个时间步。除了两个输出变量,模型维护一个附加变量行selectt 2 [0; 1] M。变量row selectt [i](8i = 1; 2; :::; M)保持选择行i的概率,并允许模型以动态地选择列内的行的子集。输出初始化为零行选择变量初始化为[1] M。
神经程序员的关键是内置操作,可以访问的输出模型在当前时间步长t之前的每个时间步长,即操作可以访问(标量回答i;查找答案i); 8i = 1; 2; :::; t - 1.这使得模型构建强大组成程序。重要的是设计操作,使得它们可以与概率行和列一起工作选择使得模型是可区分的。 表1显示了模型中内置的操作列表以及它们的定义。 复位操作可以选择任意次数,当时需要允许模型诱导复杂度小于T步的程序。
重要的是设计操作,使得它们可以与概率
全文共20506字,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[145598],资料为PDF文档或Word文档,PDF文档可免费转换为Word
