深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)

SGD

每次迭代时,随机选取一小部分训练样本来计算梯度并更新参数。
缺点:

  • 选择合适的学习率比较困难。对所有的参数更新使用相同的学习率,对于稀疏数据或特征,有时可能想更新快一些对于不经常出现的特征,对于常出现的特征更新慢一些,这时候SGD就不太能满足要求了。
  • SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点。

    Momentum

    特点:下降初期,使用上一次参数更新,下降方向一致,乘上较大的优化方法(SGD\Adagrad\Adadelta\Adam\Adamax\Nadam) - 图1能够进行很好的加速;下降中后期时,在局部最小值来回震荡的时候,优化方法(SGD\Adagrad\Adadelta\Adam\Adamax\Nadam) - 图2优化方法(SGD\Adagrad\Adadelta\Adam\Adamax\Nadam) - 图3使得更新幅度增大,跳出陷阱;在梯度改变方向的时候,优化方法(SGD\Adagrad\Adadelta\Adam\Adamax\Nadam) - 图4能够减少更新。总之,momentum能够在相关方向加速SGD,抑制震荡,从而加快收敛。

    Nasterov

    特点:在梯度更新时做一个校正,避免前进太快,同时提高灵敏度。

    Adagrad

    Adagrad 其实是对学习率进行了一个约束正则项 优化方法(SGD\Adagrad\Adadelta\Adam\Adamax\Nadam) - 图5,前期梯度较小的时候,优化方法(SGD\Adagrad\Adadelta\Adam\Adamax\Nadam) - 图6较大,能够放大梯度;后期梯度较小的时候,优化方法(SGD\Adagrad\Adadelta\Adam\Adamax\Nadam) - 图7较小,能够约束梯度;
    缺点:依赖于人工设置一个全局学习率;学习率设置过大,会使得优化方法(SGD\Adagrad\Adadelta\Adam\Adamax\Nadam) - 图8过于敏感,对梯度调节太大;中后期,分母上梯度平方的累加和将会越来越大,使优化方法(SGD\Adagrad\Adadelta\Adam\Adamax\Nadam) - 图9,使得训练提前结束。

    Adadelta

    Adadelta是对Adagrad的扩展,最初方案依然是对学习率进行自适应约束,但是进行了计算上的简化。Adagrad会累加之前的所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅计算对应的平均值。
    特点:训练中初中期,加速效果不错,很快;训练后期,反复在局部最小值附件抖动。

    Adam

    Adamax

    Nadam