资源经验分享神经网络优化器总结

神经网络优化器总结

2020-03-26 | |  59 |   0

原标题: 神经网络优化器总结

来源:AI研习社    链接:https://www.yanxishe.com/TextTranslation/2138


Momentum, Nesterov Accelerated Momentum, AdaGrad, AdaDelta, RMSProp, Adam, AdaMax, AMSGrad优化器

1585191787123044.png

优化是机器学习的核心

为什么需要优化?

根据Merriam-Webster 词典,“optimize”这个词的意思是:使尽可能变得完美、有效或者有用。从这个定义我们能理解为什么神经网络需要优化。

在机器学习中,我们在训练集上进行优化,在验证集上检验效果。

02.png

我们已经有cost function了,它告诉我们模型的行为。最开始的时候,我们的模型包含了任意定义的参数,比如权重、偏置,我们需要找到能让模型对没见过的数据也能有好的预测的对应参数的状态,这需要一些机制来更新参数。

现在,我们都使用了一个基本的技术,即梯度下降。这个方法对权重的更新如下:

1585191824536372.png

注意:梯度下降指将整个训练集都作为一个epoch(比如:每次输入的数据分析后就更新参数),随机梯度下降指的是一次使用一个输入数据(比如:一个输入数据分析完就更新数据)。

关于随机梯度下降的更多信息 :

在这个算法中,我们反复训练训练集,每次遇到训练示例时,我们仅根据该单个训练示例的错误梯度更新参数。

04.png

对优化器有了基本的了解之后,现在,我们能够了解一些最先进的优化器,让我们开始吧。

动量
在局部最小值等情况下,梯度下降效果并不好。因此,在局部最小值情况下,我们让梯度下降变得缓慢些。

1585191902432983.png

Momentum (动量)是一种有助于在正确方向加速 SGD 并抑制振荡的方法。它将过去时间步长的更新矢量的一小部分添加到当前更新矢量中。

06.png  

对于梯度指向相同方向的维度 ,动量项会增加,并减少梯度变化方向维度的更新。

Nesterov Accelerated Momentum

Momentum(动量)有一个问题就是可能会在局部最小值附近由于更新步伐太大而越过该值,然后再次继续寻找局部最小值,这个过程会一直持续下去。所以,为了遏制这种情况,Nesterov提出了Nesterov accelerated momentum。

NAM背后的主要思想是,当当前的参数向量在 某个位置x处,再看看上面的动量更新,我们知道仅动量项(比如,忽略了带有梯度的第二项)就要通过mu * v  来推动参数向量。所以,如果我们想要计算梯度,我们可以将未来可能的位置x + mu * v    作为 “展望”,这个位置在我们很快将要达到的点的附近。因此,在x + mu * v  取代老的位置x是有意义的。  

1585191931768365.png

AdaGrad(Adaptive Gradient)

AdaGrad允许学习率基于参数自动更新:

1585192429169484.png

其中,Gt ∈ ℝd×d是一个对角矩阵,对角元素 i 是关于θi 直到 时间步 t 的梯度的平方和;ϵ 是一个避免分母为0的平衡项(通常取大约1e-8)。


使用AdaGrad的最大好处是,无需手动调节学习率了。只需要设置学习率为0.01,在训练的程序运行的时候,算法会在每一个时间步自动更新参数。

他最大的缺点是分母上的梯度平方的累积:由于每个增加的项都是正的,累积和将会在训练期间持续增长。这发过来导致学习速率衰减且最终变得非常小,以致于算法已经没有能力继续学习更多知识了。



AdaDelta

AdaDelta的使用消除了AdaGrad的激进性和单调减少的学习率,它使用一些固定窗口w范围内的历史梯度平方累积,代替之前的完整的历史梯度平方的累积。

1585192459329857.png

不同于保存前w个梯度平方,梯度和被递归地定义为过去所有梯度的平方的衰减平均值。

10.png

 我们设置γ 为0.9左右。

RMSProp

