精华内容
参与话题
问答
  • SGD和Adam

    千次阅读 2019-07-10 19:07:39
    按吴恩达老师所说的,梯度下降(Gradient Descent)就好比一...SGD基本公式 动量(Momentum) 参考链接:https://distill.pub/2017/momentum/ 基本的mini-batch SGD优化算法在深度学习取得很多不错的成...

    按吴恩达老师所说的,梯度下降(Gradient Descent)就好比一个人想从高山上奔跑到山谷最低点,用最快的方式(steepest)奔向最低的位置(minimum)。

    SGD基本公式

     

    动量(Momentum)

     

     

    参考链接:https://distill.pub/2017/momentum/

    基本的mini-batch SGD优化算法在深度学习取得很多不错的成绩。然而也存在一些问题需解决:

    1. 选择恰当的初始学习率很困难。

    2. 学习率调整策略受限于预先指定的调整规则。

    3. 相同的学习率被应用于各个参数。

    4. 高度非凸的误差函数的优化过程,如何避免陷入大量的局部次优解或鞍点。

     


    Adam优化器

    2014年12月,Kingma和Lei Ba两位学者提出了Adam优化器,结合AdaGrad和RMSProp两种优化算法的优点。对梯度的一阶矩估计(First Moment Estimation,即梯度的均值)和二阶矩估计(Second

    Moment Estimation,即梯度的未中心化的方差)进行综合考虑,计算出更新步长。

    主要包含以下几个显著的优点:

    1. 实现简单,计算高效,对内存需求少

    2. 参数的更新不受梯度的伸缩变换影响

    3. 超参数具有很好的解释性,且通常无需调整或仅需很少的微调

    4. 更新的步长能够被限制在大致的范围内(初始学习率)

    5. 能自然地实现步长退火过程(自动调整学习率)

    6. 很适合应用于大规模的数据及参数的场景

    7. 适用于不稳定目标函数

    8. 适用于梯度稀疏或梯度存在很大噪声的问题

     

    综合Adam在很多情况下算作默认工作性能比较优秀的优化器。

     

    Adam实现原理

    算法伪代码:

     

    Adam更新规则

    计算t时间步的梯度:

     

    首先,计算梯度的指数移动平均数,m0 初始化为0。

    类似于Momentum算法,综合考虑之前时间步的梯度动量。

    β1 系数为指数衰减率,控制权重分配(动量与当前梯度),通常取接近于1的值。

    默认为0.9

     

    下图简单展示出时间步1~20时,各个时间步的梯度随着时间的累积占比情况。

     

    其次,计算梯度平方的指数移动平均数,v0初始化为0。

    β2 系数为指数衰减率,控制之前的梯度平方的影响情况。

    类似于RMSProp算法,对梯度平方进行加权均值。

    默认为0.999

    第三,由于m0初始化为0,会导致mt偏向于0,尤其在训练初期阶段。

    所以,此处需要对梯度均值mt进行偏差纠正,降低偏差对训练初期的影响。

    第四,与m0 类似,因为v0初始化为0导致训练初始阶段vt偏向0,对其进行纠正。

    第五,更新参数,初始的学习率α乘以梯度均值与梯度方差的平方根之比。

    其中默认学习率α=0.001

    ε=10^-8,避免除数变为0。

    由表达式可以看出,对更新的步长计算,能够从梯度均值及梯度平方两个角度进行自适应地调节,而不是直接由当前梯度决定。


    作者:Emerson_G
    链接:https://www.jianshu.com/p/aebcaf8af76e
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • SGD和Adam(转载)

    2020-01-14 15:48:03
    https://blog.csdn.net/weixin_42398658/article/details/84525917

    https://blog.csdn.net/weixin_42398658/article/details/84525917

    另在一篇文章中,我们介绍了随机梯度下降的细节以及如何解决陷入局部最小值或鞍点等问题。在这篇文章中,我们看看另一个困扰神经网络训练的问题,即病态曲率。

    虽然局部最小值和鞍点可以阻止我们的训练,但是病态曲率可以使训练减慢到机器学习从业者可能认为搜索已经收敛到次优极小值的程度。让我们深入了解病理曲率是什么。

    病态曲率
    考虑以下损失轮廓。

                                                                               病态曲率

    你看,我们在进入以蓝色标记的山沟状区域之前随机开始。颜色实际上表示损失函数在特定点处的值有多大,红色表示最大值,蓝色表示最小值。我们想要达到最小值点,为此但需要我们穿过山沟。这个区域就是所谓的病态曲率。理解要为什么它被称为病态,让我们深入研究。下图是病态曲率放大后的图像,看起来像..

     

    要理解这里发生的事情并不是很难。梯度下降沿着山沟的山脊反弹,向极小的方向移动较慢。这是因为脊的表面在W1方向上弯曲得更陡峭。

    如下图,考虑在脊的表面上的一个点梯度。该点的梯度可以分解为两个分量,一个沿着方向w1,另一个沿着w2。梯度在w1方向上的分量要大得多,因此梯度的方向更靠近w1,而不是朝向w2(最小值位于其上)。

     

    通常情况下,我们使用低学习率来应对这样的反复振荡,但在病态曲率区域使用低学习率,可能要花很多时间才能达到最小值处。事实上,有论文报告,防止反复振荡的足够小的学习率,也许会导致从业者相信损失完全没有改善,干脆放弃训练。

    大概,我们需要找到一种方法,首先缓慢地进入病态曲率的平坦底部,然后加速往最小值方向移动。二阶导数可以帮助我们来到来到赖这一点一一。

    牛顿法
    下降梯度的英文一阶优化方法。它只考虑损失函数的一阶导数而不是较高的导数。这基本上意味着它没有关于损失函数曲率的线索。它可以判断损失是否在下降和速度有多快,但无法区分曲线是平面,向上弯曲还是向下弯曲。

    上图三条曲线,红点处的梯度都是一样的,但曲率大不一样。解决方案?考虑二阶导数,或者说梯度改变得有多快。

    使用二阶导数解决这一问题的一个非常流行的技术是牛顿法(Newton's Method)。为了避免偏离本文的主题,我不会过多探究牛顿法的数学。相反,我将尝试构建牛顿法的直觉。

    牛顿法可以提供向梯度方向移动的理想步幅。由于我们现在具备了损失曲面的曲率信息,步幅可以据此确定,避免越过病态曲率的底部。

    牛顿法通过计算海森矩阵做到这一点.Hessian矩阵是损失函数在所有权重组合上的二阶导数的矩阵。

    黑森州提供了损失曲面每一点上的曲率估计。正曲率意味着随着我们的移动,损失曲面变得不那么陡峭了。负曲率则意味着,损失曲面变得越来越陡峭了。

    注意,如果这一步的计算结果是负的,那就意味着我们可以切换回原本的算法。这对应于下面梯度变得越来越陡峭的情形。

    然而,如果梯度变得越来越平坦,那么我们也许正向病态曲率的底部移动。这时牛顿算法提供了一个修正过的学习步幅,和曲率成反比。换句话说,如果损失曲面变得不那么陡峭,学习步幅就下降。 

    为何我们不常使用牛顿法?
    你已经看到公式中的海森矩阵了.Hessian矩阵需要我们计算损失函数在所有权重组合上的梯度。也就是说,需要做的计算的数量级是神经网络所有权重数量的平方。

    现代神经网络架构的参数量可能是数亿,计算数亿的平方的梯度在算力上不可行。

    虽然高阶优化方法在算力上不太可行,但二阶优化关于纳入梯度自身如何改变的想法是可以借鉴的。虽然我们无法准确计算这一信息,但我们可以基于之前梯度的信息使用启发式算法引导优化过程。(这个大家可以看看神经网络与机器学习这本书,那里有详细的讲解,当然需要你拥有很好的数学基础和理解能力)

    随机梯度下降( Stochastic Gradient Descent,SGD )
    SGD的学习原理很简单就是选择一条数据,就训练一条数据,然后修改权值算法过程如下:

    随机梯度下降法:

    给定数据集,数据集标记为:,学习器为,学习率

              对于迭代足够多次

                      {

                                 1.随机选择数据:

                                 2.计算损失梯度:

                                 3.修改权值: 

                       }

    SGD算法在训练过程中很有可能选择被标记错误的标记数据,或者与正常数据差异很大的数据进行训练,那么使用此数据求得梯度就会有很大的偏差,因此SGD在训练过程中会出现很强的随机现象。如何解决呢?

    可以多选择几个数据在一起求梯度和,然求均值,这样做的好处是即使有某条数据存在严重缺陷,也会因为多条数据的中和而降低其错误程度。在上述的的算法中,率学习通常的英文固定的值,但是在实际中,我们通常希望学习率随着训练次数增加而减小,减小的原因上面也说了减少振荡,这里先给出一种调节学习率的公式:

                                                  

    上面是线性学习率调整规则,通常ķ的取值和训练次数有关,如果训练次数为上百次,则ķ要大于100,而b的值可以粗略的设置为百分之一的初始学习率,学习率初始值一般作为超参数进行设置,一般采取尝试策略。

    学习率最小批量梯度下降算法

    初始化:

    给定数据集,数据集标记为:,随机采样m条数据,训练周期k,学习率衰减最低值b,学习器为,初始学习率

    训练:

    对于       

            {

                 1.随机采样几条数据:

                 2.计算采样数据平均损失梯度:

                 3.计算衰减学习率: 

                 4.修改权值:

            }

    效果如下图

    动量学习法
    和SGD一起使用的非常流行的技术称为Momentum。动量也不仅使用当前步骤的梯度来指导搜索,而是累积过去步骤的梯度以确定要去的方向。那么什么是动量学习法呢?

    在物理学中,动量的英文与物体的质量、速度相关的物理量。一般而言,一个物体的动量指的的是这个物体在它运动方向上保持运动的趋势。动量是矢量这里我们可以把梯度理解成力,力是有大小和方向的,而且力可以改变速度的大小和方向,并且速度可以累积。这里把权值理解成速度,当力(梯度)改变时就会有一段逐渐加速或逐渐减速的过程,我们通过引入动量就可以加速我们的学习过程,可以在鞍点处继续前行,也可以逃离一些较小的局部最优区域下面类比物理学定义这里的动量:

           物理学中,用变量v表示速度,表明参数在参数空间移动的方向即速率,而代价函数的负梯度表示参数在参数空间移动的力,根据牛顿定律,动量等于质量乘以速度,而在动量学习算法中,我们假设质量的单位为1,因此速度v就可以直接当做动量了,我们同时引入超参数,其取值在【0,1】范围之间,用于调节先前梯度(力)的衰减效果,其更新方式为:

                                                                                                    (1)

                                                 

    根据上面的随机梯度下降算法给出动量随机梯度下降算法;

    初始化:

    给定数据集,数据集标记为:,,初始速度,随机采样m条数据,训练周期k,学习率衰减最低值b,学习器为,初始学习率,初始动量参数为

    训练:

              对于  

                  {

                            1.随机采样米条数据:

                             2.计算采样数据平均损失梯度:

                             3.更新速度:

                             4.更新参数:

                  }

     在随机梯度的学习算法中,每一步的步幅都是固定的,而在动量学习算法中,每一步走多远不仅依赖于本次的梯度的大小还取决于过去的速度。速度v是累积各轮训练参的梯度,其中越大,依赖以前的梯度越大。假如每轮训练的梯度方向都是相同的,和小球从斜坡滚落,由于但衰减因子的存在,小球并不会一直加速,而是达到最大速度后开始匀速行驶,这里假设每轮获得的梯度都是相同的,那么速度最大值为(按照(1)计算可得):

                                                                   

    从上式可以看到当= 0.9时,最大速度相当于梯度下降的10倍(带进上式去算可得),通常可取0.5,0.9,0.99,情况一般的调整没有调整的那么重要适当。取值即可。

    图形如下:

    好到这里大家懂了动量的学习机理,我们继续看看那篇博文:

    梯度下降的方程式修改如下。

    上面的第一个等式就是动量,动量等式由两部分组成,第一项是上一次迭代的动量,乘以“动量系数”。

     如果我们将v的初始值设置为0并选择我们的系数为0.9,则后续更新方程式将如下所示。

    我们看到,后续的更新保留了之前的梯度,但最近的梯度权重更高。

    下面我们来看看动量法如何帮助我们缓解病态曲率的问题。下图中,梯度大多数发生更新在字形方向上,我们将每次更新分解为W1和W2方向上的两个分量。如果我们分别累加这些梯度的两个分量,那么W1方向上的分量将互相抵消,而W2方向上的分量得到了加强。 

    也就是说,基于动量法的更新,积累了W2方向上的分量,清空了W1方向上的分量,从而帮助我们更快地通往最小值。从这个意义上说,动量法也有助于抑制振荡。

    动量法同时提供了加速度,从而加快收敛。但你可能想要搭配模拟退火,以免跳过最小值。当我们使用动量优化算法的时候,可以解决小批量SGD优化算法更新幅度摆动大的问题,同时可以使得网络的收敛速度更快。

    在实践中,动量系数一般初始化为0.5,并在多个时期后逐渐退火至0.9。

    AdaGrad(自适应梯度算法)
    前面的随机梯度和动量随机梯度算法都是使用全局的学习率,所有的参数都是统一步伐的进行更新的,上面的例子中我们是在二维权值的情况,如果扩展到高维,大家可想而知,我么你的优化环境将很复杂,比如你走在崎岖额深山老林林,到处都是坑坑洼洼,如果只是走一步看一步(梯度下降),或者快速奔跑向前(动量学习),那我们可能会摔的头破血流,怎么办呢如果可以针对每个参数设置学习率可能会更好,让他根据情况进行调整,这里就先引出自适应梯度下降?

    AdaGrad其实很简单,就是将每一维各自的历史梯度的平方叠加起来,然后更新的时候除以该历史梯度值即可。如针对第我个参数,算法如下。

    定义首先一个量用于累加梯度的平方,如下:

                                                       

    平方的原因是去除梯度符号的干扰,防止抵消,更新时:

                                                      

            其中= 10 ^ -7,防止数值溢出。

    从上式可以看出,AdaGrad使的参数在累积的梯度较小时()就会放大学习率,使网络训练更加快速。在梯度的累积量较大时()就会缩小学习率,延缓网络的训练,简单的来说,网络刚开始时学习率很大,当走完一段距离后小心翼翼,这正是我们需要的。但是这里存在一个致命的问题就是AdaGrad容易受到过去梯度的影响,陷入“过去“无法自拔,因为梯度很容易就会累积到一个很大的值,此时学习率就会被降低的很厉害,因此AdaGrad很容易过分的降低学习率率使其提前停止,怎么解决这个问题呢?RMSProp算法可以很好的解决该问题。

    RMSProp(均方根支柱)
    同样,RMSProp可以自动调整学习率。还有,RMSProp为每个参数选定不同的学习率。

    虽然AdaGrad在理论上有些较好的性质,但是在实践中表现的并不是很好,其根本原因就是随着训练周期的增长,学习率降低的很快。而RMSProp算法就在AdaGrad基础上引入了衰减因子,如下式,RMSProp在梯度累积的时候,会对“过去”与“现在”做一个平衡,通过超参数进行调节衰减量,常用的取值为0.9或者0.5(这一做法和SGD有异曲同工之处)

                                                              

    参数更新阶段,和AdaGrad相同,学习率除以历史梯度总和即可。

                                                               

    实践中,RMSProp更新方式对深度学习网络十分有效,是深度学习的最有效的更新方式之一。

    图形如下:

    下面接着那篇博客看,(这里还是通过动量过来的,原理是一样的,因为都是梯度的累加。这里大家不用迷惑,当你知道本质的东西以后,就知道通过表面看本质的的意义了)

    在第一个等式中,类似之前的动量法,我们计算了梯度平方的指数平均。由于我们为每个参数单独计算,这里的梯度GT表示正更新的参数上的梯度投影。

    第二个等式根据指数平均决定步幅大小。我们选定一个初始学习率η,接着除以平均数。在我们上面举的例子中,W1的梯度指数平均比W2大得多,所以W1的学习步幅比W2小得多。这就帮助我们避免了脊间振荡,更快地向最小值移动。

    第三个等式不过是权重更新步骤。

    上面的等式中,超参数ρ一般定为0.9,但你可能需要加以调整。等式2中的ε是为了确保除数不为零,一般定为1E-10。

    注意RMSProp隐式地应用了模拟退火。在向最小值移动的过程中,RMSProp会自动降低学习步幅,以免跳过最小值。

    Adam(自适应动量优化)
    到目前为止,我们已经看到RMSProp和动量采用对比方法。虽然动量加速了我们对最小值方向的搜索,但RMSProp阻碍了我们在振荡方向上的搜索.Adam通过名字我们就可以看出他是基于动量和RMSProp的微调版本,该方法是目前深度学习中最流行的优化方法,在默认情况尽量使用亚当作为参数的更新方式

    首先计算当前最小批量数据梯度。

                                                          

    和动量学习法一样,计算衰减梯度五:

                                                          

    和RMSProp算法类似,计算衰减学习率R:

                                                         

    最后更新参数:

                                                         

    上面就是RMSProp和动量的有机集合,使他们的优点集于一身,是不是很漂亮,但还是有一个问题就是开始时梯度会很小,R和v经常会接近0,因此我们需要初始给他一个?合适的值,这个值怎么给才合适呢先看下面的公式:

                                                   

    其中吨表示训练次数,刚开始动很大,随着训练次数吨的增加VB逐渐趋向于V,R类似下面给出总体的算法结构。

    初始化:

     给定数据集,数据集标记为:,初始速度,随机采样m条数据,训练周期k,学习器为,初始学习率,初始动量参数为,学习衰减参数,

    训练:

            用于   :

                  {

                           1.随机采样米条数据:

                           2.计算当前采样数据的梯度:

                           3.更新当前速度:

                           4.更新当前学习率:

                           5.更新训练次数: 

                                                  

                           6.更新参数:

                   }         

     好,我们继续看看那篇博客:

    这里,我们计算了梯度的指数平均和梯度平方的指数平均(等式1和等式2)。为了得出学习步幅,等式3在学习率上乘以梯度的平均(类似动量),除以梯度平方平均的均方根(类似RMSProp)。等式4是权重更新步骤。

    超参数β1一般取0.9,β2一般取0.99.ε一般定为1E-10。

    结语
    本文介绍了三种应对病态曲率同时加速训练过程的梯度下降方法。

    在这三种方法之中,也许动量法用得更普遍,尽管从论文上看Adam更吸引人。经验表明这三种算法都能收敛到给定损失曲面的不同的最优局部极小值。然而,动量法看起来要比Adam更容易找到比较平坦的最小值,而自适应方法(自动调整学习率)倾向于迅速地收敛于较尖的最小值。比较平坦的最小值概括性更好。

     尽管这些方法有助于我们训练深度网络难以控制的损失平面,随着网络日益变深,它们开始变得不够用了。除了选择更好的优化方法,有相当多的研究试图寻找能够生成更平滑的损失曲面的架构。批量归一化(Batch Normalization)和残差连接(Residual Connections)正是这方面的两个例子。我们会在后续的文章中详细介绍它们。但这篇文章就到此为止了。欢迎在评论中提问。
    ————————————————
    版权声明:本文为CSDN博主「zsffuture」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_42398658/article/details/84525917

    展开全文
  • 作者:Less Wright编译:ronghuaiyang导读给大家介绍一个新的深度学习优化器,Ranger,同时具备RAdamLookAhead的优点,一行代码提升你的模型能力。Ra...

    作者:Less Wright

    编译:ronghuaiyang

    导读

    给大家介绍一个新的深度学习优化器,Ranger,同时具备RAdam和LookAhead的优点,一行代码提升你的模型能力。

    Ranger 优化器结合了两个非常新的发展(RAdam + Lookahead)到一个单一的优化器中。为了证明它的有效性,我们的团队最近使用 Ranger 优化器在 FastAI 全球排行榜上获得了 12 个排行榜记录。

    Lookahead 是 Ranger 优化器的其中一半,是由著名的深度学习研究员 Geoffrey Hinton 在 2019 年 7 月的一篇新论文“LookAhead optimizer: k steps forward, 1 step back“中介绍的。LookAhead 的灵感来自于最近在理解神经网络损失曲面方面的进展,并提出了一种全新的稳定深度学习训练和收敛速度的方法。基于 RAdam(Rectified Adam)在深度学习的方差管理方面取得的突破,我发现将 RAdam + LookAhead 组合在一起(Ranger)可以产生一个梦之队,可以得到甚至比单独的 RAdam 更好的优化器。

    Ranger 优化器是一个易于使用和高效的单一代码库(加载/保存和一个循环处理的所有参数的更新),集成到了 FastAI 中,Ranger 的源代码你可以直接拿来用:https://github.com/lessw2020/Ranger-Deep-Learning-Optimizer。

    Adam,SGD和Look Ahead + Adam/SGD在LSTM上的对比

    为什么 RAdam 和 LookAhead 是互补的

    可以说,RAdam 为优化器在开始训练时提供了最好的基础。RAdam 利用一个动态整流器来根据变化调整 Adam 的自适应动量,针对当前数据集,有效地提供了一个自动 warm-up,,以确保可以得到一个扎实的训练开头。

    LookAhead 的灵感来自于最近对深度神经网络损失曲面的理解,并为在整个训练过程中进行健壮和稳定的探索提供了突破。

    引用 LookAhead 团队的话说,LookAhead“减少了对大量超参数调优的需求”,同时“以最小的计算开销在不同深度学习任务之间实现更快的收敛”。

    因此,两者都在深度学习优化的不同方面提供了突破,并且两者的结合具有高度的协同性,可能为你的深度学习结果提供了两种改进的最佳效果。因此,对更稳定和更健壮的优化方法的追求将继续下去,通过结合两个最新的突破(RAdam + LookAhead),Ranger 的集成有望为深度学习提供另一个进步。

    Hinton 等人— “我们通过实验证明,即使在 ImageNet、CIFAR-10/100、神经机器翻译和 Penn Treebank 上使用缺省超参数设置, LookAhead 也可以显著提高 SGD 和 Adam 的性能。

    由于LookAhead具有双向探索的设置,因此对比SGD,Lookahead可以优化到距离minima更近的位置。

    因此,本文在前面的 RAdam 介绍的基础上,解释了什么是 LookAhead,以及如何将 RAdam 和 LookAhead 合并到一个单一的优化器 Ranger 中,从而获得新的高精度。在我测试的前 20 个 epoch 中,我获得了一个新的高准确率,比目前的 FastAI 排行榜高出 1%。

    Ranger的第一次测试达到了93%

    FastAI排行榜,20个epochs, 92%

    更重要的是,任何人都可以使用 Ranger,看看它有没有提高你的深度学习结果的稳定性和准确性!

    因此,让我们深入研究驱动 Ranger 的两个组件 — RAdam 和 LookAhead:

    1、什么是 RAdam (Rectified Adam):

    我将你请参阅我的前一篇文章,里面有更多的 RAdam 细节,这里有个简短的总结,开发 RAdam 的研究人员调查了为什么自适应动量优化器(Adam,RMSProp 等等),所有这些都需要 warmup,否则他们在训练开始前就会陷入糟糕的/可疑的局部最佳状态。

    原因是在开始训练时,当优化器没有看到足够的数据来做出准确的自适应动量决策时,数据的方差就会出现非常大的情况。因此,Warmup 可以减少训练开始时的方差……但即使是决定 Warmup 的程度,也需要根据数据集改变手动调整。

    因此,Rectified Adam 是通过使用一个整流函数来确定一个“启发式的 Warmup”,这个整流函数是基于实际遇到的方差来确定的。整流器动态的关闭和开启自适应动量,这样它就不会全速跳跃,直到数据的方差稳定下来。

    通过这样做,就避免了手动热身的需要,并自动稳定了训练。

    一旦方差稳定下来,RAdam 基本上就变成了 Adam,甚至是 SGD。因此,RAdam 的贡献是在训练的开始。

    读者注意到,在结果部分,虽然 RAdam 超过了 Adam,但从长远来看,SGD 最终可以赶上并超过 RAdam 和 Adam 的最终精度。

    这就是我们现在要使用 LookAhead 的地方,整合一种新的探索机制,即使在 1000 个 epochs 之后也能超越 SGD。

    Lookahead使用alpha= 0.5和变化学习率 vs SGD,1000个epoch

    2、 Lookahead — 用于探索损失超平面的小伙伴 =更快、更稳定的探索和收敛。

    正如 Lookahead 的研究人员所指出的,目前,大多数成功的优化器都是在 SGD 的基础上进行优化的

    1 、自适应动量(Adam, AdaGrad)

    2 、一种加速形式(Nesterov 动量或 Polyak Heavy Ball)

    来完善探索和训练过程,最终趋同。

    然而,Lookahead 是一种新的发展,它维持两组权重,然后在它们之间进行插值 — 实际上,它允许一组更快的权重“向前看”或探索,而较慢的权重留在后面,以提供更长期的稳定性。

    结果减少了训练过程中的方差,大大降低了对次优超参数的敏感性,并减少了对大量超参数调优的需要。这是在完成各种深度学习任务时实现更快的收敛。换句话说,这是一个令人印象深刻的突破。

    通过简单的类比,可以将 LookAhead 理解为以下内容。想象你在一个山顶,周围有各种各样的落差。其中一条通往成功的底部,而其他的只是倒霉的裂缝。

    你自己独自探索是困难的,因为你必须选一条路下去,并假设它是一个死胡同,然后再找路出来。

    但是,如果你有一个朋友,他呆在或接近顶部,如果你选的路是好的,就帮助你备份,这样你可能会更好的找到最优的路径,因为探索全地形会更快,困倒霉的裂缝的可能性会更小。

    这就是 LookAhead 的基本功能。它保留一个额外的权值副本,然后让内部化的“更快”优化器(对于 Ranger,即 RAdam)进行 5 或 6 个 batch 的搜索。batch 间隔由 k 参数指定。

    当 k 个 batch 的探索完成时,LookAhead 将它保存的权值与 RAdam 的最新权值之间的差值乘以一个 alpha 参数(默认情况下为 0.5),r 然后更新 RAdam 的权值。

    Range代码显示Lookahead更新RAdam的参数

    结果实际上是内部优化器(在本例中是 RAdam)的快速移动平均和通过 LookAhead 获得的较慢的指数移动平均的综合效应。速度快的人探索,而速度慢的人则充当拉回或稳定机制 — 通常在速度快的人探索时留在后面,但在某些情况下,当速度快的人继续探索时,速度慢的人会把速度快的人推下一个更有希望的斜坡。

    由于具有 LookAhead 的安全性,优化器可以更充分地探索前景,而不必担心陷入困境。

    这种方法与目前使用的两种主要方法完全不同——自适应动量或“heavy ball”/Nesterov 类型动量。

    因此,LookAhead 在探索和寻找“下降的方式”方面更胜一筹,因为它增强了训练的稳定性,甚至超过了 SGD。

    3、Ranger — 一个集成的代码库,提供了把 RAdam 和 LookAhead 结合在一起的优化器

    Lookahead 可以和任何优化器一起使用,作为“fast”权值,论文中使用的是 vanilla Adam,因为 RAdam 当时还不可用。

    LookAhead的PyTorch集成

    然而,为了便于代码集成,简化用法,我合并了成一个单一的优化器,名为 Ranger。

    我个人看到的ImageNette最高的20个epoch的分数 — 实际上是Ranger的第一次运行。(92%是目前的排行榜)。还要注意稳定的训练进度。

    4、现在就来用 Ranger 吧!

    在 github 上有几个 LookAhead 的实现,我从 LonePatient 的一个开始,因为我喜欢它简洁的代码,然后在此基础上构建。RAdam,当然来自官方的 RAdam github 代码库。

    使用步骤:

    1 、 把 ranger.py 拷贝到你的文件夹中

    2 、 import ranger:

    3 、使用 FastAI 构建一个训练准备使用 Ranger。

    4 、开始测试!

    LookAhead 参数:

    k parameter :— 这个参数控制了在与 LookAhead 权值合并之前要运行多少个 batch,常见的默认值是 5 或者 6,论文中使用到了 20。

    alpha = 这个参数控制了与 LookAhead 参数差异更新的百分比。Hinton 等人做了一个强有力的证明 0.5 可能是理想值,但值得做个简短的实验验证一下。这篇论文提到的一个未来的想法可能是把 k 和或 alpha 放在一个基于训练进展程度的时间表上。

    总结

    两个独立的研究团队在实现快速、稳定的深度学习优化算法的目标上取得了新的突破。我发现,通过结合这两个,RAdam + LookAhead,产生了一个增强的优化器(Ranger),并在 ImageNette 验证了运行 20 个 epoch 分数的新高。

    需要进一步的测试来优化 LookAhead 的 k 参数和 RAdam 学习率 ,但 LookAhead 和 RAdam 都减少了在达到 state of the art 之前的手动超参数调优,应该可以帮助你得到最好的训练结果。

    END

    英文原文:https://medium.com/@lessw/new-deep-learning-optimizer-ranger-synergistic-combination-of-radam-lookahead-for-the-best-of-2dc83f79a48d

    推荐原创干货阅读:  

     聊聊近状, 唠十块钱的

    【Deep Learning】详细解读LSTM与GRU单元的各个公式和区别

    【手把手AI项目】一、安装win10+linux-Ubuntu16.04的双系统(全网最详细)

    【Deep Learning】为什么卷积神经网络中的“卷积”不是卷积运算?

    【TOOLS】Pandas如何进行内存优化和数据加速读取(附代码详解)

    【TOOLS】python3利用SMTP进行邮件Email自主发送

    【手把手AI项目】七、MobileNetSSD通过Ncnn前向推理框架在PC端的使用

    【时空序列预测第一篇】什么是时空序列问题?这类问题主要应用了哪些模型?主要应用在哪些领域?

    公众号:AI蜗牛车

    保持谦逊、保持自律、保持进步

    个人微信

    备注:昵称+学校/公司+方向

    拉你进AI蜗牛车粉丝群

    点个在看,么么哒!

    展开全文
  • 2017年深度学习优化算法最新进展:如何改进SGD和Adam方法 转载的文章,把个人觉得比较好的摘录了一下 AMSGrad 这个前期比sgd快,不能收敛到最优。 sgdr 余弦退火的方案比较好 最近的一些研究(Dozat and Manning...

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

    转载的文章,把个人觉得比较好的摘录了一下

    AMSGrad 这个前期比sgd快,不能收敛到最优。

    sgdr 余弦退火的方案比较好

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

    关于这个,在yolov3的环境里,我试了一下,没有发现更好

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

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

     

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

    随机梯度下降(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:

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

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

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

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

    其中,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方法的更新过程如下,这里不带有偏差校正估计:

    实验表明,在小数据集和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,这可以说对学习率η来说是最精细的退火方案之一:

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

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

    热重启(warm restarts) 带重启的SGD方法

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

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

    图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优化在误差曲面上的性能与快照集成过程的性能差异。

    图2:SGD与快照集成

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

    带重启的Adam方法

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

    建议开始时选取较小的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所示。

    图3:神经优化搜索

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

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

    AddSign定义如下:

    其中,α通常设置为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/

    展开全文
  • 原作 Sebastian Ruder 王小新 编译自 ruder.io  ...随机梯度下降(SGD)方法是1951年由RobbinsMonro提出的[1],至今已有60年历史。在当前的深度学习研究中,这种方法至关重要,一般被用在反向传播过程中。 近年
  • SGDadam

    2019-08-20 14:47:23
    在此前的工作中,自己通常就是无脑「Adam 大法好」,而对算法本身的内涵不知所以然。一直希望能抽时间系统的过一遍优化算法的发展历程,直观了解各个算法的长处短处。这次正好借着作业的机会,补一补课。本文主要...
  • 优化器,sgdadam

    2018-08-24 01:56:00
    首先定义:待优化参数:,目标函数:,初始学习率。...根据历史梯度计算一阶动量二阶动量:, 计算当前时刻的下降梯度: 根据下降梯度进行更新: sgd: 先来看SGDSGD没有动量的概念,也就...
  • 各种神经网络优化算法:从梯度下降到Adam方法 ...在调整模型更新权重偏差参数的方式时,你是否考虑过哪种优化算法能使模型产生更好且更快的效果?应该用梯度下降,随机梯度下降,还是Adam方法? 这篇文章介...
  • 文章目录SGD,Adam,momentum等优化算法比较一、最基本的优化算法1.SGD2.Momentum二、自适应参数的优化算法3.RMSprop4.Adam三、二阶近似的优化算法5.牛顿法及拟牛顿法 SGD,Adam,momentum等优化算法比较 1.选择哪种...
  • 优化器的比较几种常见优化器SGD(Stochastic Gradient Descent)Mini-batch Gradient Descent...SGD基本上已经被弃用了,因为其效果其他优化器相比实在差太多了,不仅速度比较慢,而且还容易停止训练。今天用mmdetec
  • SGD ,Adam,momentum等优化算法比较

    千次阅读 2018-06-03 11:20:58
    深度学习优化算法经历了 SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam这样的发展历程。优化算法通用框架:首先定义:待优化参数:w ,目标函数: f(w),...
  • Gradient Descent 其算法变种4. Vanilla SGD5. SGD with Momentum6. Nesterov Accelerated Gradient7. Adagrad8. AdaDelta9. RMSprop10. Adam11. NAdam12. 选择使用哪种优化算法13. 可视化分析14. Referenc...
  • 采用何种方式对损失函数进行迭代优化,这是机器学习的一大主题之一,当一个机器学习问题有了具体的模型评估策略,所有的机器学习问题都可以形式化为一个最优化问题。这也是为什么我们说优化理论凸优化算法等学科...
  • SGD系列 1)Batch gradient descent(批量梯度下降)   在整个数据集上 ...  随机梯度下降(SGD批量梯度下降(BGD)的区别。SGD 从数据集中拿出一个样本,并计算相关的误差梯度,而批量梯度下降使用所有...
  • 本文以下内容假设读者已经了解机器学习基本知识,梯度下降的原理。 Batch gradient descent 梯度更新规则: BGD 采用整个训练集的数据来计算 cost function 对参数的梯度:   缺点: 由于这种方法是在一次...
  • Adam优化算法RMSprop算法 adam算法:结合动量梯度下降RMSprop算法; 深度学习——优化器算法Optimizer详解 从 SGDAdam —— 深度学习优化算法概览(一) 从 SGDAdam —— 深度学习优化算法概览(二) .....
  • 近年来,AI大潮汹涌澎湃,包括机器学习,深度...想要入门机器学习深度学习,梯度下降是你绕不过的坑,但今天本文的任务就是要引领大家彻底搞懂梯度下降,在学习中避免掉坑! 梯度下降算法(引言) 训练神经网...
  • sgd优化器和Adam优化器之间的区别

    千次阅读 2019-07-26 20:18:30
    Adam = Adaptive + Momentum,顾名思义Adam集成了SGD的一阶动量RMSProp的二阶动量。 参考: https://blog.csdn.net/q295684174/article/details/79130666
  • Adam 算法根据损失函数对每个参数的梯度的一阶矩估计二阶矩估计动态调整针对于每个参数的学习速率。TensorFlow提供的tf.train.AdamOptimizer可控制学习速度。Adam 也是基于梯度下降的方法,但是每次迭代参数的学习...
  • 一种优化器,它可以像Adam一样快速地训练,也可以像sgd一样训练,用于在cv、nlp等领域的各种流行任务上开发最先进的深度学习模型。北大提出全新优化算法AdaBound。
  • AdaBelief 论文链接:https://arxiv.org/pdf/2010.07468.pdf 论文页面:https://juntang-zhuang.github.io/adabelief/ 代码链接:https://github.com/juntang-zhuang/Adabelief-Optimizer
  • Adam 这个名字来源于adaptive moment estimation,自适应矩估计,...Adam 算法根据损失函数对每个参数的梯度的一阶矩估计二阶矩估计动态调整针对于每个参数的学习速率。TensorFlow提供的tf.train.AdamOptimize...
  • 随机最速下降法(SGD)与AdamOptimizer

    万次阅读 2018-02-22 12:03:11
    Adam 这个名字来源于adaptive moment estimation,自适应矩估计,如果...Adam 算法根据损失函数对每个参数的梯度的一阶矩估计二阶矩估计动态调整针对于每个参数的学习速率。TensorFlow提供的tf.train.AdamOptimize...

空空如也

1 2 3 4 5 ... 19
收藏数 367
精华内容 146
热门标签
关键字:

sgd和adam