优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

时间:2022-09-12 11:56:09

Coursera吴恩达《优化深度神经网络》课程笔记(2)-- 优化算法

深度机器学习中的batch的大小

深度机器学习中的batch的大小对学习效果有何影响?

1. Mini-batch gradient descent

SGD VS BGD VS MBGD

3. 指数加权平均(Exponentially weighted averages)

这种滑动平均算法称为指数加权平均(exponentially weighted average)其一般形式为:

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 值决定了指数加权平均的天数,近似表示为:

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

例如,当 β=0.9 ,则 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam ,表示将前10天进行指数加权平均。

当 β=0.98 ,则 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam ,表示将前50天进行指数加权平均。

β值越大,则指数加权平均的天数越多,平均后的趋势线就越平缓,但是同时也会向右平移。下图绿色曲线和黄色曲线分别表示了 β=0.98 和 β=0.5 时,指数加权平均的结果。

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

这里简单解释一下公式 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 是怎么来的。准确来说,指数加权平均算法跟之前所有天的数值都有关系,根据之前的推导公式就能看出。但是指数是衰减的,一般认为衰减到 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 就可以忽略不计了。因此,根据之前的推导公式,我们只要证明

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

1/(1-β)是迭代中β乘的次数,左式指前面的V(如V0)在迭代多次后(如当前V是20)V0的β近似值,它衰减到 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 那么V0就可以忽略不计了,详见下图

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam ,则 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 。即证明转化为:

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

显然,当 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 时,上述等式是近似成立的。

至此,简单解释了为什么指数加权平均的天数的计算公式为 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

4. 指数加权平均理解

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

重新看上面这个式子, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 原始数据值, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 是类似指数曲线,从右向左,呈指数下降的。 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 的值就是这两个子式的点乘,将原始数据值与衰减指数点乘,相当于做了指数衰减,离得越近,影响越大,离得越远,影响越小,衰减越厉害。

5.指数加权平均的偏移校正

上文中提到当 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 时,指数加权平均结果如下图绿色曲线所示。但是实际上,真实曲线如紫色曲线所示。

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

我们注意到,紫色曲线与绿色曲线的区别是,紫色曲线开始的时候相对较低一些。这是因为开始时我们设置 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam ,所以初始值会相对小一些,直到后面受前面的影响渐渐变小,趋于正常。

修正这种问题的方法是进行偏移校正(bias correction),即在每次计算完 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 后,对 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 进行下式处理:

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

在刚开始的时候,t比较小, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam ,这样就将 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 修正得更大一些,效果是把紫色曲线开始部分向上提升一些,与绿色曲线接近重合。随着t增大, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 基本不变,紫色曲线与绿色曲线依然重合。这样就实现了简单的偏移校正,得到我们希望的绿色曲线。

值得一提的是,机器学习中,偏移校正并不是必须的。因为,在迭代一次次数后(t较大), 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 受初始值影响微乎其微,紫色曲线与绿色曲线基本重合。所以,一般可以忽略初始迭代过程,等到一定迭代之后再取值,这样就不需要进行偏移校正了。

6.动量梯度下降算法 SGD with Momentum

在普通的随机梯度下降和批梯度下降当中,参数的更新是按照如下公式进行的:

W = W - αdW 
b = b - αdb

其中α是学习率,dW、db是cost function对w和b的偏导数。

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

原始的梯度下降算法如上图蓝色折线所示。在梯度下降过程中,梯度下降的振荡较大,尤其对于W、b之间数值范围差别较大的情况。此时每一点处的梯度只与当前方向有关,产生类似折线的效果,前进缓慢。而如果对梯度进行指数加权平均,这样使当前梯度不仅与当前方向有关,还与之前的方向有关,这样处理让梯度前进方向更加平滑,减少振荡,能够更快地到达最小值处。

有一个梯度下降法叫做动量梯度下降。在SGD基础上引入了一阶动量

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

使用这个公式,可以将之前的dW和db都联系起来,不再是每一次梯度都是独立的情况。其中β是可以自行设置的超参数,一般情况下默认为0.9(也可以设置为其他数值)。β代表了现在的vdW和vdb与之前的1 / (1 - β)个vdW和vdb有关。

从动量的角度来看,以权重W为例, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 可以成速度V, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 可以看成是加速度a。指数加权平均实际上是计算当前的速度,当前速度由之前的速度和现在的加速度共同影响。而 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam ,又能限制速度 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 过大。也就是说,当前的速度是渐变的,而不是瞬变的,是动量的过程。这保证了梯度下降的平稳性和准确性,减少振荡,较快地达到最小值处。

另外,关于偏移校正,可以不使用。因为经过10次迭代后,随着滑动平均的过程,偏移情况会逐渐消失。

7. AdaDelta/RMSProp

RMSprop是另外一种优化梯度下降速度的算法。考虑一个改变二阶动量计算方法的策略:不累积全部历史梯度,而只关注过去一段时间窗口的下降梯度。这也就是AdaDelta名称中Delta的来历。

每次迭代训练过程中,其权重W和常数项b的更新表达式为:

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

下面简单解释一下RMSprop算法的原理,仍然以下图为例,为了便于分析,令水平方向为W的方向,垂直方向为b的方向。

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

从图中可以看出,梯度下降(蓝色折线)在垂直方向(b)上振荡较大,在水平方向(W)上振荡较小,表示在b方向上梯度较大,即 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 较大,而在W方向上梯度较小,即 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 较小。因此,上述表达式中 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 较大,而 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 较小。在更新W和b的表达式中,变化值 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 较大,而 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 较小。也就使得W变化得多一些,b变化得少一些。即加快了W方向的速度,减小了b方向的速度,减小振荡,实现快速梯度下降算法,其梯度下降过程如绿色折线所示。总得来说,就是如果哪个方向振荡大,就减小该方向的更新速度,从而减小振荡。

