先修知识:
梯度下降法是最基本的一类优化器,目前主要分为三种梯度下降法:标准梯度下降法(GD, Gradient Descent),随机梯度下降法(SGD, Stochastic Gradient Descent)及批量梯度下降法(BGD, Batch Gradient Descent)。
? ? ? ?若参数是多元()的,则梯度为:
? ? ? ? ? ? ? ? ?
上图中,红色部分代表损失函数 J(W) 比较大的地方,蓝色部分是损失函数小的地方。我们需要让J(W)的值尽量的低,也就是达到深蓝色的部分。w1,w2表示W向量的两个维度。
评价:标准梯度下降法主要有两个缺点:
?
每次只取一个样本计算梯度,并更新权重。这里虽然引入了随机性和噪声,但期望仍然等于正确的梯度下降。
评价:
评价:
?
Q:?梯度下降法找到的一定是下降最快的方向么?
A:梯度下降法并不是下降最快的方向,它只是目标函数在当前的点的切平面(当然高维问题不能叫平面)上下降最快的方向。在实际使用中,牛顿方向(考虑海森矩阵)才一般被认为是下降最快的方向,可以达到superlinear的收敛速度。梯度下降类的算法的收敛速度一般是linear甚至sublinear的。关于牛顿法在这里:https://blog.csdn.net/weixin_41332009/article/details/113112026
但是为什么在一般问题里梯度下降比牛顿类算法更常用呢?因为对于规模比较大的问题,Hessian计算是非常耗时的;同时对于很多对精度需求不那么高的问题,梯度下降的收敛速度已经足够了。而这也motivate了一类quasi-Newton算法,可以在规避Hessian计算的前提下达到于牛顿类算法差不多的收敛速度。
非线性规划当前的一个难点在于处理非凸问题的全局解,而搜索全局解这个问题一般的梯度下降也无能为力。
?
Q: 牛顿法和梯度下降法对比:
A:? a)从收敛速度上看?,牛顿法是二阶收敛,梯度下降是一阶收敛,前者牛顿法收敛速度更快。但牛顿法仍然是局部算法,只是在局部上看的更细致: 梯度法仅考虑方向,牛顿法不但考虑了方向还兼顾了步子的大小,其对步长的估计使用的是二阶逼近。
? ? ?b)?牛顿法每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。
动量优化方法是在梯度下降法的基础上进行的改变,具有加速梯度下降的作用。一般有标准动量优化方法Momentum、NAG(Nesterov accelerated gradient)动量优化方法。
和SGD不同的是,Momentum的“梯度”不仅包含了这一步实际算出来的梯度,还包括了上一次的梯度“惯性”
特点:
?
总而言之,momentum项能够在原先方向加速SGD,抑制振荡,从而加快收敛
由于当前梯度的改变会受到上一次梯度改变的影响,类似于小球向下滚动的时候带上了惯性。这样可以加快小球向下滚动的速度。
?
nesterov项在梯度更新时做一个校正,避免前进太快,同时提高灵敏度。?
所以,加上nesterov项后,梯度在大的跳跃后,进行计算对当前梯度进行校正。如下图:
momentum首先计算一个梯度(短的蓝色向量),然后在原先梯度的方向(惯性)进行一个大的跳跃(长的蓝色向量)
nesterov项首先在原先梯度的方向进行一个大的跳跃(棕色向量),计算梯度然后进行校正(绿色向量)
自适应学习率优化算法针对于机器学习模型的学习率,传统的优化算法要么将学习率设置为常数要么根据训练次数调节学习率。极大忽视了学习率其他变化的可能性。然而,学习率对模型的性能有着显著的影响,因此需要采取一些策略来想办法更新学习率,从而提高训练速度。
目前的自适应学习率优化算法主要有:AdaGrad算法,RMSProp算法,Adam算法以及AdaDelta算法。
Adagrad其实是对学习率进行了一个约束。即:
? ?(更正:应是)
特点:
缺点:
思想:
思想:AdaGrad算法和RMSProp算法都需要指定全局学习率,AdaDelta算法结合两种算法每次参数的更新步长即:
从表达式可以看出,AdaDelta不需要设置一个默认的全局学习率。
评价:
思想:
Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定
范围。
算法描述:
评价:Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。
?可以看出,直接对梯度的矩估计对内存没有额外的要求,而且可以根据梯度进行动态调整,
终于结束的漫长的理论分析,下面对各种优化器做一些有趣的比较。
(1) 示例一
?
?
上图描述了在一个曲面上,6种优化器的表现,从中可以大致看出:
① 下降速度:
② 下降轨迹:
(2) 示例二
?
?
上图在一个存在鞍点的曲面,比较6中优化器的性能表现,从图中大致可以看出:
(3) 示例三
?
?
上图比较了6种优化器收敛到目标点(五角星)的运行过程,从图中可以大致看出:
① 在运行速度方面
② 在收敛轨迹方面
Tensorflow中封装了一系列的优化器: