Optimizer

  1. SGD
  2. SGDM
  3. SGD with Nesterov
  4. Adagrad
  5. Adadelta
  6. RMSprop
  7. Adam
  8. Adamax
  9. Nadam
  10. 总结
  11. Reference

SGD

全称Stochastic Gradient Descent, 随机梯度下降。每次选择一个mini-batch,而不是全部样本,使用梯度下降来更新模型参数。

  • 优点:解决了随机小批量样本的问题,
  • 缺点:自适应学习率、容易卡在梯度较小点等问题。

SGDM

SGD with Momentum。在SGD的基础上加入了动量机制。

  • 优点: 参数更新可以保持之前更新趋势,而不会卡在当前梯度较小的点
  • 缺点: 没有考虑对学习率进行自适应更新,所以学习率的选择很关键。

SGD with Nesterov

SGD的问题:容易困在局部最优的沟壑里面震荡。
NAG不计算当前位置的梯度方向,而是计算如果按照累积动量走了一步后的梯度方向。

  • 特点:
    1. 有利于跳出当前局部最优的沟壑,寻找新的最优值。
  • 缺点:
    1. 收敛速度慢。

Adagrad

AdaGrad算法就是将每一个参数的每一次迭代的梯度取平方累加后在开方,用全局学习率除以这个数,作为学习率的动态更新。

  • 特点:
    1. 前期g_t较小,会放大梯度,后期g_t较大,会约束梯度
    2. 适合处理稀疏梯度
  • 缺点:
    1. 仍依赖于人工设置一个全局学习率。
    2. $\eta$设置过大的话,会使regularizer过于敏感,对梯度的调节太大。
    3. 中后期,$g_t$过大,导致$gradient \rightarrow 0$,训练会提前结束。

Adadelta

后面作者做了一些我看不懂的处理,导致不需要依赖于全局学习率了。

  • 特点:
    1. 训练初中期,加速效果很快
    2. 训练后期,反复在局部最小值附近抖动。
    3. 避免了Adagrad中训练提前结束的问题

RMSprop

可以算作Adadelta的一个特例
【略过】

  • 特点:
    1. 仍然依赖于全局学习率
    2. 效果趋于Adagrad与Adadelta之间
    3. 适合处理非平稳目标 — 对于RNN效果很好。

Adam

全程Adaptive Moment Estimation。本质上是带有动量项的RMSprop,利用一阶矩估计和二阶矩估计动态调整每个参数的学习率。

  • 特点:
    1. 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的有点
    2. 对内存需求较小
    3. 通过一阶动量和二阶动量,有效控制学习率步长和梯度方向,防止梯度的震荡和在马鞍点的静止。
  • 缺点:
    1. 可能不收敛。
    2. 可能错过全局最优解: 自适应学习率算法可能会对前期出现的特征太过拟合。后期才出现的特征很难纠正前期的过拟合效果。因为后期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


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。