Lookahead、LazyOptimizer、MaskedAdamOptimizer、AdaBound
2019年08月02日 17:15:19 sliderSun 阅读数 103
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_37947156/article/details/98208772
AdaBound算法:像Adam一样快,又像SGD一样好的优化器
论文地址:
https://openreview.net/pdf?id=Bkg3g2R9FX
GitHub地址:(Pytorch)
https://github.com/Luolc/AdaBound
GitHub地址:(Tensorflow)
https://github.com/taki0112/AdaBound-Tensorflow
SGD的缺点:
SGD现在后期调优时还是经常使用到,但SGD的问题是前期收敛速度慢。SGD前期收敛慢的原因: SGD在更新参数时对各个维度上梯度的放缩是一致的,并且在训练数据分布极不均很时训练效果很差。而因为收敛慢的问题应运而生的自适应优化算法Adam、AdaGrad、RMSprop 等,但这些自适应的优化算法虽然可以在训练早期展现出快速的收敛速度,但其在测试集上的表现却会很快陷入停滞,并最终被 SGD 超过。
Adam等自适应学习率算法缺点:
这就是目前很多大牛任然喜欢SGD的原因。这篇文章对于Adam后期的毛病进行了分析,原因出在自适应方法训练后期不稳定的极端学习率。换句话说,就是自适应学习率训练到后期,学习率出现极端情况,更新参数时有些维度上学习率特别大,有些维度学习率特别小。
采样参数的学习率,每个单元格包含一个通过对学习率进行数值运算得到的值,颜色越浅代表学习率越小。
我们可以看到,当模型接近收敛时,学习率中有大量的极端值(包含许多小于 0.01 和大于 1000 的情况)。这一现象表明在实际训练中,极端学习率是实际存在的。
发现这个问题怎么解决?如何融合上面两种方法的优点?
那就对自适应学习率加一下限制吧。具体做法是对学习率进行动态裁剪,在这一设置下,在训练早期由于上下界对学习率的影响很小,算法更加接近于 Adam;而随着时间增长裁减区间越来越收紧,模型的学习率逐渐趋于稳定,在末期更加贴近于 SGD。AMSBound 可以对 AMSGrad 采用类似的裁剪得到。