最常见的优化器
- BGD(Batch Gradient Descent)
一次更新计算整个数据集的梯度,计算慢,收敛速度慢。但是下降方向为总体平均梯度,能得到一个全局最优解。 - SGD(Stochastic Gradient Descent)
每次更新选取一个样本计算梯度,训练速度快,但是每次迭代并不是朝着整体最优的方向,导致梯度下降波动大,容易从一个局部最优跳到另一个局部最优。 - MBDG(Mini-Batch Gradient Descent)
每次更新利用一小批样本,即保证了训练的速度,又能保证最后收敛的准确率。
Momentum
参数更新时在一定程度上保留之前更新的方向,同时又利用当前batch的梯度微调最终的更新方向,简言之就是通过积累之前的动量来加速当前的梯度。(就像一个小球从山上滚落,没有阻力的话,动量会越来越大,但是如果遇到了阻力,速度会变小)。
有助于跳出鞍点。
AdaGrad(Adaptive gradient algorithm)
动态的调整学习率,避免人为的介入,根据需要让程序自己动态地设置学习率。例如对于遇到鞍点的情况,参数变化很小,基本不会改变,那么这个方法就会设置一个较大的学习率,跨过鞍点。
缺点:
- 它的缺点是分母会不断积累,分母上梯度累加的平方和会越来越大,这样学习率就会收缩并最终会变得非常小,使得参数更新量趋近于0,使得训练提前结束,无法学习
RMSProp
RMSProp算法修改了AdaGrad的梯度平方和累加为指数加权的移动平均,使得其在非凸设定下效果更好。
Adam(Adaptive Moment Estimation)
这个算法是另一种计算每个参数的自适应学习率的方法。相当于 RMSprop + Momentum
实践表明,Adam 比其他适应性学习方法效果要好。
特点:
- Adam梯度经过偏置校正后,每一次迭代学习率都有一个固定范围,使得参数比较平稳。
- 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
- 为不同的参数计算不同的自适应学习率
- 也适用于大多非凸优化问题——适用于大数据集和高维空间。