还有一点需要注意的是为了避免RMSprop算法中分母为零,通常可以在分母增加一个极小的常数 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

其中, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam ,或者其它较小值。

8. Adam optimization algorithm

我们看到,SGD-M在SGD基础上增加了一阶动量,AdaDelta在SGD基础上增加了二阶动量。把一阶动量和二阶动量都用起来,就是Adam了——Adaptive + Momentum。

其算法流程为:

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

Adam算法包含了几个超参数,分别是: 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 。其中, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 通常设置为0.9, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 通常设置为0.999, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 通常设置为 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 。一般只需要对 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 进行调试。

实际应用中,Adam算法结合了动量梯度下降和RMSprop各自的优点,使得神经网络训练速度大大提高。

————————————————————————————————————————

详解深度学习中的常用优化算法

优化算法通用框架

首先定义:待优化参数:w ,目标函数: f(w),初始学习率 α。

而后,开始进行迭代优化。在每个epoch t:

  1. 计算目标函数关于当前参数的梯度:

    优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

  2. 根据历史梯度计算一阶动量和二阶动量:

    优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

  3. 计算当前时刻的下降梯度:

    优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

  4. 根据下降梯度进行更新:

   优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

掌握了这个框架,你可以轻轻松松设计自己的优化算法。

我们拿着这个框架,来照一照各种玄乎其玄的优化算法的真身。步骤3、4对于各个算法都是一致的,主要的差别就体现在1和2上。

Adam:可能不收敛

回忆一下上文提到的各大优化算法的学习率:

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

其中,SGD和Momentum没有用到二阶动量,因此学习率是恒定的(实际使用过程中会采用学习率衰减策略,因此学习率递减)。

AdaGrad(参见详解深度学习中的常用优化算法)的二阶动量不断累积,单调递增,因此学习率是单调递减的。因此,这两类算法会使得学习率不断递减,最终收敛到0,模型也得以收敛。

但AdaDelta(RMSProp)和Adam则不然。二阶动量是固定时间窗口内的累积,随着时间窗口的变化,遇到的数据可能发生巨变,使得 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam可能会时大时小,不是单调变化。这就可能在训练后期引起学习率的震荡,导致模型无法收敛。

不同算法的核心差异

不同优化算法最核心的区别,就是第三步所执行的下降方向

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

Vt是之前的S,mt是之前的V

这个式子中,前半部分是实际的学习率(也即下降步长),后半部分是实际的下降方向。SGD算法的下降方向就是该位置的梯度方向的反方向,带一阶动量的SGD的下降方向则是该位置的一阶动量方向。自适应学习率类优化算法为每个参数设定了不同的学习率,在不同维度上设定不同步长,因此其下降方向是缩放过(scaled)的一阶动量方向。

————————————————————————————————————————

9. 减小学习因子

减小学习因子 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 也能有效提高神经网络训练速度,这种方法被称为learning rate decay。

Learning rate decay就是随着迭代次数增加,学习因子 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 逐渐减小。下面用图示的方式来解释这样做的好处。下图中,蓝色折线表示使用恒定的学习因子 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam ,由于每次训练 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 相同,步进长度不变,在接近最优值处的振荡也大,在最优值附近较大范围内振荡,与最优值距离就比较远。绿色折线表示使用不断减小的 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam ,随着训练次数增加, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 逐渐减小,步进长度减小,使得能够在最优值处较小范围内微弱振荡,不断逼近最优值。相比较恒定的 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 来说,learning rate decay更接近最优值。

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

Learning rate decay中对 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 可由下列公式得到:

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

其中,deacy_rate是参数(可调),epoch是训练完所有样本的次数。随着epoch增加, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 会不断变小。

除了上面计算 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 的公式之外,还有其它可供选择的计算公式:

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

其中,k为可调参数,t为mini-bach number。

除此之外,还可以设置 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 为关于t的离散值,随着t增加, 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 呈阶梯式减小。当然,也可以根据训练情况灵活调整当前的 优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam 值,但会比较耗时间。

10. The problem of local optima

在使用梯度下降算法不断减小cost function时,可能会得到局部最优解(local optima)而不是全局最优解(global optima)。之前我们对局部最优解的理解是形如碗状的凹槽,如下图左边所示。

但是在神经网络中,local optima的概念发生了变化。准确地来说,大部分梯度为零的“最优点”并不是这些凹槽处,而是形如右边所示的马鞍状,称为saddle point。也就是说,梯度为零并不能保证都是convex(极小值),也有可能是concave(极大值)。特别是在神经网络中参数很多的情况下,所有参数梯度为零的点很可能都是右边所示的马鞍状的saddle point,而不是左边那样的local optimum。

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

类似马鞍状的plateaus会降低神经网络学习速度。Plateaus是梯度接近于零的平缓区域,如下图所示。在plateaus上梯度很小,前进缓慢,到达saddle point需要很长时间。到达saddle point后,由于随机扰动,梯度一般能够沿着图中绿色箭头,离开saddle point,继续前进,只是在plateaus上花费了太多时间。

优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam

总的来说,关于local optima,有两点总结:

  • 只要选择合理的强大的神经网络,一般不太可能陷入local optima
  • Plateaus可能会使梯度下降变慢,降低学习速度

值得一提的是,上文介绍的动量梯度下降,RMSprop,Adam算法都能有效解决plateaus下降过慢的问题,大大提高神经网络的学习速度。