神经网络——参数更新方法 / 优化方法

优化方法

  • BGD(Batch Gradient Descent)

BGD,批量梯度下降算法。采用整个训练集的数据来计算损失函数对参数的梯度。

  • SGD(Stochastic Gradient Descent)

SGD,随机梯度下降算法。减少了每次迭代的计算开销,在随机梯度下降的每次迭代中,随机均匀采样的一个样本。和BGD的一次用所有数据计算梯度相比,SGD每次更新时对采样的样本进行梯度更新。对于很大的数据集来说,可能会有相似的样本,这样BGD在计算梯度时会出现冗余。而SGD一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。如果样本量很大的情况,那么可能只用其中部分的样本,就已经将theta迭代到最优解了。但如果使用上面的批量梯度下降,则需要迭代完所有的样本。缺点是SGD的噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向,所以可能会发生震荡。

  • MBGD(Mini-Batch Gradient Descent)

MBGD,小批量梯度下降算法。每次随机均匀采样一个由训练数据样本组成的小批量数据,即n个样本进行计算。并且在梯度下降过程中学习率可以自我衰减,这样它就可以降低参数更新时的方差,收敛更稳定。但是对于非凸函数,MBGD容易被困在局部最小值或鞍点处,而且对所有的参数应用同样的学习率,这是不合适的。当批量大小为1时,该算法即SGD;当批量大小等于训练数据样本数时,该算法即BGD。当批量较小时,每次迭代中使用的样本少,这会导致并行处理和内存使用效率变低。这使得在计算同样数目样本的情况下比使用更大批量时所花时间更多。当批量较大时,每个小批量梯度里可能含有更多的冗余信息。为了得到较好的解,批量较大时比批量较小时需要计算的样本数目可能更多,例如增大迭代周期数。

  • 动量法(SGD with Momentum)

在动量法中,自变量在各个方向上的移动幅度不仅取决于当前梯度,还取决于过去的各个梯度在各个方向上是否一致。动量法对参数的迭代如下:

这样可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。参数的迭代可变形为:

相比于SGD,动量法在每次随机均匀采样时,参数的更新量近似于将SGD对应的最近1/(1-\gamma )次采样的更新量做了指数加权平均后再除以1-\gamma\gamma为超参数一般取0.9左右。

  • AdaGrad(Adaptive gradient algorithm)

上面介绍的优化算法中,目标函数的每一个参数在同一抽样批次中都使用同一个学习率来进行迭代。在动量法中如果两个参数梯度值有很大差别时,需要选择足够小的学习率使得梯度值较大的参数不发散。但这样会导致梯度值较小的参数迭代过慢。动量法依赖指数加权平均使得参数的更新方向更加一致,从而降低发散的可能。而AdaGrad算法则根据每个参数梯度值的大小来调整各个参数的学习率,从而避免统一的学习率难以适应所有维度的问题。也因此对于稀疏的数据它的表现很好,很好地提高了SGD的鲁棒性。AdaGrad算法将SGD每一次数据随机采样的参数梯度按元素平方后累加到一个变量s,将这个变量初始化为0:

其中t代表采样的批次,接着将目标函数中每个参数的学习率通过按元素计算重新调整一下:

其中\eta是学习率,\varepsilon是为了维持数值稳定性而添加的常数。后面的开方、除法和乘法的运算都是按元素运算的。这些按元素运算使得目标函数中每个参数都分别拥有自己的学习率。累加变量s出现在学习率的分母中,因此,如果目标函数中某个参数的偏导数一直都较大,那么该参数的学习率将下降较快;反之,如果目标函数中某个参数的偏导数一直都较小,那么该元素的学习率将下降较慢。但是当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。

  • RMSProp

这个算法是为了解决AdaGrad算法的问题而提出。将指数加权平均应用到AdaGrad的参数迭代公式中:

RMSProp的状态变量s可以看作最近1/(1-\gamma )个抽样批次的随机梯度平方项的指数加权平均。如此一来,参数的学习率在迭代过程中就不再一直降低(或不变)。

  • Adam算法

Adam算法在RMSProp算法基础上对批量随机梯度也做了指数加权平均:

需要注意的是,当t较小时(t为随机抽样的批次),过去各时间步小批量随机梯度权值之和会较小。例如,当\beta _{1}=0.9时,v_{1}=0.1\bigtriangledown f(x_{0})。所以需要加入了偏差修正:

同样RMSProp中对随机梯度平方项的指数加权平均也需要加入偏差修正:

使用偏差修正后的变量将模型中每个参数的学习率通过按元素运算重新调增:

其中\varepsilon是为了维持数值稳定性而添加的常数。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值