当前位置:文档之家› 深度学习系列(7):神经网络的优化方法

深度学习系列(7):神经网络的优化方法

机器器学习中,梯度下降法常⽤用来对相应的算法进⾏行行训练。

常⽤用的梯度下降法包含三种不不同的形式,分别是BGD 、SGD 和MBGD ,它们的不不同之处在于我们在对⽬目标函数进⾏行行梯度更更新时所使⽤用的样本量量的多少。

以线性回归算法来对三种梯度下降法进⾏行行⽐比较。

⼀一般线性回归函数的假设函数为:(即有n 个特征)对应的损失函数为下图即为⼀一个⼆二维参数和组对应的损失函数可视化图像:批量量梯度下降法(Batch Gradient Descent ,简称BGD )是梯度下降法最原始的形式,它的具体思路路是在更更新每⼀一参数时都使⽤用所有的样本来进⾏行行更更新,其数学形式如下:深度学习系列列(7):神经⽹网络的优化⽅方法⼀一、Gradient Descent [Robbins and Monro, 1951,Kiefer et al., 1952]=h θ∑j =0n θj x jL (θ)=12m ∑i =1m(h ()−)x i y i 2θ0θ11.1 BGD (Batch Gradient Descent )还是以上⾯面⼩小球的例例⼦子来看,momentum ⽅方式下⼩小球完全是盲⽬目被动的⽅方式滚下的。

这样有个缺三、NAG (Nesterov accelerated gradient )[Nesterov, 1983]点就是在邻近最优点附近是控制不不住速度的。

我们希望⼩小球可以预判后⾯面的“地形”,要是后⾯面地形还是很陡峭,那就继续坚定不不移地⼤大胆⾛走下去,不不然的话就减缓速度。

当然,⼩小球⾃自⼰己也不不知道真正要⾛走到哪⾥里里,这⾥里里以作为下⼀一个位置的近似,将动量量的公式更更改为:相⽐比于动量量⽅方式考虑的是上⼀一时刻的动能和当前点的梯度,⽽而NAG 考虑的是上⼀一时刻的梯度和近似下⼀一点的梯度,这使得它可以先往前探探路路,然后慎重前进。

Hinton 的slides 是这样给出的:其中两个blue vectors 分别理理解为梯度和动能,两个向量量和即为momentum ⽅方式的作⽤用结果。

⽽而靠左边的brown vector 是动能,可以看出它那条blue vector 是平⾏行行的,但它预测了了下⼀一阶段的梯度是red vector ,因此向量量和就是green vector ,即NAG ⽅方式的作⽤用结果。

momentum 项和nesterov 项都是为了了使梯度更更新更更加灵活,对不不同情况有针对性。

但是,⼈人⼯工设置⼀一些学习率总还是有些⽣生硬,接下来介绍⼏几种⾃自适应学习率的⽅方法训练深度⽹网络的时候,可以让学习率随着时间退⽕火。

因为如果学习率很⾼高,系统的动能就过⼤大,参数向量量就会⽆无规律律地变动,⽆无法稳定到损失函数更更深更更窄的部分去。

对学习率衰减的时机把握很有技巧:如果慢慢减⼩小,可能在很⻓长时间内只能浪费计算资源然后看着它混沌地跳动,实际进展很少;但如果快速地减少,系统可能过快地失去能量量,不不能到达原本可以到达的最好位置。

通常,实现学习率退⽕火有三种⽅方式:θ−γv t −1=γ+ηJ (θ−γ)v t v t −1∇θv t −1θ=θ−v t四、学习率退⽕火Adadelta 是Adagrad 的⼀一种扩展,以缓解Adagrad 学习速率单调递减问题的算法。

Adadelta 不不是对过去所有时刻的梯度平⽅方进⾏行行累加,⽽而是将累加时刻限制在窗⼝口⼤大⼩小为的区间。

但梯度累加没有采⽤用简单的存储前个时刻的梯度平⽅方,⽽而是递归地定义为过去所有时刻梯度平⽅方的decaying average 。

