数据中心 频道

2017年不可或缺的深度学习优化亮点盘点

  【IT168 资讯】深度学习的最终目标是找到一种最基本的概括,即找到一种快速而可靠的方法。随机梯度下降法(SGD)是一种具有60年历史的算法(Robbins and Monro,1951)[1],对于当前的深度学习算法的反向传播来说,这一点至关重要。

  近年来已经提出了许多不同的优化算法,它们使用不同的方程来更新模型的参数。Adam(Kingma and Ba,2015)[18]于2015年推出,可以说今天仍然是最常用的算法之一。这表明从机器学习实践者的角度来看,对深度学习优化的非常好的实践在很大程度上会保持不变。

  然而,新的想法在今年已经形成,这可能会形成未来优化我们模型的方式。在这篇文章中,将会谈到深度学习最令人激动的亮点和最有希望的方向。

  提升Adam

  尽管像Adam这样的自适应学习速率方法十分有效,但计算机视觉和NLP中的许多任务的最新结果,如物体识别或机器翻译仍然是由原来的新元实现的。最近的理论为此提供了一些理由,这表明自适应学习率方法收敛于不同的(并且不太理想的)最小值,而不是带有动量的SGD。从经验上可以看出,自适应学习率方法找到的极小值与SGD中发现的极小值相比,在对象识别,字符级语言建模和选区解析方面略差。这似乎是与直觉相反,因为Adam具有良好的收敛保证,而且其自适应学习率应该比正常的SGD更有优势。然而,亚当和其他自适应学习速率方法并不是没有缺陷。

  Decoupling weight decay

  有一个因素解释了Adam的泛化能力,而在一些数据集上与SGD相比,重量衰减。重量衰减最常用于图像分类问题,并且在每次参数更新之后衰减权重θt,通过将它们乘以每个参数更新后的衰变率略低于1:

  θT+ 1 =wtθtθt

  这可以防止重量变得太大。因此,权重衰减也可以理解为一个?2正则化项,它依赖于权重衰减率加上损失:

2017年不可或缺的深度学习优化亮点!

  权重衰减通常在许多神经网络库中实现,或者作为上述正则化项或者直接修改梯度。由于梯度在动量和Adam更新方程(通过与其他衰减项相乘)中被修改,所以权重衰减不再等于l 2 l2正则化。因此,Loshchilov和Hutter(2017)[19]提出在参数更新之后加上原始定义中的参数更新,将权重衰减与梯度更新解耦。

  带有动量和权重衰减(SGDW)更新的SGD如下所示:

  vt=γvt-1 +ηgt

  θt+ 1 =θT-VT-ηwtθt

  其中ηη是学习速率,第二个等式中的第三项是解耦权重衰减。同样,对于权重衰减的亚当(AdamW),我们可以得到:

2017年不可或缺的深度学习优化亮点!

  其中mtmt和m^tm^t以及vtvt和v^tv^t分别是第一和第二时刻的偏差和偏差校正估计值,β1β1和β2β2是它们的衰减率,同时加入相同的权重衰减项。作者表示,这大大提高了Adam的泛化性能,并允许它与SGD在图像分类数据集上展开激烈竞争。

  另外,它将学习速率的选择与权重衰减的选择分开,这使得超参数优化更好,因为超参数不再相互依赖。它还将优化器的实现与执行权重衰减分开,这有助于实现更清洁和更可重用的代码。

  修正指数移动平均值

  在最近的几篇论文经验中发现,较低的β2值控制Adam过去平方梯度的指数移动均值的贡献。例如:0.990.99或者0.90.9与默认的0.9990.999在他们各自的应用中表现较好,表明可能存在指数移动平均值的问题。

  一个ICLR 2018提交将这个问题正式化,并指出过去平方梯度的指数移动平均值是自适应学习率方法的普遍化行为不佳的另一个原因。通过过去平方梯度的指数移动平均值来更新参数是自适应学习速率方法的核心,例如Adadelta、RMSprop和Adam。指数平均的贡献是积极的:应该防止学习率随着训练的过程中变得极小,这是Adagrad算法的关键缺陷。但是,这种渐变的短期记忆会成为其他场景中的障碍。

  在Adam收敛到次优解的环境中,已经观察到一些微粒提供了大而丰富的信息梯度,但是由于这些小批量很少发生,指数平均减小了它们的影响,导致收敛性差。作者提供了一个简单的凸优化问题的例子,其中Adam可以观察到相同的行为。

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

