摘要:从经验上讲,试图使用数据来学习编程的神经网络显示出了较差的通用性。此外,当输入的复杂度超过了阈值,我们就很难去推测这些模型的表现。为了解决这个问题,我们提议增加一个带有关键抽象方法的增强神经架构——递归(recursion)。作为一个应用,atv,我们在神经编程器-解释器框架(Neural Programmer-Interpreter framework)中的两个任务——添加和排序——上实现了递归,实现了在更少量的训练数据下展示出了优越的泛化性和可解释性。通过将问题划分为一个个更小的部分,并且极大地减少每个神经网络组件域,这种方法也让我们可以很容易去证明担保整个系统的行为。根据我们的经验表明,为了让神经架构更稳健地学习程序语义(program semantics),有必要引进一个递归这样的方法。 7. 神经组合优化(Neural Combinatorial Optimization) 摘要:本文提出一个使用神经网络和强化学习来解决组合优化问题的框架。我们专注于旅行商问题(TSP/traveling salesman problem),并且训练了一个循环网络来通过给定一组城市坐标预测不同城市排列的分布。我们使用 负旅程长度(negative tour length)作为奖励信号,使用策略梯度方法优化循环网络的参数。我们在一组训练图和单个测试图上分别让网络参数进行了学习,然后对它们进行了比较。最优的结果是先在训练集上优化网络然后在单个测试图上进行细化。我们的主要的成果是,在具有高达 100 个节点的 2D 欧几里德图上,没有任何监督的情况下,我们的方法会优于 Christofides(1976)算法,并且可以和任何一个最好的开源 TSP 解算器媲美。 8. 神经函数式编程(NEURAL FUNCTIONAL PROGRAMMING) 摘要:我们讨论了在构建一种适合在输入-输出示例中学习程序的端到端可微型编程语言时出现的一系列建模选择。为了从编程语言研究中提取一些隐含的信息,我们研究了内存分配方案、不可变数据、类型系统和内置的控制流结构对学习算法的成功率的影响。我们构建了一系列的模型来生成一个简单的可微函数编程语言。我们的实证评估表明,和现有基线相比,这种语言允许学习更多的程序。 9. 神经程序格(NEURAL PROGRAM LATTICES) 摘要:我们提出神经程序格(NPL),它是一个神经网络,用来学习一个主要基于平面序列基本操作的分层程序结构。与只能使用强监督的现有的方法(例如程序的完整执行轨迹)相比,NPL 学习的监督性弱了很多,并且在仅仅几个完全执行轨迹的帮助下就执行相当好。我们展示了我们的模型学习任务的能力,就如同 ADDITION 和在网格世界中移动块。我们表明,通过训练大多的非结构化操作序列,NPL 能够提取序列的潜在结构,并能学习去表示程序的抽象化。值得注意的是,NPL 可以在比现有方法弱得多的监督下实现更先进的性能。 10. 神经-符号程序合成(Neuro-Symbolic Program Synthesis) 摘要:近年来,很多人建议使用神经结构来解决程序归纳(Program Induction)问题。这些神经结构可以通过一些给定的输入- 输出样本进行学习,然后在输入输出之间建立一种映射关系,最后可以推广到一些新的输入。虽然这种方法的结果让人印象深刻,但是它们也有很多比较重要的限制:(a)它们难以训练并且会花费很昂贵的计算资源,(b)必须为每个任务(程序)单独地训练模型,(c)难以解释或验证所学习的映射的正确性(因为它是由神经网络定义的)。在本文中,我们提出了一种新技术:神经-符号程序合成(Neuro-Symbolic Program Synthesis),可以克服上述问题。经过训练,我们的方法可以使用特定领域的语言自动的构建计算机程序,这种语言与测试时所提供的一组输入输出所用的示例语言一致。我们的方法是基于两个新的神经模块。第一个模块称为互相关 I/O 网络(the cross correlation I/O network),它可以通过一组给定的输入输出示例,生成 I / O 示例集合的连续表示。第二个模块,被称为递归-反递归神经网络(R3NN:Recursive-Reverse-Recursive Neural Network),它接收第一个模块生成的样本的连续表示,通过递增地扩展部分程序来合成程序。我们通过将其应用于一种丰富、复杂并且基于正则表达式的字符串变换域来证实我们的方法的有效性。实验表明,R3NN 模型不仅能够从新的输入-输出样本构建程序,而且还能够为在训练期间从未观察到的任务构建新的程序。 11. 使用一个可微分的 FORTH 解释器编程(PROGRAMMING WITH A DIFFERENTIABLE FORTH INTERPRETER) (责任编辑:本港台直播) |