时刻的running average 仅仅依赖于之前average 和当前的梯度:类似momentum term ,我们将取值在0.9附近。

简介起⻅见,我们从参数更更新向量量⻆角度重写普通SGD 的参数更更新:Adagrad 中我们推倒的参数更更新向量量现在就以下述形式出现:现在我们简单地将对⻆角矩阵替换为过去时刻梯度平⽅方的decaying average :5.3 Adadelta [Zeiler, 2012]w w E [g 2]t t E =γE +(1−γ)[]g 2t []g 2t −1g 2tγΔθt Δ=−η·θt g t ,i=+Δθt +1θt θtΔ=−⊙θt η+ϵG t ‾‾‾‾‾‾√g tE [g 2]t =−⊙η由于分⺟母是root mean squared (RMS) error criterion of the gradient ,则上⾯面公式可以替换为:作者发现(和SGD ,Momentum 或者Adagrad ⼀一样)上述更更新中的单元不不匹配,即只有部分参数进⾏行行更更新,也就是参数和更更新应该有着相同的hypothetical units 。

为了了实现这个⽬目的,他们⾸首先定义了了另外⼀一个exponentially decaying average ,这⼀一次对更更新参数的平⽅方进⾏行行操作,⽽而不不只是对梯度的平⽅方进⾏行行操作:参数更更新中的root mean squared error 则为:将以前的更更新规则中的学习速率替换为参数更更新的RMS ,则得到Adadelta 更更新规则:由于Adadelta 更更新规则中没有了了学习速率这⼀一项,我们甚⾄至都不不⽤用对学习速率进⾏行行设置。

训练初中期,加速效果不不错,很快训练后期,反复在局部最⼩小值附近抖动Adaptive Moment Estimation (Adam)是另外⼀一种对每个参数进⾏行行⾃自适应学习速率计算的⽅方法,除了了像Adadelta 和RMSprop ⼀一样保存去过梯度平⽅方和的exponentially decaying average 外,Adam 还保存类似momentum ⼀一样过去梯度的exponentially decaying average 。

它看起来像是RMSProp 的动量量版。

和分别是分别是梯度的⼀一阶矩(均值)和⼆二阶距(偏⽅方差)的估计,由于和由全零的向量量来初始化,Adam 的作者观察到他们会被偏向0,特别是在initial time steps 或decay rates 很⼩小的时候(即和都接近于1),于是他们通过计算bias-corrected ⼀一阶矩和⼆二阶矩的估计低消Δ=−⊙θt ηE[+ϵg 2]t ‾‾‾‾‾‾‾‾‾‾√g t Δ=−θt ηRMS [g ]tE [Δ=γ·E [Δ+(1−γ)Δθ2]t θ2]t θ2RMS [Δθ=]t E [Δ+ϵθ2]t ‾‾‾‾‾‾‾‾‾‾‾√Δ=−·θt RMS [Δθ]t RMS [g ]tg t =+Δθθt +1θt 5.4 Adam [Kingma and Ba, 2014]=·+(1−β)·m t β1m t −1g t=·+(1−)·v t β2v t −1β2g 2tm t v t m t v t β1β2掉偏差。

然后使⽤用上述项和Adadelta 和RMSprop ⼀一样进⾏行行参数更更新,可以得到Adam 的更更新规则:Adam 的完整更更新过程如下图所示,其中它推荐默认设置,在实际操作中,推荐将Adam 作为默认的算法,⼀一般⽽而⾔言跑起来⽐比RMSProp 要好⼀一些。

但也可以试试SGD+Nesterov 动量量。

下⾯面两幅动画让我们直观感受⼀一些优化算法的优化过程。

在第⼀一幅动图中,我们看到他们随着时间推移在损失表⾯面的轮廓(contours of a loss surface )的移动。

注意到Adagrad 、Adadelta 和RMSprop ⼏几乎⽴立刻转向正确的⽅方向并快速收敛,但是Momentum 和NAG 被引导偏离了了轨道。

