作者 | 赛文

编辑 | 陈老师

刚刚有两个年轻人问我,Adam老师,发生肾么事了?

我说肿么了?

塔焖啪的一下发来了一张截图,很快噢!

嗷!源赖氏佐田,有个新算法,被人号称又要超越我了,俺又要退休了......

陈老师说婷婷! 上面的全删除,这篇文章咱正常写,小心被消费。

好的陈老师

,已经删了。

近日一篇NeurIPS 2020 Spotlight论文引起了深度学习社区的关注,这篇论文来自耶鲁大学、伊利诺伊大学香槟分校等研究机构,提出了一种全新的深度学习优化器AdaBelief,论文一开头就亮出了自己的三个招牌:

1.拥有可以媲美Adam的快速收敛速度;

2.能达到像SGD那样的泛化能力;

3.保证一定的训练稳定性,可以提升GAN网络的训练效果。

论文链接:https://arxiv.org/abs/2010.07468

论文介绍:https://juntang-zhuang.github.io/adabelief/

代码链接:https://github.com/juntang-zhuang/Adabelief-Optimizer

而在这个时候保准会有一些人站出来“戏谑”说:

Adam又被超越了!

Adam又双叒叕被退休了!

......

在仔细看这篇论文之前,就让AI科技评论先带大家回顾一下那些年“号称”要超越Adam的优化器吧。

本文最后需要指出的是,怕大家看不到,想了想把它放到这里来

Adam和SGD确实是座大山,如果研究出新的优化器真的超越了Adam和SGD,那这项研究肯定能AI史上留名。

但是大家也不都是抱着非要超越的目的,不能不让人做优化器相关的研究吧,如果每次发表相关论文都被人戏谑妄想超越Adam/SGD,那这种风气正常吗?

所以,本文所说到的“号称”大多是指被别人号称被别人所戏谑,而新的优化器论文研究者是否有主动去提“超越/Beyond”,还是被别人或媒体去强加的“唉,这又有一篇号称要超越Adam的优化器”,但是这些人真的去做实验验证了吗?

当然,如果作者本人去主动提“超越/Beyond Adam”,那就欢迎大家对着相应算法做实验拿出证据锤就是了。

1 那些年“号称”要超越Adam的优化器

近年来针对传统优化器的工作层出不穷,研究者们往往都会进行大量的实验来证明自己的方法要比SGD和Adam的性能好,作为目前使用最为广泛的两种优化器,他们本身到底存在什么样的问题呢。

我们首先来分析一下这两种优化器的局限性,其中随机梯度下降算法(SGD)可谓是历史悠久,但是其常被诟病计算速度缓慢,同时由于训练过程中学习率恒定,往往只能获得一个局部最优点,所以SGD往往和动量方法结合在一起,这样既能对训练过程进行加速,同时也提高了泛化能力。

Adam算法是在ICLR 2015上在论文《Adam: A Method for Stochastic Optimization》中被提出:

Adam算法一经提出,就常年保持在ICLR会议引用量第一名的位置,Adam的设计目标就是寻求更快的计算速度,相对于SGD固定的学习率,其利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率,但是ICLR 2018的最佳论文《On the Convergence of Adam and Beyond》

论文链接:https://arxiv.org/abs/1904.09237

曾对Adam进行了更加详细的实验和证明,该论文表明Adam的优化结果往往不如带动量的SGD方法,并分析可能原因是Adam算法使用了指数滑动平均(exponential moving average)操作,指数滑动平均会导致算法无法到达收敛点,这也给学者指明了一条优化Adam的方向,之后出现了很多对这一点的改进工作。

1.1 ICLR 2019中国北大本科生提出的AdaBound

论文链接:https://arxiv.org/abs/1902.09843

该论文表明Adam在训练末期会出现较大或者较小的学习率的现象,而导致模型无法完全收敛,同时训练过程中不断变化的学习率也给训练的稳定性提出了挑战,这些都会影响最后的泛化能力。

AdaBound针对该问题,提出了一种“学习率裁剪”方法,即给定一组学习率阈值,防止在训练末期学习率出现异常值和震荡情况,裁剪公式如下,

其中

、和

并不是常数,而是时间t的函数,初始值为0,随着训练时间t逐渐收敛到

,而初始值为∞,随着时间t也逐渐收敛到。

在裁剪公式的作用下,AdaBound在训练初始阶段表现的像Adam,拥有较快的训练速度,而在训练末期,由于学习率受到限制,其性能表现又像SGD一样,可以得到泛化的解。

1.2 “整流版Adam”——RAdam

论文链接:https://arxiv.org/abs/1908.03265

这篇文章重点对原始Adam的自适应学习率进行了分析,发现训练初期由于样本量不足,会导致自适应学习率的方差过高,这会使梯度的分布变扭曲,进而就导致了Adam无法完全收敛,对于这个问题,RAdam首先将简单移动平均值(SMA)作为方差修正的控制量

,然后根据的阈值在训练初期切换RAdam的学习率变换模式,在训练中后期动态的计算方差的修正范围,从而达到更好的优化性能。

目前RAdam已被ICLR2020接收。

1.3 可以自动预热的AdaMod

论文链接:https://arxiv.org/abs/1910.12249

AdaMod同样是对原始Adam的学习率进行改进,改进的依据是学习率的长期变化特性,作者只在原始Adam的基础上增加了一个超参数

,用来描述训练过程中学习率记忆长短的程度,指数滑动平均的范围就是

,所以根据就能算出当前时刻的学习率的平滑插值进而结合长期记忆就可以得到学习率的值,从而避免出现极端学习率的情况。

1.4 更加省显存的AdaFactor

论文链接:https://arxiv.org/abs/1804.04235

对于CV模型,很多时候需要使用带动量的SGD才能得到最佳的收敛结果,而在NLP领域,以Adam为代表的自适应学习率优化器才是主角,目前随着NLP模型的参数量越来越大,我们不得不开始考虑在各种地方来节省显存,AdaFactor就是一种轻型的自适应学习率优化器,其首先分析了原始Adam中占用显存较多的成分是动量和用来计算梯度前两阶矩的缓存变量,AdaFactor直接抛弃了动量成分,但是为了仍然保留Adam自适应学习率的特点,其保留了缓存变量并做了进一步的压缩处理。

2 来看看最新的AdaBelief吧

AdaBelief同样是在Adam的基础上进行改进,作者直接将其与Adam的算法过程进行了对比:

二者的区别已经用蓝色字体标出,从最终梯度更新的公式来看,AdaBelief仅仅对分母进行了修改,其中Adam的更新方向为

,AdaBelief的梯度更新方向为

,作者形象的将

比喻为当前梯度方向的“belief”,其中

的区别在于它们分别是

的指数滑动平均(EMA)值,其中

为t时刻梯度的观测值,而

是t时刻梯度的预测值,然后在梯度更新时比较观测值和预测值的大小,如果当前观察到的梯度非常接近梯度预测,就获得一个较大的更新步长,反之获得一个较小的更新步长。

映射到代码实现中也就需要像下面修改几行代码即可:

原始Adam:

# Decay the first and second moment running average coefficientexp_avg.mul_(beta1).add_(1 - beta1, grad)exp_avg_sq.mul_(beta2).addcmul_(1 - beta2, grad, grad)

AdaBelief代码:

# Update first and second moment running averageexp_avg.mul_(beta1).add_(1 - beta1, grad)grad_residual = grad - exp_avgexp_avg_var.mul_(beta2).addcmul_(1 - beta2, grad_residual, grad_residual)

这么小的改动的确让人感到非常惊讶,但是背后仍然具有相当有意思的理论支持,比如作者考虑了损失函数的曲率信息,在每一步更新时根据曲率调整更新步长的大小。

上图中区域3的梯度值很大,但是曲率很小,为了跳出这个局部区域,我们实际上需要一个较大的更新步长,对于Adam,此时的值较大,分母较大,导致更新步长很小,而对于AdaBelief,此时的值较小,分母较小,所以更新步长很大,可以达到理想的效果。

下面是使用一些toy数据绘制的AdaBelief优化可视化效果:

3 实验

本文分别对图像分类、时间序列建模和GAN训练三个方面进行了实验。

图像分类baseline选择了VGG、ResNet和DenseNet,数据集使用Cifar和ImageNet,实验结果如下:

