关于深度学习的优化方法
关于深度学习的优化方法(On Optimization Methods for Deep Learning)
摘要
在训练深度学习时我们的主要方法是随机梯度下降法(stochastic gradient descent methods , SGDs)。尽管它易于实现,但SGDs调整困难,并且很难并行化。这些问题使得开发、调试和扩展深度学习SGDs算法具有一定的挑战。本文中,我们发现更复杂的现成的优化方法,比如Limited memory BFGS (L-BFGS)和具有线搜索的共轭梯度(Conjugate gradient , CG)可以大大简化和加快要训练的深度学习算法。如果我们考虑算法扩展(例如,稀疏正则化)和硬件扩展(例如,图形处理器GPUs或计算机集群),L-BFGS / CG和SGDs之间的差别会更加明显。我们的分布式优化支持局部连接网络和卷积神经网络的L-BFGS的应用实验。利用L-BFGS,我们的卷积网络模型在标准MNIST数据集(手写数字识别所用的图像的数据集)中达到0.69%。在MNIST算法不用扭曲或训练的条件下,这是一种高水平的结果。
1 介绍
SGDs的优势是,对于具有许多训练样本的问题,实现简单,快速。但是,它具有很多缺点。一个主要缺点是它们需要很多优化参数的手动调整,例如学习率和收敛准则。如果不太了解手头的任务,我们很难找到一个好的学习率或一个好的收敛准则。在这种情况下,标准策略是运行许多优化参数的学习算法,并选择在验证集上提供最佳性能的模型。由于我们需要在可能的优化参数的大空间中搜索,这使得SGDs难于训练数据,因为多次运行优化程序造成的计算代价昂贵。SGDs的另一个缺点是它们固有的顺序:很难用GPUs并行化或使用计算机集群进行分布式计算。
批处理的方法,如有线搜索程序的存在的L-BFGS或共轭梯度(CG),通常训练起来更稳定,并且更加容易检查收敛。这些方法也能够在GPUs上并行计算梯度,或在多台机器上分布式计算。这些方法通常被认为是缓慢的,但利用大量RAMs,多核CPUs,GPUs和具有快速的网络硬件的计算机集群,我们可大大加快进程。
在一台机器上,L-BFGS的速度效益来自使用近似的二阶信息(建模变量之间的相互作用)。而CG的效益来自在优化过程中利用共轭信息。由于这些薄记步(bookkeeping steps),L-BFGS和CG能比SGDs更快、更稳定。
批量L-BFGS和CG需要对整个数据集的梯度计算,进行更新。它们的一个弱点是,不会随着样本的数量而优雅地伸缩。我们发现需要在数据集的一小部分上进行梯度计算的minibatch training,解决了这个弱点。我们发现当数据集很大时,minibatch LBFGS / CG也很快。
我们的实验结果反映了不同优化方法的优缺点。在我们考虑的问题中,L-BFGS在低维问题上比SGDs/ CG具有更高的竞争力,有时是更优越的,尤其是对于卷积模型。至于高维问题,CG的更具竞争力,通常优于L-BFGS和SGDs。此外,利用大的minibatch和SGDs线搜索可以提高性能。
SGDs上的L-BFGS和CG算法更重要的速度改进在我们的稀疏自动编码器(sparse autoencoders)实验中可以被观察到。这是因为有一个较大的minibatch使得优化问题便于进行稀疏编码:在这种情况下,估计二阶和共轭信息的成本比起计算梯度的成本要小。
此外,当训练编码器,L-BFGS和CG通过简单地在GPU上执行计算,都可以明显加速(2x)。相反,对于同一问题,使用带GPU的SGDs时,只有很小的速度提升被观察到。
我们目前的结果显示,当模型利用本地连接网络或卷积神经网络时,Map-Reduce风格的优化在L-BFGS做得很好。我们的实验结果表明,当本地连接网络和卷积网络被使用时,速度的改善与机器的数量接近线性增长(在实验中多达8台机器被考虑到)。
我们应用我们的发现,即一个GPU集群上的L-BFGS,来训练卷积网络模型,并达到0.69%的测试集误差。这是算法不使用训练或扭曲条件下,在MNIST上的最好结果。
批量优化也在特征学习算法中取得成功,得到各种目标识别问题和行为识别问题的最好结果。
2 相关工作
优化研究历史悠久。无约束最优化方法的成功实例包括Newton Raphson法、BFGS方法,共轭梯度法和随机梯度下降方法。这些方法通常与线搜索方法相关联,以确保算法始终改进目标函数。
当涉及到大规模机器学习,最喜欢的优化方法通常是SGDs。SGDs方面最近的工作重点是学习速率的自适应策略或利用近似二阶信息改善SGD收敛性。在实践中,具有常数学习率或特定形式的学习率的plain SGDS仍然流行,因为其易于实施。这些简单的方法在深度学习更常见,由于优化问题非凸,复杂算法的收敛性不再持有。
近期训练深层网络主张采用分层训练。训练这些模型优化工具包括对比散度(Contrastive Divergence),共轭梯度(Conjugate Gradient),随机对角Levenberg Marquardt (stochastic diagonal Levenberg-Marquardt) 和Hessian-free优化(Martens,2010)。卷积神经网络的传统是利用SGDs与随机对角Levenberg- Marquardt,它采用Hessian矩阵的对角近似(diagonal approximation)。
本文的目的是在无监督特征学习和深度学习的背景下,对现有优化算法的优缺点进行实证研究。在这个方向上,我们专注于对L-BFGS, CG和SGDs的研究。
近年来,并行优化方法已成为提高机器学习算法的一种方法。Map-Reduce 风格优化方法曾是成功的早期方法。我们还注意到最近的研究,在没有使用Map-Reduce框架的情况下,可以并行化SGDs。
在我们的实验中,我们发现,如果我们使用tiled(局部连接)网络(包含卷积架构),Map-Reduce风格的并行性仍然是一个有效的扩展机制。在这种情况下,通过网络传输参数的成本相对于计算目标函数值和梯度的成本较小。
3 深度学习算法
3.1 限制玻尔兹曼机(Restricted Boltzmann Machines)
在RBMs中,在训练中使用的梯度是一个近似的形式,利用少量的吉布斯采样步骤(Contrastive Divergence)。给定梯度的偏向性和目标函数的棘手性,除了普通SGDs外,很难使用其他的优化方法。由于这个原因,我们在实验中不考虑RBMs。
3.2 Autoencoders和去噪Autoencoders
给定一个未标记的数据集$\{x^{(i)}_{i=1}^m\}$, autoencoder是一个两层的网络,它学习非线性代码来表示(或“重构”)数据。具体地,我们要学习表达式$h(x^{(i)};W,b)=\sigma(Wx^{(i)}+b)$使得$\sigma(W^Th(x^{(i)};W,b)+c)$近似于$x^{(i)}$,
\[...\]
在这里,我们使用$L_2$范数来惩罚重建和输入之间的区别。在其他研究中,当$x$为二进制时,也可以使用交叉熵值(cross entropy cost)。通常情况下,我们设置了激活函数$\sigma$是sigmoid函数或双曲正切函数。
与RBMs不同的是,autoencoder objective的梯度是精确计算的,这就增加了使用更高级的优化方法(如L-BFGS和CG)来训练网络的机会。
去噪自动编码器也是可以通过I-BFGS / CG训练的算法。
3.3. 稀疏 RBMs and Autoencoders
稀疏正则化通常会导致在分类中表现良好的可解释性。稀疏编码最初是由(Olshausen & Field,1996)提出的,作为视觉皮质中简单细胞的模型。Lee等应用稀疏编码来学习机器学习应用的特性。Lee等(2008)结合稀疏性和RBMs学习在视觉皮质中模拟区域$V_2$的某些特性的表征。其方法的关键思想是对隐藏表示$\mathbb{E} h_j(x;W,b)$的期望值和首选目标激活$\rho$之间的偏差进行惩罚。通过设置$\rho$接近零,隐藏的单位将稀疏地激活。
稀疏表示已经成功应用到许多领域中,比如对象识别,语音识别和活动识别。
训练稀疏的RBMs通常是困难的。这是由于RBMs的随机性质。具体地说,在随机模式下,期望$\mathbb{E} h_j(x;W,b)$非常吵。训练稀疏RBMs的一种常见做法是使用$\mathbb{E} h_j(x;W,b)$的运行估计只惩罚偏差。这进一步增加了优化过程,使得调试学习算法变得困难。另外,对不同的参数$W,b,c$的学习速率进行正确的调优是很重要的,因此很难对稀疏的RBMs进行训练。
在我们的经验中,通过提出的autoencoders的稀疏惩罚,特别是当批量或大型的minibatch批量优化方法被使用时,使用autoencoders的稀疏表示通常会更快更简单。
在细节中,我们考虑稀疏autoencoders $\rho$的目标的激活和使用KL散度惩罚它
\[1\]
其中$m$是例子的个数,$n$是隐藏单元的个数。
为了训练稀疏的自动编码器,我们需要估计每个隐藏单元的预期激活值。但是,我们将无法计算这个统计,除非我们在批量模式下运行优化方法。在实践中,如果我们有一个小的数据集,最好使用一个批处理方法来训练一个稀疏autoencoder,因为我们不必调整优化参数,如minibatch大小,$\lambda$如下所述。
使用minibatch尺寸$m’< < m$,保持期望$\mathbb{E} h_j(x;W,b)$的运行估计$\tau$是常见的。在这种情况下,KL惩罚是
\[2\]
$\lambda$是另一个可调参数。
3.4 Tiled和本地连接的网络
RBMs和autoencoders都有紧密连接的网络工作架构,它们不能很好地扩展到大型图像。
对于大图像,最常用的方法是使用卷积神经网络。
卷积神经网络具有本地接受域架构(local receptive field architectures):每个隐藏单元只能连接到图像的一个小区域。平移不变性通常是通过权重(weight tying)来固定的。最近的方法试图放松这一约束,在他们的tiled卷积架构中也学习其他的不变性。我们的实验结果表明,在使用Map-Reduce框架的计算机集群上,可以有效地训练本地的架构,如tiled卷积或卷积架构。对于局部架构,在网络上传播梯度的成本通常小于计算它的成本(例如,在实验中考虑的案例)。
4 实验。
4.1 数据集和计算机
我们的实验是在标准的MNIST数据集上进行的。我们在实验中使用多达8台机器;每台机器有4个英特尔CPU核心(2.67 GHz)和GeForce GTX 285 GPU。除非有“并行化”的指示,否则大多数的实验都是在一台机器上完成的。
我们用Matlab和它的GPU-plugin Jacket做了我们的实验,我们用我们的自定义工具箱在Matlab和Java中进行远程过程调用。
在下面的实验中,我们报告了机器学习中标准指标:测试数据的目标函数。(即测试误差)。我们注意到,在训练中评估的目标函数也显示了类似的趋势。
4.2 优化方法
我们对现成的SGDs,L-BFGS和CG感兴趣。对于SGD,我们使用了一个学习速率的时间表αβ+ t,其中t是迭代数。在我们的实验中,我们发现使用这个学习速率比一个恒定的学习率要好。我们也使用动量,并改变用来计算梯度的样本的数量。
总之,SGDs中包含的优化参数是:α,β,动量参数(momentum parameters)和minibatch样本的数量。
我们将带有一个固定的minibatch的L-BFGS和CG进行多次迭代,然后从较大的训练集重新采样一个新的minibatch。对于每一个新的minibatch,我们都丢弃了L-BFGS/ CG中缓存的优化历史。
在我们的设置中,对于CG和I-BFGS,有两个优化参数:minibatch大小和每个minibatch的迭代次数。对于其他优化参数,如行搜索参数,我们使用默认值。对于CG和LBFGS,分别在3次迭代和20次迭代后,我们替换了minibatch。我们发现这些参数在很多问题上通常都很有效。因此,唯一剩下的可调参数是minibatch大小。
4.3 Autoencoder训练
我们将L-BFGS, CG与SGDs在训练自动编码器进行比较。我们的autoencoders 有10000隐藏单元(units)和sigmoid激活函数$\sigma$。因此,我们的模型有大约$8\times 10^5$个参数,这被认为是像L-BFGS那样具有挑战性的高阶优化方法。
对于L-BFGS,我们在$\{1000,10000\}$中改变了minibatch大小;而对于CG,我们在$\{100,10000\}$中改变了minibatch大小。对于SGDs,我们尝试了20个优化参数的结合,包括在$\{1,10,100,1000\}$(当minibatch较大时,这个方法也称为minibatch梯度下降,Gradient Descent)中变化的minibatch大小。
我们比较了不同优化方法测试集的重构误差(reconstruction errors),并总结了图1中的结果。
对于SGDs,我们只报告两个最佳参数设置的结果。
研究结果表明,采用线搜索的minibatch L-BFG和CG的收敛速度快于经过仔细调整的普通SGDs。特别地,与L-BFG相比,CG表现得更好,因为计算共轭信息比估计Hessian要划算得多。由于线搜索和共轭信息,CG的表现也优于SGDs。
为了了解估计的共轭信息对CG帮助多大,我们还做了一个控制实验,我们调优(增加) minibatch大小,并向SGDs添加了一个行搜索过程。
结果如图2所示,这证实了行搜索过程可以使SGDs变得更简单,更快进行调整。使用前面步骤中的信息形成Hessian近似(L-BFGS)或共轭方向(CG),进一步改善了结果。
4.4 稀疏autoencoders训练
在这个实验中,我们训练了带KL稀疏惩罚的autoencoders。将目标激活$\rho$设为10% (稀疏autoencoders或RBMs中的典型值)。当前样本估计和旧的估计之间的加权$\lambda$设成minibatch大小$m’$和1000之间的比例($=\min\{\frac{m’}{1000},1\}$)。这意味着我们对隐藏单元激活的估计是通过平均至少1000个例子来计算的。
我们在图 3报告了不同方法的表现。结果表明,L-BFGS / CG比SGDs快得多。然而,这种差异比标准的自动编码器更重要。这是因为L-BFGS和CG更喜欢更大的minibatch,因此更容易估计隐藏激活的期望值。相比之下,SGDs必须处理对隐藏激活的噪声估计,我们必须设置学习率参数,以使算法更稳定。有趣的是,与之前的实验不同,这条线搜索并没有明显改善SGDs。对线搜索的仔细检查显示,初始步长选得比调整步长稍微小一点(更保守)。
使用GPU进行深度学习算法训练的想法是在(Raina et al .,2009)中提出的。
在本节中,我们将考虑GPU和使用标准autoencoders的实验,以了解不同的优化算法的执行情况。
使用了在4.3中描述的相同的实验协议,我们比较了优化方法和从CPU切换到GPU的改进,并在图4中展示结果。从图中可以看到,L-BFGS和CG的速度提高比SGDs高得多。这是因为L-BFGS和CG更喜欢更大的minibatch,可以高效率地在GPU并行处理。
4.6 密集网络的并行训练
在此实验中,我们通过使用Map-Reduce框架,探索了在分布式方式中训练自动编码器的优化方法。我们也使用了所有算法的相同设置,如在第4.3节中使用的。
我们的结果是,训练密集的自动编码器(由于缺少空间而省略)表明,这种方式的密集连接网络的并行化会导致收敛速度比在一台独立的机器上运行该方法更慢。这可以归因于关于通过网络传递模型和梯度的通信成本:参数向量的大小为64Mb,这是大量的网络流,因为它经常被通信。
4.7 本地网络的并行训练
如果我们使用tiled(本地连接的)网络,Map-Reduce式梯度计算可以作为一种有效的训练方式。在tiled网络中,参数的数量很少,因此跨网络传输梯度的成本通常比计算它的成本要小。具体来说,在这个实验中,我们约束每个隐藏的单元,以连接到图像的一小部分。此外,我们没有在隐藏的单位中共享任何权重(没有权重束缚约束)。我们学习了20个特征图(feature maps),每个图由441个滤波器(filters)组成,每个过滤器大小为$8\times 8$。
图5所示的结果显示,在使用计算机集群时,SGD的速度较慢。另一方面,由于它偏爱更大的minibatch,L-BFGS具有更显著的速度改进。
此外,图中还显示,当使用本地连接网络时,L-BFGS的速度几乎是线性的(在实验中用到多达8台从机)。在参数数量小的模型上,L-BFGS的bookkeeping和通信成本都比梯度计算(分布在机器上)小得多。
4.8 监督CNN的并行训练
在本实验中,我们比较了两层卷积神经网络(CNNs)的监督训练的不同优化方法。具体来说,我们的模型在第一层有16个$5\times 5$的过滤器的映射,然后是一个pool $3\times 3$区域上的(非重叠) pooling units。第二层有16个$4\times 4$ 滤波器的映射,没有任何共用单位。另外,我们有一个softmax分类层,它连接到来自第二层的所有输出单元。在这个实验中,我们在许多具有GPU的机器上进行分布式梯度计算。
实验结果(图4.8)表明,由于低维数(小于10000个参数),L - BFGS在这个问题上优于CG和SGDs。Map-Reduce风格的并行性也大大提高了L - BFGS和CG的性能。
4.9 标准MNIST分类
最后,我们进行了实验,以确定L - BFGS是否影响分类精度。我们使用了一个带有第一层的卷积网络,它有32个$5\times 5$滤波器的映射和$3\times 3$的pooling with subsampling。第二层有$5\times 5$个过滤器的64个映射,以及$2\times 2$的pooling with subsampling。这种架构与Ranzato et al .(2007)所描述的类似,并有以下两种不同:(i)我们没有使用200个隐藏单元的额外隐藏层;(ii) 我们的第一层pooling单元(pooling units)的接收场稍微大一些(出于计算的原因)。
我们使用4台机器(带GPU)来训练我们的网络。对于每一时刻,我们将参数保存到磁盘上,并使用了1万样本集,以选择最佳模型。利用最优模型对测试集进行预测。采用minibatch L- BFGS,我们方法(ConvNet)的结果如表1所示。
结果表明,使用L- BFGS进行训练的CNN获得了一个令人振奋的分类结果:0.69%.我们注意到,这是MNIST在不使用无监督预训练或distortions的算法中最好的结果。具体地说,工程distortions,被普遍认为是引入domain knowledge的一种方法,可以提高MNIST的分类结果。
事实上,最先进的结果包括更精细的tortion engineering(工程)和/或无监督预训练,例如,0.4%(Simard et al .,2003),0.53%(Jarrett et al .,2009),0.39%(Ciresan et al .,2010)。
5 讨论
在我们的实验中,不同的优化算法在不同的问题上显得优势明显。与看似广泛持有的信念相反, SGDs几乎总是首选,我们发现L - BFGS和CG在很多情况下都优于SGDs。
在我们考虑的问题中,L - BFGS是低维问题优化的最佳候选,其参数个数相对较小(如卷积神经网络)。对于高维问题,CG通常做得很好。
稀疏性为使用L - BFGS/ CG提供了另一个令人信服的理由。在我们的实验中,L - BFGS和CG在训练稀疏自动编码器上优于SGDs。
我们注意到有些情况下,L - BFGS可能不能表现优异(例如,如果Hessian不是很好地接近于低秩估计)。例如,在本地网络中,接受域之间的重叠部分很小,Hessian有一个块对角(block-diagonal)结构,而L - BFGS使用低秩更新,可能性能不好。在这种情况下,利用问题结构的算法可能执行得更好。
CG和L - BFGS也是能够更好地利用GPU的方法,因为它们偏爱更大的minibatch。此外,如果一个人使用了tiled(本地连接的)网络或其他具有相对较少的参数的网络,那么可以在Map-Reduce框架中计算梯度,并加速对L - BFGS的训练。