SGD
全称Stochastic Gradient Descent, 随机梯度下降。每次选择一个mini-batch,而不是全部样本,使用梯度下降来更新模型参数。
- 优点:解决了随机小批量样本的问题,
- 缺点:自适应学习率、容易卡在梯度较小点等问题。
SGDM
SGD with Momentum。在SGD的基础上加入了动量机制。
- 优点: 参数更新可以保持之前更新趋势,而不会卡在当前梯度较小的点
- 缺点: 没有考虑对学习率进行自适应更新,所以学习率的选择很关键。
SGD with Nesterov
SGD的问题:容易困在局部最优的沟壑里面震荡。
NAG不计算当前位置的梯度方向,而是计算如果按照累积动量走了一步后的梯度方向。
- 特点:
- 有利于跳出当前局部最优的沟壑,寻找新的最优值。
- 缺点:
- 收敛速度慢。
Adagrad
AdaGrad算法就是将每一个参数的每一次迭代的梯度取平方累加后在开方,用全局学习率除以这个数,作为学习率的动态更新。
- 特点:
- 前期g_t较小,会放大梯度,后期g_t较大,会约束梯度
- 适合处理稀疏梯度
- 缺点:
- 仍依赖于人工设置一个全局学习率。
- $\eta$设置过大的话,会使regularizer过于敏感,对梯度的调节太大。
- 中后期,$g_t$过大,导致$gradient \rightarrow 0$,训练会提前结束。
Adadelta
后面作者做了一些我看不懂的处理,导致不需要依赖于全局学习率了。
- 特点:
- 训练初中期,加速效果很快
- 训练后期,反复在局部最小值附近抖动。
- 避免了Adagrad中训练提前结束的问题
RMSprop
可以算作Adadelta的一个特例
【略过】
- 特点:
- 仍然依赖于全局学习率
- 效果趋于Adagrad与Adadelta之间
- 适合处理非平稳目标 — 对于RNN效果很好。
Adam
全程Adaptive Moment Estimation。本质上是带有动量项的RMSprop,利用一阶矩估计和二阶矩估计动态调整每个参数的学习率。
- 特点:
- 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的有点
- 对内存需求较小
- 通过一阶动量和二阶动量,有效控制学习率步长和梯度方向,防止梯度的震荡和在马鞍点的静止。
- 缺点:
- 可能不收敛。
- 可能错过全局最优解: 自适应学习率算法可能会对前期出现的特征太过拟合。后期才出现的特征很难纠正前期的过拟合效果。因为后期Adam的学习率太低,影响了有效的收敛。
Adamax
是Adam的一种变体。
计算上相对于Adam更简单。
Nadam
Adam with Nesterov.
Nadam对学习率有了更强的约束,同时对梯度的更新也有更直接的影响。
一般而言,在想使用带动量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。
总结
Optimizer千变万化,本质还是在梯度方向和步长两个层面进行改进,都是SGD with different learning rate scheduler.
2D展示
3D展示(马鞍)
3D展示
Adam优化器的不足,参考AdamW and Super-convergence is now the fastest way to train neural nets,对应的中文翻译
Reference
机器学习2 — 优化器
深度学习优化方法-AdaGrad
深度学习最全优化方法总结比较
优化器
AdamW and Super-convergence is now the fastest way to train neural nets
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。