机器学习面试之各种优化器的比较

作者: 工程师milter | 来源:发表于2018-05-25 10:00 被阅读214次

    在深度学习中,我们有许多优化器可以选择,但是只有清楚了它们的原理才能更好地选择。

    1、SGD

    随机梯度下降是最经典的方法,其思想如下图所示:


    image.png

    相信大家都很容易理解。
    首先求出m个样本的Loss的和,求这个和对于神经网络参数theta的梯度,并将该梯度除以样本数m,得到平均梯度。然后,利用反向梯度来更新参数theta。
    η_k是学习率,k表示第k次迭代更新。通常,学习率会随着k的增大逐渐减小。

    其他的优化器,都是在这个基础上修改完善得来的。

    2、Momentum

    动量优化器如下图所示:


    image.png

    与SGD相比,在更新参数theta时,除了像SGD一样按照本次的反向梯度更新外,还会:

    将上次更新的反向梯度乘以系数alpha后也更新到参数theta中。

    这相当于:
    上次更新时是往前走的,这次更新的梯度算出来是往左走,这变化太剧烈了,所以我们来做个折中,往左前方走。感觉上像是上次更新还带有一定的惯性。

    3、Nesterov Momentum

    Nesterov Momentum如下图所示:

    image.png

    该优化器相对于Momentum,唯一不同的是计算反向梯度的时机。Momentum计算的是当前位置的反向梯度,Nesterov Momentum 计算的是按照上次更新方向走一小步后的反向梯度。

    这相当于:
    上次是往前走了10米,这次我先往前走上2米,然后再来观察下一步怎么走。可以认为是分两步更新了theta。

    4、AdaGrad

    AdaGrad相当于增加了一个学习率递减系数:


    image.png

    特殊之处在于这个递减系数由之前所有更新的反向梯度的平方的和来决定。可见,AdaGrad的学习率始终是在减小。
    它的优点在于:上图中的theta可以某一个具体的参数,而不是所有参数组成的向量。当theta是某个具体参数时,可以发现,这样计算学习率递减系数相当于:
    如果某个参数在这一步中梯度非常大,那么这一步中学习率衰减就要大一些,好比坡太陡,往下走时必须小步走,步子一大就滚下去了。如果某个参数在这一步中梯度非常小,那么,这一步中学习率衰减就小一些。

    但它的问题在于,衰减系数累积了所有更新步骤中的梯度,我们可能更希望考察最近几步中的梯度来决定衰减系数。这就是RMSProp。

    5、RMSProp

    如下图所示:


    image.png

    随着更新进行,越早时候计算的梯度对计算衰减系数的影响越小,这种影响的减小速度就是decay_rate的指数衰减速度。

    6、Adam

    Adam综合了Momentum的更新方向策略和RMProp的计算衰减系数策略,如下图所示:


    image.png

    7、总结

    可见,虽然优化器比较多,但是它们之间是有着内在关联的,存在互相借鉴和改进的关系。最后,用图来表示不同的优化器的效果:

    https://i.stack.imgur.com/qAx2i.gif
    https://i.stack.imgur.com/1obtV.gif

    相关文章

      网友评论

      • ee5afbd2c3fd:随机梯度下降不是每次下降单个样本的梯度吗?
        工程师milter:@空林夜鬼 也可以是一批样本的梯度哈
      • 你我他wzb:一个好的下降方向,不应该是越陡让他下降的更快些吗?而越平缓的让他下降慢吗?如果不是这样的话,不是很容易跳出极值的吗?
      • b52fda434663:另外最后的gif图是使用啥画的呢?好厉害的感觉!
        工程师milter:@skunk007 是网上找的😂
      • b52fda434663:lz的字好漂亮啊,用啥app写的啊

      本文标题:机器学习面试之各种优化器的比较

      本文链接:https://www.haomeiwen.com/subject/aybejftx.html