RMSProp 和 AdaDelta 唯一的不同是mt+1的引入。

11.png

RMSProp 和 AdaDelta 是在大致相同的时间为了解决 Adagrad 大幅降低学习率的问题被独立开发的。 RMSProp是被Geoff Hinton提出的但是还未发表论文。


Adam(Adaptive Moment Estimation)

Adam是另一种为每个参数计算学习率的算法。与其他算法最大的不同点在于,它不只是保存历史梯度的指数平均衰减(如Momentum),还保存了历史梯度平方的指数平均衰减(比如RMSProp 和 AdaDelta )。

12.png

随着mt 和 vt 被初始化为0向量,他们都以0为偏差,特别地,当他们的衰减速率很小的时候(比如,. β₁ 和 β₂ 都接近于1)。

13.png

现在,正如在其他的优化器做的一样,我们只需要写出参数更新公式即可:

14.png

AdaMax

AdaMax是Adam基于无穷范数的一个变种。在Adam中,单个权重的更新规则是将其梯度与当前和过去梯度的L^2范数(标量)成反比例缩放。改变这一点,我们可以将其推广到无穷范数:

15.png

使 p →∞ ,

16.png

        为了避免与Adam混淆,使用ut而不是vt,来定义无穷范数约束。

最后,我们现在可以将ut放入Adam中替换掉√^vₜ + ϵ :

17.png

注意:由于ut依赖于max运算,所以他不像Adam中的mt和vt那样更容易倾向于偏差0。这就是为什么我们需要为ut计算偏差校正。不错的默认值仍然是 η=0.002, β₁=0.9 和 β₂=0.999 .

AMSGrad

AMSGrad 使用的是最大历史梯度平方vt,而不是指数平均来更新参数。

18.png

完整的AMSGrad更新是:

19.png

为了简单化,作者移除了我们可以在Adam中看到的反偏移这一步。最开始引入偏移的唯一原因是因为我们不想模型变得以0为偏移,所以我们使用偏移是为了防止这个现象。

选用哪个优化器?何时使用?

并不是每一个优化器都适合任何场景,我们需要辨别哪个优化器对我们的任务是最优的。

一些优化器在机器视觉任务中工作的很好,其他的优化器在RNN中工作的很好,其中一些当 输入稀疏数据时工作的更好。

自动调节学习率的优化器最主要的好处就是我们不需要手动调节学习率,但是我们仍然可以使用默认设置取得最好的结果。

总之,RMSprop是解决了大幅衰减学习率的AdaGrad的一种拓展。这和AdaDelta非常相似,不过AdaDelta在分子更新规则中使用参数更新的均方根值。最后,Adam是在RMSprop中增加了偏移校正和动量。RMSprop, AdaDelta 和 Adam是非常相似算法,在相似的场景下都同样可以胜任。随着梯度变得更稀疏,偏差校正帮助Adam在优化的最后阶段略微优于RMSprop。

到目前为止,Adam可能是最好选择。

21.png

图片引用自 ADAM: A METHOD FOR STOCHASTIC OPTIMIZATION

在训练过程中,为了防止学习率变得很小,AdaDelta引入了固定窗口的历史梯度平方指数平均衰减的概念,然而,这种梯度的短时记忆在其他的方式中成为了障碍。Adam也使用了这种短时记忆。

已经观察到,一些小批量提供了大而重要的梯度,但这却很少发生,从而减少了它们的影响,因此导致了不好的收敛。只用AMSgrad可以解决这个问题,它使用了最大历史梯度平方而不是指数平均去更新参数。

22.png

这两幅图是在CIFARNET中的ADAM和AMSGRAD训练损失和测试损失的比较。引用来自:ON THE CONVERGENCE OF ADAM AND BEYOND

发起:Pita 校对:鸢尾 审核:唐里

参与翻译(3人):天字一号、人气呆毛选手、UPDATA

英文原文:Some State of the Art Optimizers in Neural Networks

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:Python中strip()方法的用法

下一篇:Python数据清洗终极指南

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...