查看: 1424|回复: 1

深度学习中的优化器

[复制链接]

665

主题

1234

帖子

6566

积分

xdtech

Rank: 5Rank: 5

积分
6566
发表于 2020-3-4 16:28:08 | 显示全部楼层 |阅读模式
  • 深度学习的优化器有许多种类,同损失函数一样,我们只有清楚了它们的原理才能更好地选择。鉴于优化器的重要性以及难度,本文将不定时更新最新理解思路亦或最新优化器……
Batch Gradient Descent  (BGD) 批梯度下降
  • 梯度更新规则:每次更新参数时使用全部训练样本。
  • 优点:理想状态下经过足够多的迭代后可以达到全局最优。( 对于凸函数可以收敛到全局极小值,对于非凸函数可以收敛到局部极小值。)
  • 缺点:一次更新中,需要对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手。
Stochastic Gradient Descent  (SGD) 随机梯度下降
  • 优化方式:每次更新参数时随机选用一个样本。
  • 优点:相比于 BGD 训练速度更快,更快收敛。
  • 缺点:随机梯度下降会带来一定的问题,因为计算得到的并不是准确的一个梯度,SGD 的噪音较 BGD 要多,使得 SGD 并不是每次迭代都向着整体最优化方向。 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。BGD 可以收敛到局部极小值,当然 SGD 的震荡可能会跳到更好的局部极小值处。当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。
Mini-batch Gradient Descent (MBGD) 小批次梯度下降
  • 优化方式:每次更新参数时利用一小批样本。
  • 优点:相比于 BGD 训练速度更快,相比于 SGD 更加稳定。
  • 缺点:当我们采用小的学习率的时候,会导致网络在训练的时候收敛太慢;当我们采用大的学习率的时候,会导致在训练过程中优化的幅度跳过函数的范围,也就是可能跳过最优点。对于非凸函数,还要避免陷于局部极小值处,或者鞍点处。
通过前面的 SGD 算法我们知道,我们的学习速率太大、太小都会影响到我们模型的迭代,所以我们期望可以有更加科学的方法帮助我们自动的改变 learning rate 的大小。
Momentum
  • 优化方式:计算在梯度下降的方向上,计算一个指数加权平均,利用这个来代替权重更新的方法。通俗一点的理解就是“如果梯度下降显示,我们在一直朝着某一个方向在下降的话,我让这个方向的的学习速率快一点,如果梯度下降在某一个方向上一直是摆来摆去的,那么就让这个方向的学习速率慢一点”。
  • 优点:加速了横轴下降的速度,并减缓了纵轴的摆动的频率,在最终的训练过程中,步伐迈的更大,同时更加更准确。




    image.png
AdaGrad
  • 优化方式:它根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,从而避免统一的学习率难以适应所有维度的问题 。在梯度下降的方向上,我们会有一个变量 grad_squared 存储在该方向上的变化的平方的累积。单个维度更新方式如下:




    image.png





    image.png
其实这里有个问题可以探讨:我们从上面更新公式可以发现,当前微分值越大,参数变化值越大。当前微分值越大,分母项越大,参数变化值越小。如何解释矛盾分母项的意义或者这样做的目的?
解释:首先,我们要知道,最优的步长不仅和当前函数的一次微分值成正比,而且还和当前函数的二次微分值成反比。由于计算二次微分代价较高,我们这里其实就是想用分母项来预估我们当前函数的二次微分值。




image.png





image.png

  • 优点:每个维度有各自的 learning rate , 避免统一的学习率难以适应所有维度的问题。
  • 缺点:grad_squared 是一个一直累积的过程,那么积少成多,哪怕是在一些方向上,它的波动一直很小,但是由于是不停的迭代增加, grad_squared 最终也会变得很大,导致在训练的后期,任意一个方向上,梯度下降就走不下去了。
RMSProp
  • 优化方式:RMSProp 基于 AdaGrad,进行了一些小小的改动,也解决了我们上面提出来的,在随着训练时间增长,AdaGrad 的步伐会变得很小的问题。RMSProp 在计算 grad_squared 的时候,加上了一个 decay (衰减率)的东西,这样造成的效果即是,既保留了 AdaGrad 的特性,又不会一直过分增加 grad_squared 导致最后阻力过大。
Adam
  • 优化方式:我们看到,Momentum 在 SGD 基础上增加了一阶动量,RMSProp 在 SGD 基础上增加了二阶动量。把一阶动量和二阶动量都用起来,就是Adam了——Adaptive + Momentum。当然 Adam 在两者的基础之上还对 mean 和 variance 做了修正。
总结
自适应学习率方法中,RMSprop 是 AdaGrad 的延伸,它解决了其学习速度急剧下降的问题,Adam 最后为 RMSprop 增加了偏差修正和动力。就此而言,RMSprop 和 Adam 是非常相似的算法,在相似的情况下,偏差修正有助于 Adam 在优化结束时略微优于 RMSprop ,因为梯度变得更加稀疏。就目前而言,Adam 可能是最好的整体选择。


回复

使用道具 举报

665

主题

1234

帖子

6566

积分

xdtech

Rank: 5Rank: 5

积分
6566
 楼主| 发表于 2020-3-4 16:28:49 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表