2017年不可或缺的深度学习优化亮点!

  比较了Adam在小数据集和CIFAR-10上的不同,作者观察到了改进的性能。

  调整学习率

  在许多情况下,需要改进和优化的不是模型,而是我们的超参数。最近的语言建模实例证明,与更复杂的模型相比,调整LSTM参数和正则化参数可以产生最新的结果。

  在深度学习中优化的一个重要超参数是学习率ηη。实际上,SGD已经被证明要求学习率退火时间表一开始就收敛到一个好的最小值。人们通常认为,像Adam这样的自适应学习率方法对于不同的学习率会产生更大的影响,因为他们自己更新了学习率。但是,即使对于这些方法,好的学习率和非常好的的学习率也可能有很大的差别。

  具有调整学习率退火时间表和动量参数的SGD不仅与Adam有竞争关系,而且收敛速度更快。另一方面,虽然我们可能认为亚当学习率的适应性可能会模仿学习退火,但是明确的退火时间表仍然是有益的:如果我们对Adam增加了SGD样式的学习速率退火,它会更快地收敛,优于SHD机器翻译。

  事实上,学习率退火调度工程似乎是新的特征工程,因为我们经常可以找到高度调整的学习率退火调度,从而改善了我们模型的最终收敛行为。一个有趣的例子是瓦斯瓦尼等人。 虽然通常看到一个模型的超参数要经受大规模的超参数优化,但有趣的是将学习速率退火时间表看作是对细节同样重视的焦点:作者使用Adam,β1=0.9,一个非默认的β2=0.98β2= 0.98,ε=10-9,可以说是学习率最精细的退火时间表之一ηη:

2017年不可或缺的深度学习优化亮点!

  其中dmodel是warmup_steps = 4000模型的参数数目。

  在史密斯等人最近的另一篇论文中展示了学习率和批量大小之间的一个有趣的联系,两个超参数通常被认为是相互独立的:他们表明,衰减的学习率相当于增加批量大小,而后者允许增加并行性。相反,我们可以减少模型更新次数,从而通过提高学习速度和缩放批量来加快训练速度。这对于大规模的深度学习有影响,现在可以重新调整现有的训练计划,而不需要超参数调整。

  热启动

  SGD重启

  SGDR是另一个值得分析的近期发展,这是一种使用热重启而不是学习速率退火的SGD替代方案。在每次重新启动时,学习速率被初始化为某个值,并计划减少。重要的是,因为优化不是从头开始,而是从最后一个步骤中模型收敛的参数开始。关键因素是学习率随着积极的退火时间表下降,这会迅速降低学习率,如下所示:

2017年不可或缺的深度学习优化亮点!

  其中ηimin 和ηimax是第i次运行期间的学习速率的范围,T cur指示自从上次重新启动以来已经经过了多少个历元,并且Ti 指定了下一次重新启动的历元。 与常规学习率退火相比,Ti = 50,Ti = 100和Ti = 200的热启动时间表如图1所示。

2017年不可或缺的深度学习优化亮点!

  重新启动后的初始学习速率很高,用于将参数从原先收敛到损失表面的不同区域的最小值弹射出来。这种积极的退火使模型能够快速收敛到一个新的更好的解决方案。作者凭经验发现,热启的SGD需要比学习速率退火少2?4倍,从而达到可比性或更好的性能。

  学习率退火与热重启也称为周期性学习率,最初由Smith提出。

  快照

  快照是一种最近比较火热的技术,当训练单个模型时,使用热启动来组装一个基本上免费的集合体。该方法训练一个单一的模型,直到与我们上面已经看到的余弦退火时间表收敛。 然后保存模型参数,执行热重启,然后重复这些步骤M次。 最后,所有保存的模型快照都是集成的。在图2中可以看到与快照集成行为相比,在错误表面上常见的SGD优化行为。

