神经网络的优化方法介绍与比较


前言

优化方法是深度学习中一个非常重要的话题,最常见的情况就是利用目标函数的导数通过多次迭代来求解无约束最优化问题。常见的最优化方法有一阶的梯度下降方法和其变种(PMSProp,Agagrad,Adam),二阶的牛顿法,拟牛顿发,共轭梯度法等


提示:以下是本篇文章正文内容,下面案例可供参考

一、梯度下降方法(gradient decent)

梯度下降方法是使用最广泛的优化方法,在目标函数是凸函数的时候可以得到全局解(否则得到的可能是局部最优解)

所谓梯度下降方法就是向参数导数的反方向递减的搜索方法。因为导数的反方向是损失函数减小最快的方向,所以也称最速下降法。

最速下降法越接近目标值的时候,需要步长越小,前进越慢,否则会在最优点来回震荡甚至超过最优点。通常在机器学习的优化任务中,有两种常用的梯度下降方法:随机梯度下降和批量梯度下降。

批量梯度下降(Batch gradient decent)

所谓批量梯度下降(Batch gradient decent),就是使用所有的训练样板计算梯度。梯度计算稳定,可以求得全局最优解,但问题是计算很慢,在Batch很大的情况下不适用。

随机梯度下降(Stochastic gradient decent)

所谓随机梯度下降(Stochastic gradient decent),就是每次只取一个样本进行梯度计算,他的问题是梯度计算相对不稳定,容易震荡,所有可视化优化曲线时经常得到一条曲折的线,如图,不过总体上还去趋于全局最优解的。
在这里插入图片描述

通常在实现中,我们会综合两种算法,从训练集中去一小部分进行迭代,这就是大名鼎鼎的mini-batch训练了。

动量(Momentum)

为了解决随机梯度下降的优化曲线过于曲折和速度较慢的缺点,我们可以引入动量。动量算法积累了之前梯度的指数加权平均,并且建议继续想这个方向移动,对于下一次的梯度更新有指导作用。
在这里插入图片描述
如图,波动幅度较小的是SGD+Momentum方法计算的梯度方向
波动幅度较大的是普通的SGD方法计算的方向

由于动量积累了前一刻的梯度方向,所以当下一次的梯度更新方向与之相反时,受前一刻相反梯度的影响,当前时刻的梯度变化幅度会减小;反之会增强。

形象的说,可以把动量想象成物理中的势能。当一个跑步的人想要右拐的时候,由于势能的影响,他不可能90度垂直拐弯,取而代之的是一个不那么锋利的圆滑弧线,这就是上图曲线产生的原因。

Nesterov加速梯度下降法(Nesterov Accelerated Gradient,NAG)

该方法是动量算法的一个变种,同样是一阶优化算法,但在梯度评估方面有所不同。NAG能给动量一个预知的能力,并且收敛速度更快。

我们可以将其抽象为球体滚落的时候,一般是盲目的沿着某个斜率下降的方法,结果并不一定令人满意。于是我们希望有一个比较“智能”的球,能够判断下落的方向,这样在途中遇到斜率上升的时候能够知道减速,这思想对RNN性能的提升有重要意义。

自适应梯度算法(Adagrad algorithm)

在梯度下降方法中有一个很重要的超参数——学习速率(learning rate)。lr过大容易造成梯度震荡甚至超过最优点的现象;而lr过小,每一步计算的移动幅度过小,有太消耗计算成本。通常来讲,初始点离最优点较远,所以一开始的lr可以设置的大一些,但是随着函数的迭代优化,离最优点越来越近,这时,应该减小lr防止错过最优点。即lr应该是一个动态设置。

Adagrad就是针对这一问题提出的,自适应地为各个参数分配不同的学习效率。前期的时候,正则化项较大,能够放大梯度;后期正则化项较小,能够约束梯度。

但是Adagrad算法同样存在问题,依赖人工设置一个超参数全局学习率,设置过大的话,会使lr衰减的过快,即还未到最优点时,梯度更新就已经非常小了。

Adadelta算法(Adadelta algorithm)

Adadelta算法的出现可较好的解决上述问题,其本质是对Adagrad算法法扩展,同样是对学习效率进行自适应约束,但计算上进行了简化。Adagrad算法会累加之前所有的梯度平方,而Adadelta算法只累加固定大小的项,并且仅存储这些近似计算对于的平均值。

RMSprop算法(Root mean squre prop algorithm)

RMSprop可以算作Adadelta的一个特例,依然依赖于全局学习率。效果趋于Adagrad和Adadelta之间。RMSprop优化器的原理类似于动量梯度下降算法。RMSprop优化器限制了垂直方向上的振荡,使我们的算法可以在水平方向上采取更大的步,进行更快地收敛。
在这里插入图片描述

Adam算法(Adaptive Moment Estimation)

Adam算法(Adaptive Moment Estimation)算法本质上是带有动量项的RMSprop算法(Memoment+RMSprop)它利用梯度的一阶矩阵估计和二阶矩阵估计动态的调整每个参数学习率。目前为止是工业上最流行的优化算法之一,效果很好。适合大多数非优化问题,尤其适合处理大数据集和高维空间问题。

Adamax是Aadm的一个变种,对学习率上限提供了一个更简单的范围。

Nadam算法本质上是(Neaterov+Adam)对学习率有了更强的约束,同时对梯度的更新也有了更直接的影响,一般来说可以取得更好的效果。

二、牛顿法(BFGS),拟牛顿法(L-BFGS)&共轭梯度法(Conjugate Gradient)

梯度下降法是基于一阶的梯度优化的方法,牛顿法则是基于二阶梯度的方法,通常有更快的收敛速度。该算法利用局部一阶和二阶的偏导信息,推测整个函数的形状,进而求得近似函数的全剧最小值,然后将当前最小值设定为近似函数最小值。

相比于一阶方法,牛顿法不需要超参数学习速度(learning rate),相当于在碗状的凸函数中,跳过一步接着一步的梯度更新,直接跳到碗底。

不过牛顿法作为一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。当Hessesion矩阵不可逆时更是出现无法计算的问题。而且矩阵的逆运算计算复杂的为n的2次方,当问题规模较大时,计算量很大。

拟牛顿法通过正定矩阵来近似Hessian矩阵的逆矩阵,不需要二阶导数信息,简化了运算的复杂度。

共轭梯度法是一种通过迭代下降的共轭方向来避免Hessian矩阵求逆计算的方法,介于最速下降法与牛顿法之间,是一种不错的优化方法。


总结

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39297053/article/details/112856656