35

Adam优化器杂谈

 4 years ago
source link: https://segmentfault.com/a/1190000023456730
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

因此,在很多大佬的代码中,依然会使用传统的SGD+momentum的优化器。

关于两个优化器的比较,仁者见仁智者见智,可以看一下这篇文章,有简单的关于这两个优化器的代码实现和效果比较:

Pytorch的SGD,SGDM,Adam,RAdam的代码实现

这篇文章就随便的谈一谈下面的问题,来让大家扩展一下知识:

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

Adam是什么

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

2qMFFzE.jpg!web

【如果需要的话,之后可以简单易懂的通俗讲讲各种类型的优化器的算法】

从Adam和SGDM中就可以得知,Momentum是一个很好的设计。

Adam的两个吐槽

泛化问题

在讨论模型泛化问题的时候, 我们会希望模型找到的极小值(收敛位置),是一个比较平缓、不陡峭的位置! ,原因看下图:

![]( http://helloworld2020.net/wp-...

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

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

但是我们是也无法直接证明Adam总是找到sharp的极小值。不过很多很论或多或少都只指出了Adam在测试的时候error会较大。

7zim2eJ.jpg!web

这里有一张图,可以看到,虽然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的时候提出了一些有效的策略。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK