2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?

原作 Sebastian Ruder
王小新 编译自 ruder.io 
量子位 出品 | 公众号 QbitAI

深度学习的基本目标,就是寻找一个泛化能力强的最小值,模型的快速性和可靠性也是一个加分点。

随机梯度下降(SGD)方法是1951年由Robbins和Monro提出的[1],至今已有60年历史。在当前的深度学习研究中,这种方法至关重要,一般被用在反向传播过程中。

近年来,研究人员提出一些新的优化算法,使用了不同方程来更新模型参数。2015年Kingma和Ba提出的Adam方法[18],可看作是目前最常用的优化算法之一。这表明,从机器学习工作者的角度来说,深度学习优化中的最佳方法在很大程度上是保持不变的。

然而,今年还有很多新的方法提出,这可能会影响接下来在模型优化中所使用的方法。在这篇文章中,Ruder从他的角度,介绍了深度学习优化方法中一些振奋人心的工作和可能的发展方向。阅读这篇文章时,要熟悉SGD方法和自适应学习率方法,如Adam方法。

改进Adam方法

尽管,像Adam这样的自适应学习率方法使用十分广泛,但是,在物体识别[17]和机器翻译 [3]等研究任务中,很多前沿的研究成果仍然在使用传统的带动量SGD方法。

Wilson等人在最新研究中[15]给出一些理由来说明,与带动量SGD方法相比,自适应学习率方法会收敛于不同的极小值,且结果通常不大理想。从经验上得出,在物体识别、字符级语言建模和句法分析等任务中,自适应学习率方法得到的极小值通常比带动量SGD方法得到的极小值要差。这似乎与直觉相反,因为Adam方法有很好的收敛机制,且其自适应学习率会比传统的SGD方法表现得更好。但是,Adam和其他自适应学习率方法也有一些局限性。

解耦权值衰减

在一些数据集上,Adam方法的泛化能力比带动量SGD方法要差的一个可能原因是权值衰减(weight decay)。权值衰减常被用于图像分类问题中,即在每次参数更新后,把衰减率Wt与权重θt相乘,其中衰减率Wt略小于1:

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第1张图片

这能防止权重变得过大。因此,权值衰减也可以理解为一种L2正则化项,这取决于施加在Loss上的权值衰减率Wt

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第2张图片

权值衰减方法一般可作为上述的正则化项,或是直接修改梯度,通常在很多神经网络库中有调用函数。在动量和Adam算法的更新方程中,通过与其他衰减项相乘来修改梯度值时,所以权值衰减与L2正则化不一样。因此,Loshchilov和Hutter在2017年提出“解耦权值衰减”[19],与原始定义相同,在每次参数更新后通过这种方法来更新梯度。

带动量和权值衰减的SGD方法(SGDW)按照以下方式更新梯度:

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第3张图片

其中,η为学习率,第二个方程的第三项为解耦权值衰减。同样地,我们得到带权值衰减的Adam方法(AdamW):

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第4张图片

其中,mt和m̂t是第一时刻的偏差和偏差校正估计值,vt和v̂t是第二时刻的偏差和偏差校正估计值,β1和β2是相应的衰减率,且加入相同的权值衰减项。作者表示,这种方法大幅提高了Adam方法的泛化能力,且在图像分类数据集上与带动量SGD方法效果相当。

另外,它将学习率的选择过程与权值衰减的选择过程分离开,这能更好地实现超参数优化,因为超参数间不再互相依赖。它还把优化器的实现与权值衰减的实现过程分开,这有助于构建更简洁和可重用的代码,参考fast.ai AdamW/SGDW implementation(https://github.com/fastai/fastai/pull/46/files)

固定指数移动平均值

最近的一些研究(Dozat and Manning, 2017[13]、Laine and Aila, 2017[16])通过实验发现,调低β2值,影响了Adam方法中过去平方梯度的指数移动平均值的贡献度。一般来说,β2的默认值为0.999,设置为0.99或0.9后,在不同任务中表现更好,这表明可能存在指数移动平均值的问题。

ICLR 2018正在审核的一篇文章On the Convergence of Adam and Beyond(https://openreview.net/forum?id=ryQu7f-RZ)研究了这个问题,指出过去平方梯度的指数移动平均值是自适应学习率方法泛化能力不佳的另一个原因。自适应学习速率方法的核心,是通过过去平方梯度的指数移动平均值来更新参数,例如Adadelta,RMSprop和Adam。研究指数平均的贡献度,这个思路的动机性很好,能防止学习率随着训练而变得极小,这也是Adagrad方法的关键缺陷。但是,梯度的短期记忆性在其他情况下变成了阻碍。

在Adam方法收敛到一个次优解时,我们观察到一些小批次样本贡献了大幅且有效的信息梯度,但是这种情况很少发生,指数平均后减小了它们的影响,导致模型收敛性差。作者给出了一个简单的凸优化问题,可以看到Adam方法中也存在这种现象。

作者提出了一种新算法AMSGrad来解决这个问题,它使用过去平方梯度的最大值来更新参数,而不是先前的指数平均。AMSGrad方法的更新过程如下,这里不带有偏差校正估计:

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第5张图片

实验表明,在小数据集和CIFAR-10数据集上,这种方法的性能比Adam方法更好。

调整学习率

在许多情况下,我们不需要改进和调整模型结构,而是该调整超参数。在语言建模中的一些最新研究表明,与更复杂的模型相比,调整LSTM参数[20]和正则化参数[21]就可以得到最先进的性能。

在深度学习优化中,一个重要的超参数就是学习率η。实际上,在SGD方法中,需要构建一个合适的学习率退火方案,来得到一个良好的收敛最小值。人们会认为,像Adam这样的自适应学习率方法,对不同的学习率更具有鲁棒性,因为这些方法能自我更新学习率。但是,即使对于这些方法,好的学习率和最佳的学习率也可能有很大的差别(Andrej Karpathy‏Verified account说最佳学习率是3e-4 https://twitter.com/karpathy/status/801621764144971776)。

Zhang在2017年的一个研究表明[2],在调整学习率退火方案和动量参数后,该SGD方法的性能与Adam有得一拼,而且收敛速度更快。另一方面,我们可能认为Adam方法中学习率的自适应性可能模仿了学习速率退火,但是一个明确的退火方案仍然是有帮助的。因为,如果我们把SGD方法中的学习率退火添加到Adam中,它能在机器翻译任务中表现得比SGD方法更好,且更快地收敛[4]。

事实上,学习率退火方案似乎是一种新的特征工程,因为我们发现,改进的学习率退火方案能改善模型的最终收敛性能。Vaswani等人在2017年给出了一个有趣的例子[14]。在模型调参时,通常需要进行大规模的超参数优化,这个文章的创新点在于也把学习率退火方案当作是要优化的具体焦点。作者使用了Adam方法,其中β1= 0.9,和非默认参数β2= 0.98、ε=10-9,这可以说对学习率η来说是最精细的退火方案之一:

0?wx_fmt=png

其中dmodel是模型参数的数目,且warmup_steps为4000。

Smith等人在2017年的另一篇论文[5]揭示了学习率和批次大小间的一个有趣关联。这两个超参数通常被认为是相互独立的,但是他们发现,减小学习率相当于增加批次大小,而后者能提高并行训练速度。反过来想,我们可以减少模型更新次数,并通过提高学习率和缩放批次大小来提高训练速度。这个发现影响到大规模深度学习的训练过程,可在不需要超参数调整的前提下,重新调整现有的训练计划。

热重启(warm restarts)

带重启的SGD方法

另一个最近提出的有效方法是SGDR[6],Loshchilov和Hutter用热重启方式来替代学习率退火制度,来改进SGD方法。在每次重启时,学习率初始化为某个值,然后逐渐减少。重要的是,这种重启可随时进行,因为优化不是从头开始,而是从模型在上一个步骤收敛的参数开始的。关键在于,通过一个积极的余弦退火方案来调整学习率,这会很快地降低学习率,如下所示:

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第6张图片

其中ηimin和ηimax是第i次训练时学习率的变化区间,Tcur表示从上次重启后已完成的迭代次数,且Ti规定了下一次重启的迭代次数。与常规的学习率退火方案相比,热重启方法(Ti=50,Ti=100和Ti=200)的性能如图1所示。

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第7张图片

图1:加入热重启的学习率方法性能变化

重启后,用一个高的初始学习率能从根本上把参数从先前收敛的最小值弹射到损失函数曲面的不同区域。这种积极的退火机制使模型能快速收敛到一个新且更好的解决方案。作者通过观察还发现,使用热重启的随机梯度下降方法的所需时间比学习率退火机制少了2〜4倍,并能达到相当或更好的性能。

使用热重启的学习率退火也叫做循环变化学习率,最初由Smith[22]提出。fast.ai学生给出了另外两篇文章,讨论了热重启和循环变化学习率,地址如下:

https://medium.com/@bushaev/improving-the-way-we-work-with-learning-rate-5e99554f163b

http://teleported.in/posts/cyclic-learning-rate/

快照集成(Snapshot ensembles)

快照集成是一种最近由Huang提出的巧妙方法[7],即在训练单个模型时使用热重启来组装一个集合,且基本上无额外的代价。这种方法可以训练一个单模型,按照之前看到的余弦退火制度收敛,然后保存模型参数,并进行热重启,重复这些步骤M次。最后,所有保存的模型快照形成一个集合。在图2中可以看到,常用的SGD优化在误差曲面上的性能与快照集成过程的性能差异。

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第8张图片

图2:SGD与快照集成

一般来说,集成是否成功取决于组合中每个模型的多样性。因此,快照集成依赖于余弦退火方案的能力,使得模型在每次重启后能够收敛到不同的局部最优值。作者证明,这在实践中是成立的,在CIFAR-10、CIFAR-100和SVHN上取得了很好的效果。

带重启的Adam方法

热重启最初在Adam方法中并不适用,因为它的权值衰减不正常。在固定权值衰减后,Loshchilov和Hutter在2017年同样地把热重启扩展到Adam中。其中,ηimin= 0,ηimax= 1,得到:

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第9张图片

建议开始时选取较小的Ti(迭代次数在1-10之间),并在每次重启时将其乘以一个系数Tmult,如2。

学习优化

去年最有趣的论文之一是Andrychowicz等人撰写的Learning to learn by gradient descent by gradient descent,也是reddit网友选出的“2016年最佳论文”[23]。他们训练了LSTM优化器,用于在训练主要模型时更新参数。不幸的是,学习单独的LSTM优化器,或是使用预先训练好的LSTM优化器进行优化,都会大大增加模型训练的复杂度。

今年还有一篇很有影响力的“learning to learn”论文,使用LSTM来生成特定领域语言的模型结构[24]。虽然搜索过程需要大量的资源,但是所发现的结构可以用来取代已有的结构。这个搜索过程已经被证明是有效的,并且在语言建模方面取得最先进的效果,并且在CIFAR-10上取得了很有竞争力的结果。

同样的搜索策略也可以应用于任何已经被手工定义其关键过程的其他领域,其中一个领域就是深度学习的优化算法。正如以前所看到的,优化算法十分符合这个规则:它们都使用了过去梯度的指数移动平均值(如动量)和过去平方梯度的指数移动平均值(如Adadelta,RMSprop,Adam)的组合[25]。

Bello等人[8]定义了一个特定领域的语言,由对优化有用的基元组成,如这些指数移动平均值。然后,他们从所有可能的更新规则空间中采样更新规则,使用此更新规则来训练模型,并基于测试集上训练模型的性能来更新RNN控制器。完整流程如图3所示。

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第10张图片

图3:神经优化搜索

特别是,他们还定义了两个更新方程,即PowerSign和AddSign。PowerSign的更新公式如下:

0?wx_fmt=png

其中,α是一个超参数,通常设为e或者2;f(t)设为1,或是衰减函数(随着时间步t重新执行线性、循环或衰减),其中mt是过去梯度的移动平均值。通常,设置α= e,且无衰减。注意到,更新通过αf(t)或1 /αf(t)来缩放梯度,取决于梯度方向和移动平均值是否一致。这表明,这种类似动量的过去梯度和当前梯度之间的相似性是优化深度学习模型的关键信息。

AddSign定义如下:

0?wx_fmt=png

其中,α通常设置为1或2,与上面类似,这次的尺度更新为α+f(t)或α−f(t),取决于梯度方向的一致性。作者指出,PowerSign和AddSign在CIFAR-10上的表现优于Adam、RMSprop和带动量SGD方法,并能很好地转换到其他任务中,如ImageNet分类和机器翻译。

理解泛化

优化问题与泛化能力是密切相关的,因为模型收敛的最小值决定了模型的泛化能力。因此,优化问题的进展与理解这种极小值泛化能力的理论进展是密切相关的,且能更深入地理解深度学习中的泛化能力。

但是,我们对深度神经网络泛化能力的理解仍然很浅显。最近的研究表明,可能是局部极小值的数量随参数数量呈指数型增长[9]。考虑到目前深度学习结构中参数数量巨大,这样的模型能收敛且泛化能力较好,特别是考虑到它们可以完全记住随机输入[10],这似乎看起来很神奇[10]。

Keskar等人[11]认为最小值的锐度是泛化能力不佳的原因,他们还特别指出,批次梯度下降所找到的尖锐极小值具有较高的泛化误差。这是直观的,因为我们通常会希望这个函数是平滑的,出现尖锐极小值表明相应误差曲面的高度不规则性。然而,近期研究表明,锐度可能不是一个好的指标,因为它表明局部最小值能够很好地泛化[12],而且Eric Jang的Quora答案中也讨论了这些内容,链接如下:
https://www.quora.com/Why-is-the-paper-%E2%80%9CUnderstanding-Deep-Learning-Requires-Rethinking-Generalization%E2%80%9D-important/answer/Eric-Jang?srid=dWc3

有一篇ICLR 2018投稿论文(https://openreview.net/forum?id=r1iuQjxCZ),通过一系列消融分析,表明一个模型在激活空间中对单个方向有依赖性,即单个单元或特征图谱的激活是其泛化能力的良好预测。他们证明,这种模式适用于不同数据集上的训练模型,以及不同程度的标签损坏。他们还发现,加入Dropout并没有助于解决这个问题,而批次归一化阻碍了单方面的依赖性。

虽然以上这些研究表明仍然有很多我们不知道的深度学习优化知识,但要记住,收敛性保证和在凸优化中的很多现有工作和思路,在一定程度上也可应用于非凸优化问题中。NIPS 2016上大量的优化教程对该领域很多理论工作进行了很好的综述。

结论

我希望上面内容能很好地总结过去一年在深度优化问题中一些令人信服的发展。如果还有其他漏掉的方面,或是文章中有错误,请联系我。

文中提到的25篇文献,可以去原文文末自取:http://ruder.io/deep-learning-optimization-2017/

活动报名

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第11张图片

加入社群

量子位AI社群12群开始招募啦,欢迎对AI感兴趣的同学,加小助手微信qbitbot4入群;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进群请加小助手微信号qbitbot4,并务必备注相应群的关键词~通过审核后我们将邀请进群。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?_第12张图片

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态


你可能感兴趣的:(2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?)