这让我们感觉就像看滚下⼭山的⼩小球。

然⽽而,由于NAG 拥=mm 1−βt 1=v v 1−βt 2=−θt +1θt η+ϵv ‾‾‾‾‾√m α=0.001,=0.9,=0.999,ϵ=β1β210−8六、算法可视化有通过远眺所提⾼高的警惕,它能够修正他的轨迹并转向极⼩小值。

第⼆二幅动图中为各种算法在saddle point(鞍点)上的表现。

所谓saddle point也就是某个维度是positive slope,其他维度为negative lope。

前⽂文中我们已经提及了了它给SGD所带来的困难。

注意到SGD、Momentum和NAG很难打破对称,虽然后两者最后还是逃离了了saddle point。

然⽽而Adagrad, RMSprop, and Adadelta迅速地沿着negative slope下滑。

在深度⽹网络背景下,第⼆二类常⽤用的最优化⽅方法是基于⽜牛顿法的,其迭代如下:这⾥里里是Hessian 矩阵,它是函数的⼆二阶偏导数的平⽅方矩阵。

是梯度向量量,这和梯度下降中⼀一样。

直观理理解上,Hessian 矩阵描述了了损失函数的局部曲率,从⽽而使得可以进⾏行行更更⾼高效的参数更更新。

具体来说,就是乘以Hessian 转置矩阵可以让最优化过程在曲率⼩小的时候⼤大步前进,在曲率⼤大的时候⼩小步前进。

需要重点注意的是,在这个公式中是没有学习率这个超参数的,这相较于⼀一阶⽅方法是⼀一个巨⼤大的优势。

然⽽而上述更更新⽅方法很难运⽤用到实际的深度学习应⽤用中去,这是因为计算(以及求逆)Hessian 矩阵操作⾮非常耗费时间和空间。

举例例来说,假设⼀一个有⼀一百万个参数的神经⽹网络,其Hessian 矩阵⼤大⼩小就是[1,000,000 x 1,000,000],将占⽤用将近3,725GB 的内存。

这样,各种各样的拟-⽜牛顿法就被发明出来⽤用于近似转置Hessian 矩阵。

在这些⽅方法中最流⾏行行的是L-BFGS ,L-BFGS 使⽤用随时间的梯度中的信息来隐式地近似(也就是说整个矩阵是从来没有被计算的)。

然⽽而,即使解决了了存储空间的问题,L-BFGS 应⽤用的⼀一个巨⼤大劣势是需要对整个训练集进⾏行行计七、⼆二阶⽅方法x ←x −[Hf (x )∇f (x )]−1Hf (x )∇f (x )算,⽽而整个训练集⼀一般包含⼏几百万的样本。

和⼩小批量量随机梯度下降(mini-batch SGD)不不同,让L-BFGS在⼩小批量量上运⾏行行起来是很需要技巧,同时也是研究热点。

实践时在深度学习和卷积神经⽹网络中,使⽤用L-BFGS之类的⼆二阶⽅方法并不不常⻅见。

相反,基于(Nesterov的)动量量更更新的各种随机梯度下降⽅方法更更加常⽤用,因为它们更更加简单且容易易扩展。

参考资料料[1] Kiefer, J., Wolfowitz, J., et al. (1952). Stochastic estimation of the maximum of a regression function. The Annals of Mathematical Statistics, 23(3):462–466.[2] Nesterov, Y. (1983). A method of solving a convex programming problem with convergence rate o (1/k2). In Soviet Mathematics Doklady, volume 27, pages 372–376.[3] Duchi, J., Hazan, E., and Singer, Y. (2011). Adaptive subgradient methods for online learning and stochastic optimization. The Journal of Machine Learning Research, 12:2121–2159.[4] Hinton. Neural Networks for Machine Learning[5] Zeiler, M. D. (2012). Adadelta: An adaptive learning rate method.[6] Kingma, D. and Ba, J. (2014). Adam: A method for stochastic optimization.[7] CS231n Convolutional Neural Networks for Visual Recognition.。

相关主题