Adam优化器杂谈

文章来自:微信公众号【机器学习炼丹术】算法

最经常使用的Adam优化器,有着收敛速度快、调参容易等优势,可是也存在常常被人吐槽的泛化性问题和收敛问题。微信

所以,在不少大佬的代码中,依然会使用传统的SGD+momentum的优化器。机器学习

关于两个优化器的比较,仁者见仁智者见智,能够看一下这篇文章,有简单的关于这两个优化器的代码实现和效果比较:
Pytorch的SGD,SGDM,Adam,RAdam的代码实现学习

这篇文章就随便的谈一谈下面的问题,来让你们扩展一下知识:测试

  • Adam被攻击的泛化问题和收敛问题;

Adam是什么

对机器学习有了解的朋友,应该对Adam优化器不陌生了。大致来讲就是Momentum + Adagrad + RMSProp的结合。优化

【若是须要的话,以后能够简单易懂的通俗讲讲各类类型的优化器的算法】spa

从Adam和SGDM中就能够得知,Momentum是一个很好的设计。.net

Adam的两个吐槽

泛化问题

在讨论模型泛化问题的时候,咱们会但愿模型找到的极小值(收敛位置),是一个比较平缓、不陡峭的位置!,缘由看下图:
![](http://helloworld2020.net/wp-...设计

左边的那个收敛点是一个比较平缓的点,而右边的是一个很是陡峭很是sharp的收敛点。而训练集和测试集虽然要求同分布,可是其实仍是会有微小的差异。blog

对于陡峭的收敛点,训练集的损失可能会很小,可是测试集的损失极可能就很大。而平坦的收敛点就不会这样。这就是泛化问题,有的时候也被当作过拟合现象。

可是咱们是也没法直接证实Adam老是找到sharp的极小值。不过不少很论或多或少都只指出了Adam在测试的时候error会较大。

这里有一张图,能够看到,虽然Adam在训练集中收敛速度最快,可是测试集的效果并非很是的好。

收敛问题

Adam在某些状况下会出现没法收敛的状况,最著名的关于这个问题的Adam的吐槽就是这个论文:
2018 ICLR的best paper:On the Convergence of Adam and Beyond

可是这个问题其实并非咱们这种人常常会遇到的,反而泛化问题是一个真正的困扰。

改进Adam

learning rate scheduling

大佬们常常用的一个learning rate scheduling方案就是warn-up+decay。

【warn-up】

是指不要一开始用高的learning-rate,应该要从低的慢慢增大到base-learning rate。学习率从小到大。

【decay】

随着optimization的步数的增加,逐渐下降learning rate。

Decay的部分其实很常见,全部的人都会用,可是warn-up其实就有点诡异了,在ResNet的论文中其实能够看到这个。

RAdam

Radam 是在warm up的时候提出了一些有效的策略。

相关文章
相关标签/搜索