您的位置:首页 > 运维架构

2017优化方法改进-译Optimization for DL in 2017

2017-12-31 17:00 381 查看

写在前面

这篇文章严格来说并不是译文,并不是逐字进行了翻译。

想看英文原文戳这里,是Ruder的一篇博客,这里阅读以后做个搬运工。

具体方法有解耦权重衰减、修改指数移动平均、使用退火方案微调学习率、热重启方案,以及后续提出的学习优化以及对于优化的理解。

总的来说,针对当前优化方法的两大分支都有了不同的改进。

可以发现,基于当前大多非凸优化的背景,新提出的方法具有通用性。解耦权重衰减、退火方案、热重启在SGD和Adam都试用。

Improving Adam

Background

Adam之类的自适应学习率算法在优化方法占据了主导地位,但是目前在CV和NLP的一些领域的state of the art(最好效果)仍然是用具动量的SGD实现的,比如object recognition、character-level language modeling、constituency parsing等。

直觉上,Adam 良好的收敛率应该取得更好的效果比起SGD,但是受限于它自身的缺点,并非完全如此。

Decoupling weight decay(解耦权重衰减)

相比SGD,Adam有些时候表现差地原因就是没有权重衰减。所谓weight decay就是在每一次更新权重参数后进行衰减,其中wt为衰减速率。

θt+1=wtθt

权重衰减防止了权重参数增长太快。从正则化的角度考虑,相当于给loss施加了L2范数正则化。

Lreg=wt2||θt||22

因为参数更新时,梯度的修改既在动量中又在二阶的等式中,此时的权重衰减不再等价于L2正则化。Loshchilov and Hutter (2017)提出了从梯度更新中解耦权重衰减,通过在更新参数后施加权重衰减。

SGDW-具动量的SGD解耦权重衰减:

vt=γvt−1+ηgt

θt+1=θt−vt−ηwtθt

AdamW-AdamW解耦权重衰减:

mt=β1mt−1−(1−β1)gt

rt=β2rt−1+(1−β2)gt2

m̂ t=mt1−βt1

r̂ t=rt1−βt2

θt+1=θt−ηr̂ t√+σmt^−ηwtθt

解耦的意义

1.将学习率的选择和权重衰减的选择解耦分离,超参数的互相不依赖使得其更好被调优。

2.解耦分离了优化器的实现和权重衰减的实现,使得代码更简洁更容易重用。

Fixing the exponential moving average(修改指数移动平均)

近期一些papers指出了更小的β2,比如0.99,0.9比默认的0.999效果更好。ICLR 2018提交的一篇论文形式化了这个问题并指出梯度平方的指数移动平均是自适应学习率方法的普遍性能差的另一个原因。

Adam设定收敛到局部最优解,实验发现只有很小的批量提供了大的有用的梯度,但这些minibatch很少出现。而指数移动平均削减了这些minibatch的影响,导致了较差的收敛结果。

为了解决这个问题,作者提出了AMSGrad方法,更新参数时选取过去梯度平方的最大值而不是平方梯度累计的指数移动平均,同时没有使用偏置修正的矩估计。

mt=β1mt−1−(1−β1)gt

rt=β2rt−1+(1−β2)gt2

rt^=max(rt−1^,rt)

θt+1=θt−ηrt^+σ√mt

Tuning the learning rate(微调学习率)

Background

在许多情况下,不是模型本身需要提升和调整,而是超参数。近期语言模型中的许多例子表明,微调LSTM的参数和正则化参数同样可以产生和复杂模型一样的最好效果。

学习率退火方案

学习率η是DL中优化最重要的参数之一。SGD证实需要一个学习率的退火过程(第一位的)来收敛到一个好的最小值。自适应学习率算法被认为对于不同的学习率有更好的鲁棒性,但是对于这些方法好的学习率和最优的学习率之间仍有差别。

Zhang et al. (2017)指出SGD经过微调的学习率退火方案和动量参数不仅可以和Adam媲美,并且收敛地更快。换句话,当我们认为Adam的自适应学习率模拟了学习率的退火过程,一个显式的退火过程也是行之有效的。如果我们我们将SGD的式的学习率退火过程增加到Adam,它也同样收敛的更快,性能更好(比起SGD),在机器翻译领域(Denkowski and Neubig, 2017)。

事实上,学习率的退火方案似乎是新的特征工程。

近期的一篇论文(Smith et al. (2017))指出在学习率和批大小之前存在有趣的关联,而过去这两个超参数常被认为互相独立。衰减学习率相当于增加批大小,而后者也可以并行的增加。相反地,可以减少模型更新的次数,这样通过增加学习率和增大批大小来加速训练。这对于大规模的深度学习有影响,现在可以重新调整现有的训练方案,而不需要调整超参数。

Warm Restarts(热重启)

SGD with restarts

