深度学习相关概念7:动量法与自适应梯度

2023-09-27 12:46:23 浏览数 (1)

  在之前的文章中,我们介绍了梯度下降算法。但是梯度下降算法存在计算量过大或者陷入局部最优的问题。人们如今已经提出动量法和自适应梯度法来解决上述的问题。

1.梯度下降存在的问题

  1. 批量梯度下降(BGD)

在梯度下降的每一步中,我们都用到了所有的训练样本,我们需要进行求和运算,在梯度下降中,在计算微积随机梯度下降(SGD)

  1. 随机梯度下降法(SGD)

由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解

添加描述

  1. 小批量梯度下降(MBGD) 同SGD一样,每次梯度的方向不确定,可能陷入局部最优

添加描述

2.动量法(momentum)

   普通的梯度下降法当接近最优值时梯度会比较小,由于学习率固定,普通的梯度下降法的收敛速度会变慢,有时甚至陷入局部最优。

改进目标:改进梯度下降算法存在的问题,即减少震荡,加速通往谷底。

改进思想:利用累加历史梯度信息更新梯度。

   这时如果考虑历史梯度,将会引导参数朝着最优值更快收敛,这就是动量算法的基本思想

   可是为什么加入历史梯度值,就会避免陷入震荡,落入局部最优呢?

   因为累加过程中震荡方向相互抵消,假设第n次的梯度g为-1,第n 1计算的梯度g’为1,那么通过累加后,二者再更新权重时梯度就会变成0,而不是在梯度g为-1的方向进行权重更新后,再在梯度g为1的方向进行权重更新(也就是说避免震荡)。

   此外动量法还可以避免高维空间中的鞍点(导数为0的点但不是全局最优点)

3.自适应梯度与RMSProp

   自适应梯度法通过减小震荡方向步长,增大平坦方向步长来减小震荡,加速通往谷底方向。但是如何区分震荡方向与平坦方向?梯度幅度的平方较大的方向是震荡方向;梯度幅度的平方较小的方向是平坦方向。

AdaGrad方法和RMSProp方法都是自适应梯度方法

3.1AdaGrad方法

   AdaGrad会记录过去所有梯度的平方和,更新权重时如下图所示

   但是学习越深入,r会累计的越来越大,更新的幅度就越小。如果无止境地学习,更新量就会变为0, 完全不再更新。

3.2RMSProp方法

   RMSProp优化算法和AdaGrad算法唯一的不同,就在于累积平方梯度的求法不同。RMSProp算法不是像AdaGrad算法那样暴力直接的累加平方梯度,而是加了一个衰减系数来控制历史信息的获取多少

   假设ρ取0.9,则在100次之后约等于2.65e-5=0.0000265≈0,也就是说100次前的梯度不在参与计算了。这样就可以控制历史信息的获取多少。

4.Adam方法(Adaptive Momentum Estimation)

   Adam是RMSProp的动量版,采用了一个修正偏差来解决冷启动问题

不同最优化方法效果:

上图展示了一个马鞍状的最优化地形,其中对于不同维度它的曲率不同(一个维度下降另一个维度上升)。注意SGD很难突破对称性,一直卡在顶部。而RMSProp之类的方法能够看到马鞍方向有很低的梯度。因为在RMSProp更新方法中的分母项,算法提高了在该方向的有效学习率,使得RMSProp能够继续前进。

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

0 人点赞