深度学习最全优化方法总结比较
这篇文章已经比较清楚了, 这篇笔记主要帮助理解和记忆各种算法, 无数学公式。
以前经常觉得, 优化算法名字好难记, 所以顺便把自己理解的名字的组合也写进来。
:) 我承认标题党了, 今天正好又要看一遍优化算法, 所以干脆沉下心来, 尽可能记住这几种优化算法, 最好的方式就是用一句话来表达出这些优化算法。
SGD
没什么好说的
Momentum
如其名, 动量, 把历史改变作为动量累加到当前梯度上。
动量+梯度
Nesterov
也是动量, 先动量, 根据动量后的值计算梯度更新。
先动量, 求跳跃后的梯度
Adagrad
用所有梯度平方和后开根号除当前梯度, 来反向调节更新
我猜是为了防止更新率过大的时候, 防止震荡;更新率过小的时候, 让梯度加速, 当然也看的出来很多问题, 至少不该使用所有的以前的梯度, 这样, 越训练到后面, 越慢, 到最后, 受到以前梯度平方的影响, 更新就非常慢了
adapt + gradient descent
适合处理稀疏梯度
Adadelta
以前的梯度平方衰减后累加开根号后来除现在的梯度
证明了我对adagrad的理解, 无衰减累加梯度**2会过多的影响现在的取值, 加上衰减后, 以前的梯度的影响会渐渐消失, 越近的梯度对现在的影响越大。
Adagrad delta版本
现在的默认参数, 估计针对是归一化数据的, 所以也证明了, 对数据归一化非常重要, 不然咋个以前的梯度都较大的话, 现在还是训练越来越慢。
- 训练初中期,加速效果不错,很快
- 训练后期,反复在局部最小值附近抖动
RMSprop
Adadelta的变体
其实没咋个看懂变体后公式中E的含义, 猜测主要简化了计算, 并且只计算最近一次的梯度变化么?
RMS均方根的意思
- RMSprop算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间
- 适合处理非平稳目标 - 对于RNN效果很好
Adam
带有动量项的RMSprop
- 适用于大数据集和高维空间
Ada + Momentum
Adamax
带有学习率上限的Adam
Nadam
带有Nesterov动量项的Adam
- 一般而言,在想使用带动量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。
记录下《[深度学习最全优化方法总结比较]https://zhuanlan.zhihu.com/p/22252270)
》一文中作者的经验:
- Adadelta,RMSprop,Adam是比较相近的算法,在相似的情况下表现差不多。
- 在想使用带动量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果