400-123-4657

公司动态 分类
深度学习中优化器的选择发布日期:2024-05-06 浏览次数:

首先,我们介绍一下优化器的概念:

对于优化器来说,优化的目标是通过改变网络模型中的参数θ(是一个集合,θ1、θ2、θ3 ......)来使目标函数为损失函数L = 1/N ∑ Li?(每个样本损失函数的叠加求均值)最小。这个损失函数L变量就是θ,其中L中的参数是整个训练集。

换句话说,目标函数(损失函数)是通过整个训练集来确定的,当L对于θ的梯度为零,即对θ每个分量求偏导数,带入训练集全集,使导数为零。

1.SGD(随机梯度下降)

随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况,那么可能只用其中部分的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。缺点是SGD的噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向所以虽然训练速度快,但是准确度下降,并不是全局最优虽然包含一定的随机性,但是从期望上来看,它是等于正确的导数的。

SGD的缺点:

SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。但是?SGD 的震荡可能会跳到更好的局部极小值处。

2.BGD(批量梯度下降)

由于这种方法是在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手,而且不能投入新数据实时更新模型。

Batch gradient descent 对于凸函数可以收敛到全局极小值,对于非凸函数可以收敛到局部极小值

3.Momentum(动量)

就好比一个小球从山上滚下山下时,没有阻力的话,它的动量会越来越大,但是如果遇到了阻力,速度就会变小。
加入的这一项,可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。

超参数设定值: ?一般 γ 取值 0.9 左右。

但是这个优化器的缺点也是显而易见的:

这种情况相当于小球从山上滚下来时是在盲目地沿着坡滚,如果它能具备一些先知,例如快要上坡时,就知道需要减速了的话,适应性会更好。

4.Adagrad (自适应地为各个参数分配不同学习率的算法)

?这个算法就可以对低频的参数做较大的更新对高频的做较小的更新,也因此,对于稀疏的数据它的表现很好,很好地提高了 SGD 的鲁棒性,例如识别 Youtube 视频里面的猫,训练 GloVe word embeddings,因为它们都是需要在低频的特征上有更大的更新。

  1. 从AdaGrad算法中可以看出,随着算法不断迭代,r会越来越大,整体的学习率会越来越小。所以,一般来说AdaGrad算法一开始是激励收敛,到了后面就慢慢变成惩罚收敛,速度越来越慢。
  2. 在SGD中,随着梯度的增大,我们的学习步长应该是增大的。但是在AdaGrad中,随着梯度g的增大,我们的r也在逐渐的增大,且在梯度更新时r在分母上,也就是整个学习率是减少的,这是为什么呢?这是因为随着更新次数的增大,我们希望学习率越来越慢。因为我们认为在学习率的最初阶段,我们距离损失函数最优解还很远,随着更新次数的增加,越来越接近最优解,所以学习率也随之变慢。
  3. 经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。AdaGrade在某些深度学习模型上效果不错,但不是全部。

5.RMSprop (解决 Adagrad 学习率急剧下降)

使用的是指数加权平均,旨在消除梯度下降中的摆动,与Momentum的效果一样,某一维度的导数比较大,则指数加权平均就大,某一维度的导数比较小,则其指数加权平均就小,这样就保证了各维度导数都在一个量级,进而减少了摆动。允许使用一个更大的学习率η。

超参数设定值:建议设定 γ 为 0.9, 学习率 η 为 0.001

5.Adam(相当于 RMSprop + Momentum)

除了像 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,其实Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum,所以也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值。它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

Adam的特点:

  • 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
  • 对内存需求较小
  • 为不同的参数计算不同的自适应学习率
  • 也适用于大多非凸优化 - 适用于大数据集和高维空间

最后,到底应该如何选择优化算法呢

  • 如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam,不用手动调节,而且最好采用默认值。
  • RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。
  • 如果在意更快的收敛,并且需要训练较深较复杂的网络时,推荐使用学习率自适应的优化方法。
  • 随着梯度变的稀疏,Adam 比 RMSprop 效果会好。
  • 很多论文里都会用 SGD,而没有使用momentum 等,因为SGD的结果更加可靠。可是,SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点。

整体来讲,Adam 是最好的选择。

Copyright © 2012-2018 天宏-天宏娱乐国际科技集团 版权所有 非商用版本

琼ICP备xxxxxxxx号

平台注册入口