SGDR(Loshchilov and Hutter, 2017)使用热重启替代学习率的退火方案。热重启是每次重启时,学习率的初始化根据模型收敛时最后一步的值,逐渐降低。这么做的主要原因是学习率以激进的余弦退火方案减少,迅速地降低了学习率。算法类似如下:

ηt=ηimin+12(ηimax−ηimin)(1+cos(TcurTiπ))

其中ηimaxηimin第i轮训练学习率的范围。Tcur是自上次重启动后经过的训练轮次,Ti指定了下次重启动的轮次。


SGDR使得先前收敛的最小值弹射到损失函数的不同表面。激进的退火方案可以使模型迅速收敛到一个新的更好的局部值。作者根据经验指出SGDR比学习率退火方案减少2到4倍的训练轮次,并且达到相当或更好的性能。

学习率退火方案和热重启的SGD也都被认为是周期学习率的方法。

Snapshot ensembles(快照集成)

快照集成(Huang etal.,2017)是训练单一模型时通过使用热启动来组装一个近乎免费的集成。执行过程是通过余弦退火方案训练模型到收敛,然后保存参数执行热启动,重复这样的步骤M次,最终将所有的模型快照集成。通过下图,可以观察到普通的SGD优化是在损失函数的错误表面进行的,从这一点来说模型可以收敛到更好的最小值和更快地收敛。


快照集成的成功取决于集成的各个独立模型的多样性。快照集成依赖余弦退火方案使得模型可以在每次重启后收敛到不同的局部最优值,这在实践中也成立。

Adam with restarts

热启动开始对于Adam不起作用,受限于权重衰减导致的功能障碍。通过修改权重衰减后,Loshchilov and Hutter (2017)将热启动用到了Adam上。

set: ηimin=0,ηimax=1`

ηt=0.5+0.5cos(TcurTiπ)

Learning to optimize(学习优化)

Background Understanding

传统意义上,机器学习的优化是寻找让模型表现更好的参数,一般是事先定义好的。所谓学习优化是指像学习模型一样去学习或训练一个优化器,然后再去学习模型。类似的,让模型自己去学习一个好的模型结构。

Some cases

2016年reddit的最佳论文(by Andrychowicz et al.)训练了一个LSTM优化器来对主模型的训练进行更新。事实上,学习一个LSTM优化器或者使用一个预先训练好的LSTM优化器用来优化反而大大增加了主模型训练的复杂程度。

learning-to-learn paper(Zoph and Quoc, 2017) 使用LSTM在领域特定的语言建模问题上生成了模型架构,虽然搜索过程耗费巨大资源,但是发现的架构可以用来替换对应的部分。

搜索与优化

优化本身是一个搜索过程。

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

Neural Optimizer Search(神经优化搜索)

Bello et al. (2017)定义了一个领域特定的语言模型,包含了对于优化有用的基本内容比如这些指数移动平均。思路是在可能的优化方法空间中采样一些更新规则(方法),用来训练一个子模型,最终根据测试集上的性能选取对应的规则来更新RNN控制器。


特别地,发现了两个公式,PowerSign和AddSign 在CIFAR-10方面的表现优于Adam,RMSprop和SGD,并能很好地转移到ImageNet分类和机器翻译等其他任务。

PowerSign

θt+1=θt−αf(t)∗sign(gt)∗sign(mt)∗gt

其中梯度的更新αf(t)或1αf(t)取决于梯度的方向和移动平均是否一致。 这表明,过去的梯度和当前的梯度之间的这种动量般的协议是优化深度学习模型的关键信息。

类似的,AddSign

θt+1=θt−α+f(t)∗sign(gt)∗sign(mt)∗gt

理解泛化

优化与泛化

优化与泛化密切相关,因为模型收敛的最小值定义了模型的泛化能力。优化领域所取得的进展与与理解泛化行为的理论进展密切相关,这些泛化行为包括诸如最小值和更广泛地获得对于DL中更深层次的理解。

Some Work

近期工作指出潜在的局部极小值的数量随着参数数量的增加指数级增长(Kawaguchi, 2016)。实际上,即便对于当前DL结构中海量的参数,模型仍可以魔幻地收敛到泛化能力较好的结果,特别地可以记忆随机输入(Zhang et al., 2017)。

Keskar et al. (2017) 认为极小值的锐度是泛化能力差的源头之一:他们发现批梯度下降获得的尖锐的极小值有很高的泛化误差。这很直观,一般我们希望模型函数是平滑的,而尖锐的极小值在相应的误差表面表现了高度的不规则性。然而,近期的一些工作表明尖锐度不是一个好的指标,因为泛化能力较好的局部极小值也可以尖锐。

ICLR 2018一份投稿通过一系列的消融分析证明了模型在激活空间中的单方向的依赖(单一神经元或特征图的激活)预示着模型具有良好的泛化能力。他们发现dropout不能解决这个问题,而批量正则化可以阻止单方向依赖。

结尾

收敛性的保证和大量凸优化所做的工作以及现有的想法和见解可以在不同程度上应用于非凸优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