(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

计划完成深度学习入门的126篇论文第十七篇,Oxford和DeepMind合作研究一种学习梯度下降的内在的方式。


ABSTRACT&INTRODUCTION

摘要

在机器学习中,从手工设计的特征到学习特征的转变取得了巨大的成功。尽管如此,优化算法仍然是手工设计的。在本文中,我们展示了如何将优化算法的设计转换为一个学习问题,使算法能够自动地在感兴趣的问题中利用结构。我们所学习的算法,由LSTMs实现,在他们所训练的任务上胜过一般的手工设计的竞争对手,并且可以很好地推广到具有相似结构的新任务。我们在许多任务上演示了这一点,包括简单的凸问题、训练神经网络和神经风格图像。

介绍

机器学习任务可以表示为优化问题的目标函数(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION,定义在(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION。在这种情况下,目标是找到得到最小化(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION。虽然任何能够最小化这个目标函数的方法都可以应用,但是可微函数的标准方法是某种形式的梯度下降,从而导致一系列更新

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

然而,普通梯度下降算法只利用梯度而忽略二阶信息,影响了梯度下降算法的性能。经典的优化技术通过使用曲率信息重新标定梯度步长来纠正这种行为,通常是通过二阶偏导数的海森矩阵来实现的,尽管其他的选择如广义高斯-牛顿矩阵或费雪信息矩阵也是可能的。

优化方面的许多现代工作都是基于设计针对特定问题类别的更新规则,不同的研究社区对问题的类型有不同的兴趣。例如,在深度学习社区中,我们看到了针对高维非凸优化问题的优化方法的激增。这些包括momentum [Nesterov, 1983, Tseng, 1998], Rprop [Riedmiller and Braun, 1993], Adagrad [Duchi et al., 2011], RMSprop [Tieleman and Hinton, 2012], and ADAM [Kingma and Ba, 2015]。当优化问题的结构已知较多时,也可以采用更集中的方法[Martens and Grosse, 2015]。相反,关注稀疏性的社区倾向于采用非常不同的方法[Donoho, 2006, Bach et al., 2012]。这对于组合优化来说更是如此[Nemhauser和Wolsey, 1988]。

优化器设计工业允许不同的社区创建优化方法,这些方法利用他们感兴趣的问题中的结构,而代价是该范围之外的问题的性能可能很差。此外,No Free Lunch Theorems for Optimization[Wolpert and Macready, 1997]表明,在组合优化的设置中,没有任何算法能够比期望中的随机策略做得更好。这表明,对问题子类的专门化实际上是提高性能的唯一方法。

在这个工作我们有不同看法,反而提出取代hand-designed更新规则与学习更新规则,我们称之为优化器g,规定自己的一组参数(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION。这将更新优化函数f

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

图1显示了该流程的高层视图。接下来,我们将使用一个递归神经网络(RNN)显式地对更新规则g建模,RNN维护自己的状态,并根据迭代函数动态更新规则g。

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

1.1 Transfer learning and generalization

本工作的目标是开发一个程序来构造一个学习算法,该算法在一类特定的优化问题上表现良好。作为一个学习问题的转换算法设计允许我们通过示例问题实例指定我们感兴趣的问题类别。这与通常用分析的方法来描述有趣问题的性质,并使用这些分析见解来手工设计学习算法形成了对比。

在这个框架中考虑泛化的意义是有益的。在普通的统计学习中,我们有一个特殊的函数,它的行为是通过一组示例函数评估数据来约束的。在选择模型时,我们指定了一组关于我们认为兴趣函数在未观察到的点上应该如何表现的归纳偏差,而泛化对应于预测目标函数在新点上的行为的能力。在我们的设置中,示例本身就是问题实例,这意味着泛化对应于在不同问题之间传递知识的能力。这种对问题结构的重用通常被称为转移学习,并且通常被当作一门独立的学科来对待。然而,从元学习的角度来看,我们可以将迁移学习问题转化为泛化问题,这在机器学习社区中得到了更好的研究。

深度学习最成功的例子之一是,我们可以依靠深度网络的能力,通过学习有趣的子结构,归纳出新的例子。在这项工作中,我们的目标是利用这种泛化能力,但也把它从简单的监督学习提高到更一般的优化设置。

1.2 A brief history and related work

利用学习来学习或元学习来获取知识或归纳偏见的想法有着悠久的历史[Thrun and Pratt, 1998]。最近,Lake等人[2016]有力地论证了其作为人工智能构建模块的重要性。类似地,Santoro等人[2016]将多任务学习框架为泛化,但与我们的方法不同,他们直接训练的是基础学习者,而不是训练算法。一般来说,这些想法涉及到两种不同时间尺度的学习:任务内的快速学习和许多不同任务间的渐进元学习。

也许最普遍的元学习方法是Schmidhuber[1992, 1993]基于[Schmidhuber, 1987]的工作,它认为网络能够修改自己的权重。该系统具有端到端的可微性,允许网络和学习算法通过梯度下降联合训练,且限制较少。然而,这种普遍性是以使学习规则很难训练为代价的。或者,Schmidhuber等人[1997]成功修改搜索策略算法,而不是梯度下降;Daniel等人[2016]最近也采用了类似的方法,使用强化学习训练控制器来选择步长。

Bengio等[1990,1995]提出通过使用简单的参数规则学习避免反向传播的更新。根据本文的研究重点,Bengio等人的工作可以被描述为通过梯度下降来学习没有梯度下降的学习。Runarsson和Jonsson[2000]以这项工作为基础,用神经网络代替了简单的规则。

Cotter和Conwell[1990],以及后来的Younger等[1999]也表明,固定权值的递归神经网络不需要修改网络权值就可以表现出动态行为。类似地,这也显示在过滤上下文中[例如。Feldkamp and Puskorius, 1998],这与简单的多时间尺度优化器直接相关[Sutton, 1992, Schraudolph, 1999]。

最后,Younger等人[2001]和Hochreiter等人[2001]的工作将这些不同的研究思路连接起来,方法是允许从一个网络反向传播输出到另一个学习网络,并将这两个网络联合训练。我们的元学习方法建立在这项工作的基础上,它修改了优化器的网络架构,以便将这种方法扩展到更大的神经网络优化问题。

 

2 Learning to learn with recurrent neural networks

在这项工作中,我们考虑直接参数化优化器。结果,在一个轻微的滥用符号我们将编写最终optimizee参数(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION作为优化器的函数参数(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION和函数的问题。然后我们可以问这样一个问题:优化器好意味着什么?给定函数f的分布,我们将期望损失写成

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

正如前面提到的,我们将更新步骤(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION,作为递归神经网络的输出m,参数化(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION,我们将明确表示与(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION的状态。其次,虽然(2)中的目标函数只依赖于最终的参数值,但是对于训练优化器,对于某个水平T,有一个依赖于优化的整个轨迹的目标是很方便的

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION是任意的权重与每个时间步相关联,我们还将使用符号(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION。当(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION时,这个公式等价于(2),但是稍后我们将描述为什么使用不同的权值可以证明是有用的。

我们可以减少(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION的值在(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION上使用梯度下降法。梯度估计(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION可以通过抽样随机函数f计算和应用反向传播计算图如图2所示。我们允许梯度沿着图中的实边流动,但是沿着虚线的梯度将被删除。忽略沿虚线的梯度相当于假设优化器的梯度不依赖于优化器参数,即(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION。这个假设允许我们避免计算f的二阶导数f。

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

考察(3)中的目标,我们发现只有(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION时,梯度才是非零的。如果我们使用(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION来匹配原始问题,那么轨迹前缀的梯度为零,只有最后的优化步骤为训练优化器提供了信息。这使得时间反向传播(BPTT)效率低下。我们通过放松目标使wt >在轨迹上的中间点为(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION来解决这个问题。这改变了目标函数,但允许我们在部分轨迹上训练优化器。为了简单起见,在所有的实验中,我们对每t使用(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

 

2.1 Coordinatewise LSTM optimizer

在我们的设置中应用RNNs的一个挑战是,我们希望能够优化至少数万个参数。在这种规模下,使用完全连通的RNN进行优化是不可行的,因为它需要一个巨大的隐藏状态和大量的参数。为了避免这种困难,我们将使用优化器m,它对目标函数的参数进行协调操作,类似于其他常见的更新规则,如RMSprop和ADAM。这种协调的网络体系结构允许我们使用一个非常小的网络来定义优化器,并在优化器的不同参数之间共享优化器参数。

通过对每个目标函数参数使用单独的**来实现每个坐标上的不同行为。除了允许我们为这个优化器使用一个小型网络之外,这个设置还有一个很好的效果,那就是使优化器不受网络中参数顺序的影响,因为在每个坐标上独立使用相同的更新规则。

我们使用两层长短期内存(LSTM)网络(Hochreiter and Schmidhuber, 1997)实现每个坐标的更新规则,使用现在标准的forget gate体系结构。网络将单个坐标的优化梯度和之前的隐藏状态作为输入,输出相应优化参数的更新。我们将把这个体系结构称为LSTM优化器,如图3所示。

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

递归式的使用使LSTM能够学习动态更新规则,这些规则集成了来自梯度历史的信息,类似于动量。众所周知,这在凸优化中有许多可取的特性(参见Nesterov, 1983),事实上,许多最近的学习过程(如ADAM)在更新时使用动量。

 

Preprocessing and postprocessing

优化器的输入和输出可以有非常不同的大小,这取决于被优化的函数的类别,但是神经网络通常只对既不是非常小也不是非常大的输入和输出有效。在实践中,使用合适的常量(跨所有时间步骤和函数f共享)对LSTM优化器的输入和输出进行重新标度,就足以避免这个问题。在附录A中,我们提出了对优化器输入进行预处理的另一种方法,这种方法更健壮,性能稍微好一些。

 

3 Experiments

在所有的实验中,经过训练的优化器都使用了两层LSTMs,每层有20个隐藏单元。每个优化器都是通过使用截短的BPTT最小化方程3来训练的,如第2节所述。使用ADAM执行最小化,学习速率由随机搜索选择。

我们在训练优化器时使用早期停止,以避免优化器过拟合。在每个epoch(一些固定数量的学习步骤)之后,我们冻结优化器参数并评估其性能。我们选择最好的优化器(根据最终的验证损失),并报告它在许多新采样的测试问题上的平均性能。

我们将经过训练的优化器与用于深度学习的标准优化器(SGD、RMSprop、ADAM和Nesterov's accelerated gradient, NAG)进行了比较。对于每个优化器和每个问题,我们都调优了学习率,并以给出每个问题最佳最终错误的速度报告结果。当优化器的参数不止一个学习率(例如ADAM的衰减系数)时,我们使用Torch7中的optim包中的默认值。所有优化参数的初始值均从IID高斯分布中采样。

3.1 Quadratic functions

在这个实验中,我们考虑训练一个优化器对一个简单类的合成10维二次函数。我们特别考虑最小化表单的函数

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

 对于不同的10x10矩阵W和10维向量y,其元素来自IID高斯分布。通过对该族随机函数进行优化训练,并对同一分布的新采样函数进行测试。每个函数优化100步,经过训练的优化器展开20步。我们没有使用任何预处理,也没有使用任何后处理。

不同优化器的学习曲线,在许多函数上取平均值,如图4的左图所示。每条曲线对应一个优化算法对多个测试函数的平均性能;实曲线显示了学习的优化器性能,虚线曲线显示了标准基线优化器的性能。很明显,在这个设置中,所学习的优化器的性能大大优于基线。

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

3.2 Training a small neural network on MNIST

在本实验中,我们测试了可训练的优化器是否能够学习在MNIST上优化一个小的神经网络,并探索了训练后的优化器如何推广到它们所训练的函数之外。为此,我们训练优化器优化基本网络,并在测试时研究对网络体系结构和培训过程的一系列修改。

在此设置目标函数(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION是一个小的交叉熵延时参数θ。f的值以及梯度(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION估计使用随机minibatches=128。基本网络是一个MLP,它使用一个sigmoid**函数,隐层为20个单元。唯一的可变性来源不同运行初始值(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION minibatch选择和随机性。每次优化运行100步,并将训练好的优化器展开20步。我们使用附录A中描述的输入预处理,并将LSTM的输出按因子0:1重新排序。

使用不同优化器的基网学习曲线如图4的中心图所示。在这个实验中,NAG、ADAM和RMSprop表现出大致相同的性能,LSTM优化器的性能要比它们好得多。图4中的正确图比较了LSTM优化器的性能,如果允许它运行200个步骤,尽管已经接受了优化100个步骤的培训。在这个比较中,我们重用了前一个实验中的LSTM优化器,这里我们看到LSTM优化器在这个任务上继续优于基线优化器。

Generalization to different architectures

图5显示了三个应用LSTM优化器来训练网络的示例,这些网络的体系结构与训练它的基础网络不同。修改包括(从左到右)(1)一个包含40个隐藏单元的MLP,而不是20个;(2)一个包含两个隐藏层的网络,而不是一个;(3)一个使用ReLU**而不是sigmoid的网络。在前两种情况下,LSTM优化器可以很好地进行泛化,并继续优于手工设计的基线,尽管在其培训机制之外运行。然而,将**函数更改为ReLU会使学习过程的动态发生足够大的变化,使得学习优化器不再能够泛化。最后,在图6中,我们展示了系统地改变测试体系结构的结果;对于LSTM结果,我们再次使用优化器训练使用1层20个单位和乙状元非线性。请注意,在此设置中测试集问题与训练集中的问题非常相似,我们甚至可以看到比基线优化器更好的泛化。

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

 

3.3 Training a convolutional network on CIFAR-10

接下来,我们测试训练神经优化器对CIFAR-10数据集分类性能优化的性能[Krizhevsky, 2009]。在这些实验中,我们使用了一个同时具有卷积和前馈层的模型。其中,实验所用的模型包括三个最大池卷积层和一个包含32个隐藏单元的全连接层;所有非线性均为间歇归一化的ReLU**。

第2.1节中介绍的并在之前的实验中使用的协调式网络分解使用了一个LSTM架构,对于每个优化参数,该架构具有共享的权值,但是独立的隐藏状态。我们发现由于全连通层和卷积层之间的差异,这种分解对于本节介绍的模型架构是不够的。相反,我们通过引入两个LSTMs来修改优化器:一个为完全连接的层提出参数更新,另一个更新卷积层参数。和以前的LSTM优化器一样,我们仍然使用共享权值和独立隐藏状态的协调分解,但是LSTM权值现在只在相同类型的参数之间共享(即全连接和卷积)。

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

与基准技术相比,这个经过培训的优化器的性能如图7所示。最左边的图显示的结果使用优化器满足了测试集上的分类器。额外的两个情节在右边显示的性能优化器对准修改数据集只包含标签的一个子集,即CIFAR-2数据集只包含数据对应于2的10个标签。此外,我们还包括一个优化器LSTM-sub,它只在helout标签上进行培训。

在所有这些示例中,我们可以看到LSTM优化器比基线优化器学习得更快,CIFAR-5尤其是CIFAR-2数据集的性能得到了显著提高。我们还看到,仅在数据的一个不相交子集上训练的优化器几乎不受这种差异的影响,并且可以很好地传输到其他数据集。

 

3.4 Neural Art

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

(17)[NIPS16] ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

 

4 Conclusion

我们已经展示了如何将优化算法的设计转换为一个学习问题,这使我们能够训练专门针对特定函数类的优化器。我们的实验已经证实,学习神经优化器与目前最先进的深度学习优化方法相比,具有更好的性能。我们见证了显著程度的转移,例如,LSTM优化器对12288个参数神经艺术任务进行了训练,能够将任务泛化为同时具有49152个参数、不同样式和不同内容图像的任务。在MNIST任务中,当转移到不同的体系结构时,我们观察到类似的令人印象深刻的结果。在CIFAR图像标记任务上的结果表明,当从相同的数据分布中提取数据集时,LSTM优化器的性能优于手工优化器。