2017年不可或缺的深度学习优化亮点!

  一般而言,成组的成功取决于组合中各个模型的多样性。 因此,快照集合依赖于余弦退火时间表的能力,使得模型在每次重新启动后能够收敛到不同的局部最优值。 作者证明,这在实践中是成立的,在CIFAR-10、CIFAR-100和SVHN上都有比较好的成果。

  Adam重新启动

  热重启与Adam原本不起作用,因为它的功能出现失调。于是在确定权重衰减之后,Loshchilov和Hutter也同样将Adam推广到热重启。他们设置ηimin=0和ηimax=1,这产生:

2017年不可或缺的深度学习优化亮点!

  他们建议从最初的小Ti(在所有时期的1到10之间)开始,并在每次重新启动时将其乘以Tmult因子(例如,Tmult = 2Tmult = 2)。

  学习优化

  去年的一篇论文(和reddit的“2016年非常好的论文名”获奖者)是Andrychowicz等人撰写的。他们训练LSTM优化器在训练期间为主模型提供更新。不幸的是,学习单独的LSTM优化器,甚至使用预先训练的LSTM优化器进行优化,都会大大增加模型训练的复杂性。

  今年的另一个非常有影响力的学习型学习论文使用LSTM来生成领域特定语言的模型体系结构(Zoph and Quoc,2017)。虽然搜索过程需要大量的资源,但是发现的架构可以用来替代现有的架构。这个搜索过程已经被证明是有效的,并且找到了在语言建模方面取得最新成果的架构,并且结果与CIFAR-10上的最新技术相竞争。

  相同的搜索原则可以应用于任何其他领域,其中的关键过程之前已经被手工定义。其中一个领域是深度学习的优化算法。正如我们以前所见,优化算法比它们看起来更相似:它们都使用过去梯度的指数移动平均值(如动量)和过去平方梯度的指数移动平均值的组合。

  贝洛等人定义了一个特定领域的语言,它由对优化有用的基元组成,例如这些指数移动平均值。然后,他们从可能的更新规则的空间中采样一个更新规则,使用此更新规则来训练模型,并根据测试集上的训练模型的性能来更新RNN控制器。完整的程序可以在图3中看到。

2017年不可或缺的深度学习优化亮点!

  特别是,他们发现了两个更新方程,PowerSign和AddSign。 PowerSign的更新公式如下:

2017年不可或缺的深度学习优化亮点!

  这表明,过去的梯度和当前的梯度之间的这种动量般的协议是优化深度学习模型的关键信息。

  AddSign依次定义如下:

2017年不可或缺的深度学习优化亮点!

  α通常设置为1或2.与上面类似,这次更新依赖于α+ f(t)或者α-f(t)梯度的方向协议。作者指出,PowerSign和AddSign在CIFAR-10方面的表现优于Adam、RMSprop和SGD,并能很好地转移到ImageNet分类和机器翻译等其他任务上。

  理解泛化

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

  但是,我们对深度神经网络的泛化行为的理解仍然很浅。最近的工作表明,可能的局部极小值的数量随参数的数量呈指数级增长。考虑到目前深度学习架构的参数数量巨大,这样的模型融合到一般化的解决方案仍然比较难,特别是考虑到他们可以完全记住随机输入。

  一份ICLR 2018提交的报告通过一系列消融分析表明,一个模型在激活空间中对单个方向的依赖,即单个单元或特征图的激活是其泛化性能的良好预测。他们表明,这种模式在不同数据集上训练的模型以及不同程度的标签损坏。他们发现辍学并没有帮助解决这个问题,而批量规范化不利于单方面的依赖。

  虽然这些发现表明仍然有许多我们不知道的深度学习优化方面,但重要的是要记住,收敛性保证和大量的工作存在凸面优化,现有的想法和见解也可以在一定程度上应用于非凸优化。 NIPS 2016的大规模优化教程提供了该领域更多理论工作的完美概述。

0
相关文章