深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
SGD
每次迭代时,随机选取一小部分训练样本来计算梯度并更新参数。
缺点:
- 选择合适的学习率比较困难。对所有的参数更新使用相同的学习率,对于稀疏数据或特征,有时可能想更新快一些对于不经常出现的特征,对于常出现的特征更新慢一些,这时候SGD就不太能满足要求了。
- SGD容易收敛到局部最优,并且在某些情况下可能被困在鞍点。
Momentum
特点:下降初期,使用上一次参数更新,下降方向一致,乘上较大的能够进行很好的加速;下降中后期时,在局部最小值来回震荡的时候,
,
使得更新幅度增大,跳出陷阱;在梯度改变方向的时候,
能够减少更新。总之,momentum能够在相关方向加速SGD,抑制震荡,从而加快收敛。
Nasterov
特点:在梯度更新时做一个校正,避免前进太快,同时提高灵敏度。Adagrad
Adagrad 其实是对学习率进行了一个约束正则项,前期梯度较小的时候,
较大,能够放大梯度;后期梯度较小的时候,
较小,能够约束梯度;
缺点:依赖于人工设置一个全局学习率;学习率设置过大,会使得过于敏感,对梯度调节太大;中后期,分母上梯度平方的累加和将会越来越大,使
,使得训练提前结束。
Adadelta
Adadelta是对Adagrad的扩展,最初方案依然是对学习率进行自适应约束,但是进行了计算上的简化。Adagrad会累加之前的所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅计算对应的平均值。
特点:训练中初中期,加速效果不错,很快;训练后期,反复在局部最小值附件抖动。Adam
Adamax
Nadam
