深度学习常用优化方法总结——SGD,Momentum,AdaGrad,RMSProp,Adam

在深度学习中,优化方法关系到梯度的计算和模型参数的更新,是深度神经网络模型训练中必不可少的一部分,好的优化方法可以帮助模型训练更快更好的收敛,因此本文总结了实际开发过程中常用的优化方法,供大家对比参考。

SGD(stochastic gradient descent)
随机梯度下降法,每一步迭代训练在训练集中选择一个样例,基于该样例计算梯度并更新模型参数。
优点:训练收敛速度快,可以在线更新模型,有几率跳出局部最优达到更好的局部最优或者全局最优。
缺点:不稳定,容易陷入局部最优,容易困在鞍点。

改进方法——Mini-batch Gradient Descent
小批量梯度下降:每次从所有训练数据中取一个子集(mini-batch) 用于计算梯度。
该方法相比于SGD更加稳定,在实际训练过程中更加常用。

此外,还有Batch Gradient Descent,每次迭代用整个训练集的数据计算梯度。
虽然在损失函数为凸函数是可以保证全局最优,但是每次计算用到全部训练数据会导致梯度下降缓慢,训练集较大时会占用很多内存,并且不允许在线更新买模型。因此,该方法并不常用。

Momentum
动量优化法,相比于SGD仅仅关注当前的梯度,该方法引入了动量向量的概念,参数沿着动量向量进行更新,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。公式表示如下图所示,dW与db分别表示当前的权重梯度和偏移量梯度,其中β取值越大,过去的梯度影响越大,梯度下降更加顺滑,但是β太大也不行,一般取到0.9。

总的来说,该方法从梯方面进行了优化。

Adagrad
该方法使梯度在各个维度上按比例地缩小,也就是降低学习率,随着迭代次数的增加,学习率会越来越小,并且在某个维度上越陡峭,学习率降低得就越快,在这个维度上越平缓,学习率降低得就越慢。所以,该方法非常适合处理稀疏数据。公式表示如下图所示,学习率η除以了过往梯度的平方和的开方。

随着训练迭代轮数的增加,学习率会越来越小,后期可能学不到任何东西,导致训练提前结束。
总的来说,该方法是从学习率的角度进行了优化。

RMSProp
Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算对应的平均值,因此可缓解Adagrad算法学习率下降较快的问题。公式表示如下图所示。

总的来说,该方法也是在更新学习率,只是更新的方式更加平缓。

Adam(Adaptive Moment Estimation)
该方法的基本思想就是将Momentum和RMSprop结合起来形成的一种适用于不同深度学习结构的优化算法。Adam的优点主要在于经过偏差修正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。公式表示如下图所示。

posted @ 2022-01-22 13:51  熊猫帅帅  阅读(823)  评论(0)    收藏  举报