10个梯度下降优化算法+备忘单 .txt2020年06月26日21时49分39秒

作者: 发表时间:2020-06-26 19:37:52 浏览人数:724

翻译:Stephen erguozi(沈阳化工大学),Intel ligenj(算法工程师),Friday,letnorton,Canghai Yisheng

梯度下降法是一种求函数最小值的优化方法,在深度学习模型的反向传播过程中,常用来更新神经网络的权值。

在本文中,我将总结当前流行的深度学习框架中常用的梯度下降算法(如tensorflow、keras、pytorch、Caffe)。本文的目的是为了便于理解和掌握这些内容,因为没有太多其他的总结,它可以作为一个“捷径”让你从头开始。

在一个线性回归问题中,我用梯度下降实现了SGD、momentum、nesterov、rmsprop和Adam来获得代码(JavaScript)

学习速率调度器与梯度下降优化的主要区别在于,梯度下降优化将学习速率乘以一个因子(梯度的函数),从而调整学习速率分量。然而,学习速率调度器将学习速率乘以一个常数或时间步长的函数,从而更新学习速率。

种方法通过将学习率乘以0到1之间的因子(例如rmsprop)来降低学习率。第二种方法通常用梯度滑动平均(也称为动量)代替纯梯度来确定下降方向。第三种方法是将二者结合起来,例如Adam和amsgrad。

图3显示了这些优化算法是如何从最简单的纯梯度下降(SGD)进化到Adam的各种变体的。一开始,SGD有两个发展方向,一个是adagrad,主要是调整学习速度。另一种是动量,主要调节梯度分量。随着进化的发展,动量和rmsprop合为一体,亚当诞生了。你可能认为我反对这种组织,但我始终理解这一点。

我在论文中统一了希腊字母和符号,这样我们就可以从一个统一的“进化”角度来看待这些优化算法

原始的随机梯度下降算法主要通过将当前梯度L/W乘以系数学习率α来更新模型权重W。

动量算法使用带动量的梯度(梯度的指数移动平均,polyak,1964)而不是当前的梯度来更新W。正如您在下面的文章中看到的,使用指数移动平均作为动量更新几乎已经成为一个行业标准。

值得注意的是,很多文章在引用moemtum算法时使用了1999年的宁倩。但该算法的原始来源是sutskever等人。经典动量算法是由polyak于1964年提出的,因此polyak的文章也被引用。(感谢詹姆斯指出这一点。)

第二个方程的最后一项是投影梯度。该值可通过使用先前的速度“向前一步”(方程式4)获得。这意味着对于这个时间步骤T,我们必须在最后的反向传播之前执行另一个正向传播。程序如下:

请注意,nesterov加速梯度下降法(nesterov,1983)的原始文件不是关于随机梯度下降的,也没有显式地使用梯度下降方程。因此,更合适的参考文献是sutskever等人的出版物。2013年,介绍了NAG在随机梯度下降中的应用。(再次感谢詹姆斯在对《黑客新闻》的评论中指出这一点。)

自适应梯度算法,也称为adagrad算法(Duchi等人,2011),通过将学习率除以S的平方根来研究学习率的组成,其中S是当前和过去的平方梯度的累积和(即直到时间t)。注意,自适应学习速率算法的梯度分量与SGD算法的梯度分量相同。

注意,这里的分母加上了ε。Keras称之为模糊因子,它是一个小的浮点值,以确保我们永远不会遇到被零除的情况。

RMS传输算法,也称为rmsprop算法(Hinton等人,2012),是在adagrad算法基础上改进的另一种自适应学习速率算法。它使用指数加权平均值,而不是平方梯度的累积和。

与rmsprop算法类似,adadelta(Zeiler,2012)是一种基于adagrad算法的自适应学习率提高算法。Adadelta应该是adaptive delta的缩写,其中delta表示当前权重和新更新权重之间的差异。

adadelta算法与rmsprop算法的区别在于,用delta的指数加权平均值D代替adadelta算法中的学习速率参数。

自适应矩估计算法,也称为Adam算法(Kingma&Ba,2014),是一种结合动量和rmsprop的算法。其工作原理是(I)使用梯度分量V、梯度的指数移动平均值(如动量)和(II)将学习率α除以S的平方根,以及平方梯度的指数移动平均值(如rmsprop)。

Adamax(Kingma&Ba,2015)是Adam算法的原始作者针对其优化设备采用的一种算法,该设备使用无限范围(因此为max)。V是梯度的指数加权平均值,S是前一个p阶梯度的指数加权平均值,类似于极大值函数,如下所示(见文中的收敛证明)。

单词Nadam是nesterov和adam优化设备名称的组合(dozat,2015)。Nesterov分量对Nadam算法的学习速度有较强的约束,对梯度的更新也有更直接的影响。一般来说,如果您想使用rmsprop或Adam,可以使用Nadam来获得更好的结果。

Nadam使用nesterov来改变上述等式中先前时刻的V,在当前时刻用V代替,以实现提前更新梯度:

我想和大家分享一些关于梯度下降优化为什么在梯度部分使用指数移动平均(EMA)和学习率部分使用均方根(RMS)的直观见解。

我们需要使用一些值来更新权重。我们的值是当前的渐变,所以让我们用它来更新权重。

但是只取当前的梯度值是不好的。我们希望我们的更新是“更好的指导”(对于模型)。让我们考虑包含以前的渐变值(在每次更新中)。

将当前梯度值与过去梯度信息相结合的一种方法是,我们可以简单地平均所有过去和现在的梯度。但这意味着每个梯度的权重是相等的。这是违反直觉的,因为在空间中,如果我们接近最小值,最近的梯度可能提供更有效的信息。

因此,最安全的方法是指数移动平均法,其中最近梯度值的权重(重要性)高于上一个值。

目的是调整学习速度。你适应什么?答案是梯度。我们需要确保的是,当渐变很大时,我们希望更新适当收缩(否则,一个巨大的值将减去当前权重!)

记住,学习率分量必须始终为正(因为学习率分量乘以梯度分量时,应该具有相同的符号)。为了确保它总是正的,我们可以取它的值或平方。当我们取电流梯度的平方时,我们可以再次取平方根并取消平方。

但就像动量一样,仅仅用电流梯度是不够的。我们希望在我们的培训(每次)的更新将给我们更好的指导(模式)。因此,我们还需要使用以前的梯度值。如上所述,我们取过去梯度的均方,然后取它们的均方根或均方根。除了adagrad(使用累积的平方梯度之和),本文中所有的优化设备都将对学习率部分执行优化。

感谢任杰、德里克、威廉·特吉、陈凯、塞伦和詹姆斯的意见、建议和指正。

免费课程~“有趣的Python:从数据挖掘到深入学习”本课程涵盖了Python介绍到CV、NLP实践等内容。这是一门非常好的深入学习入门课程,总共有932学时,总学时约13学时。。现在,人工智能研讨会将免费向社区认证用户开放这门课程。认证时只要在备注框中填写“Python”,认证通过后即可获得本课程的所有解锁权限。行动胜于心~

统计 字数: 7866 汗字: 6392 数字:30 大写字母:45 小写字母:634 符号:765 总字节数:14258 共:67行2020年06月26日21时49分39秒

Top
RELATEED CONSULTING相关咨询
选择下列产品马上在线沟通
服务时间:9:00-19:00
你可能遇到了下面的问题