时间序列实验中,baseline选择LSTM,数据集使用Penn TreeBank,实验结果如下:

GAN训练实验中,baseline选择WGAN和WGAN-GP,数据集使用Cifar,不过目前论文GAN的实验结果引发了大家的质疑,作者团队已经在补充实验,相信不久就会更新论文。

4 讨论

AdaBeilef一经NeurIPS 2020接收,就在Reddit上面引发了激烈的讨论,很多网友对这项工作表示赞同,当然也有网友对论文中的实验提出了质疑,作者也在第一时间进行了回复。

我们挑选了其中几个大家重点关注的问题,并一一咨询了本文的第一作者,下面我们来看一下作者如何回答这些问题。

1、AI科技评论:我们看到大家的质疑主要是针对实验部分,尤其是对于GAN的训练,想问一下团队是在初期就有对GAN做提升的计划吗?

作者:最初的时候并没有想到GAN。增加了GAN的原因是在reddit上浏览关于optimizer的帖子时,发现有人指出不少新提出的optimizer在其他task上很好,但是在GAN上很差,所以心血来潮试了一下。

由于我们没有做过GAN方面的工作,所以选择model的时候很随意,从PyTorch官网上随便抄了一段最简单的代码。最开始用的model过于简单是我们的疏忽,经网友提醒后选择了大一点的模型,SN-GAN在CIFAR10得到了低于13的FID,基本算得上是大家所说的SOTA。

在这个模型下,公平比较各种optimizer,我们的方法依然不弱于Adam。我们团队对于各方面的质疑是很认真的,所以基本上看到这些质疑后一天内就重新实验并开源代码。这一点还是要感谢网友,估计审稿人是主要做优化的,偏理论一点,所以对于偏实践的SOTA没有概念,也没有指出这个问题。我们会更新文章。

另外还有一位朋友问到关于mode collapse的,我没有来得及解答,在这里回复一下:首先13的FID应该没有mode collapse,说明实际效果还可以;其次新的优化器不能完全解决mode collapse的问题,如果模型有问题是无法靠优化器弥补的。

2、AI科技评论: NeurlPS审稿人对这个工作是什么看法?

作者:我们的得分是785,review比较长,大家可以在公开后去官网看,这里先放一下meta review:

3、AI科技评论:这个工作背后有特殊的故事吗?

作者:没有,就是普通的research project,唯一特殊的地方就是我不是计算机系的,只有俩1080Ti GPU,跑ImageNet还是借别人的GPU,大概很少这么穷的。

4、AI科技评论:你对目前大家看不上这种新式优化器工作的现象有什么看法,你觉得导致这种现象的原因是什么?

作者:可以理解,会认为新的优化器是噱头,很少有实际效果好的。这个想法是基于自己的经验,从经验到这种想法没啥问题。不过可能要比较一下花了多久调Adam,又花了多久测试新的优化器,是不是本人对于超参的设置已经“过拟合”到Adam了;当然同样的问题也会出现在我们的实验中,所以我们尽量用官方的实现去比较,或者直接从别人的文章里引用结果,尽量避免自己跑别人的方法。另外一个原因是为了写文章吧,如果和之前的文章比较,用同一种优化器才是公平的,这个应该也是很重要的原因。

5、AI科技评论:你认为这个方向今后的潜力如何。

作者:应该提供了一种新的思路,把分母修改一下就得到了,不考虑可读性的话在Adam改两行就够了,个人觉得算不上“魔改”。如果大家还有其他问题,建议到github提交issue,不过请尽可能提供详细的信息,我们会尽快解答。

至于AdaBeilef效果到底如何,还有哪些不足之处,就交给有心人去评判吧,毕竟大家还是抱着

的心态多一些,反正接着用SGD/Adam呗。

有优化器方面的研究者最好能和作者多battle几回,说不定改进改进,骇!最后真成了,那论文大家一起挂名呗。

相信目前绝大多数炼丹师在训练时都是SGD或者Adam一把梭,时间一长就形成了习惯,要问为什么这种新提出的优化器还无法代替SGD和Adam,笔者赛文认为,就算是有效果很好的优化器,可能也是因为Pytorch和Tensorflow这些深度学习框架中还没有完整的库实现吧(不手动

保命)。

相关文章