深度学习—优化算法对比

1、优化算法

  • SGD:随机梯度下降
  • SGD+Momentum: 基于动量的SGD(在SGD基础上做过优化)
  • SGD+Nesterov+Momentum:基于动量,两步更新的SGD(在SGD+Momentum基础上做过优化)
  • Adagrad:自适应地为各个参数分配不同学习速率
  • Adadelta: 针对Adagrad问题,优化过的算法(在Adagrad基础上做过优化)
  • RMSprop:对于循环神经网络(RNNs)是最好的优化器(在Adadelta基础上做过优化)
  • Adam:对每个权值都计算自适应的学习速率(在RMSprop基础上做过优化)
  • Adamax:针对Adam做过优化的算法(在Adam基础上做过优化)

  (1)SGD:随机梯度下降

  指mini-batch gradient descent,SGD就是每一次迭代计算mini-batch的梯度,然后对参数进行更新,是最常见的优化方法了

  缺点:选择合适的learning rate比较困难 - 对所有的参数更新使用同样的learning rate。对于稀疏数据或者特征,有时我们可能想更新快一些对于不经常出现的特征,对于常出现的特征更新慢一些,这时候SGD就不太能满足要求了;

   SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点。

  (2)momentum

  是模拟物理里动量的概念,积累之前的动量来替代真正的梯度。momentum项能够在相关方向加速SGD,抑制振荡,从而加快收敛。

  (3)Adam(Adaptive Moment Estimation)

  Adam(Adaptive Moment Estimation)本质上是带有动量项的RMSprop,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

  优点:

  • 结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点
  • 对内存需求较小
  • 为不同的参数计算不同的自适应学习率
  • 也适用于大多非凸优化 - 适用于大数据集和高维空间

2、如何选择

  整体来讲,Adam 是最好的选择。

  很多论文里都会用 SGD,没有 momentum 等。SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点。

  如果需要更快的收敛,或者是训练更深更复杂的神经网络,需要用一种自适应的算法。

 

posted @ 2018-05-14 12:00  深度机器学习  阅读(762)  评论(0编辑  收藏  举报