深度学习之图像分类(二)优化器

一、优化器

优化器有什么作用?

深度学习模型通过引入损失函数,用来计算目标预测的错误程度。根据损失函数计算得到的误差结果,需要对模型参数(即权重和偏差)进行很小的更改,以期减少预测错误。但问题是如何知道何时应更改参数,如果要更改参数,应更改多少?这就是引入优化器的时候了。简单来说,优化器可以优化损失函数,优化器的工作是以使损失函数最小化的方式更改可训练参数,损失函数指导优化器朝正确的方向移动。

优化器即优化算法是用来求取模型的最优解的,通过比较神经网络自己预测的输出与真实标签的差距,也就是Loss函数。为了找到最小的loss(也就是在神经网络训练的反向传播中,求得局部的最优解),通常采用的是梯度下降(Gradient Descent)的方法,而梯度下降,便是优化算法中的一种。总的来说可以分为三类,一类是梯度下降法(Gradient Descent),一类是动量优化法(Momentum),另外就是自适应学习率优化算法。

梯度的数学含义:梯度是一个矢量,表示某一函数在该点处的方向导致沿着该方向取得最大值,即该函数在该点处沿着该方向变化最快,变化率最大。

在多变量函数中,梯度是一个方向。梯度的方向指出了函数在给定点上升最快的方向,或者说知音楼函数增大的方向,因此我们只考虑向梯度的反方向走,就至少能到极小值。

梯度给我们指引上升的方向,我们始终沿着梯度最大的反方向走就可以。

二、各类优化器

1.梯度下降法:

 1.1标准梯度下降(GD)

评价:标准梯度下降方法主要有两个缺点:

训练速度慢:每走一步就要计算调整下一步的方向,下山的速度慢。在应用于大型数据集中,每输入一个样本都要更新一次参数,且每次迭代都要遍历所有样本。会使得训练过程极其缓慢,需要花费很长时间才能得到收敛解。这样就产生了许多比较新奇的优化器(SGD,BGD,Mini-Batch GD)等。批量梯度下降法(BGD)、随机梯度下降法(SGD)、小批量下降法。

容易陷入局部最优解:由于在有限视距内寻找下山的反向。当陷入平坦的洼地,会误以为到了最低点,从而不会继续往下走。所谓的局部最优解就是鞍点。落入鞍点,梯度为零,是的模型不会再继续更新。

1.2随机梯度下降(SGD)

优点:

        虽然SGD需要走很多步的样子,但是对梯度的要求很低(计算梯度的速度快)。而对于引入噪声,大量的理论和实践工作表明,只要噪声声音不是特别大SGD都可以做到很好的收敛。

        应用于大型数据集时,训练速度很快,比如每次从百万数据中,取出几百个数据点,算一个SGD的强度,更新一下模型参数。相比于标准梯度下降的遍历全部样本,每次输入一个样本,都会对所有参数进行求导,然后进行更新要快的多。

缺点:

         SGD在随机选择梯度的同时会引入噪声,使得权重更新的方向不一定正确。此外,SGD也没有克服局部最优解的问题。

1.3小批量梯度下降法(MBGD)

评价:

  1. 优点:使用Mini-batch的时候,可以收敛的很快,具有一定的摆脱局部最优的能力
  2. 缺点:在随机选择梯度的同时会引入噪声,使得权重更新的方向不一定正确。不能解决局部最优解的问题

 1.4传统梯度优化的不足(BGD,SGD,MBGD)

BGD在训练的时间选用所有的数据激进行计算,SGD在训练的时间只选择一个数据进行训练,而MBGD在训练的时间只选择一小部分数据进行训练。这三种优化算法在训练是选择的数据量不同,但是他们在进行参数优化时是相同的。

   这种梯度更新算法简洁,当学习率取值恰当时,可以收敛到全面最优点(凸函数)或局部最优点(非凸函数)。但其还有很大的不足点:

1、对超参数学习率比较敏感(过小导致收敛速度过慢,过大又越过极值点)。

2、学习率除了敏感,有时还会因其在迭代过程中保持不变,很容易造成算法被卡在鞍点的位置。

3、在较平坦的区域,由于梯度接近于0,优化算法会因误判,在还未到达极值点时,就提前结束迭代,陷入局部极小值。

 三、动量优化算法

 动量是一种有助于在相关方向上加速SGD并抑制振荡的方法,通过将当前梯度与过去梯度加权平均,来获取即将更新的梯度。如下图b图所示。它通过将过去时间步长的更新向量的一小部分添加到当前更新向量来实现这一点:

 动量项通常设置为0.9或类似值。

2.1SGD+Momentum(震荡方向的梯度相互抵消,梯度小的方向逐渐累加)

使用动量(Momentum)的随机梯度下降算法,主要的思想是引入积攒历史梯度信息动量来加速SGD。

 理解策略为:由于当前权值的改变会受到上一次权值改变的影响,类似于小球向下滚动的时候带上了惯性。这样可以加快小球向下滚动的速度。(下一次全职的改变会受这次的影响,如果这次梯度方向的反方向为正,下次梯度方向的反方向为负,则梯度累计的效果会抵消,这就是在减小震荡,梯度的方向会沿着一直为正,或者一直为负的方向前进,最终达到全局最优解)

三、自适应梯度

3.1AdaGrad(自适应梯度)

AdaGrad算法,即adaptive gradient,自适应梯度法。它通过记录每次迭代过程中的前进方向和距离,从而使得针对不同问题,有一套自适应调整学习率的方法,即不同的参数是需要不同的学习率的。具有损失较大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上有相对较小的下降。

SGD的学习率是线性更新的,每次更新的差值一样。后面的优化法开始围绕自适应学习率进行改进。Adagrad法引入二阶动量,根据训练轮数的不同,对学习率进行了动态调整。(解决稀疏梯度问题)

它能够对每个不同的参数调整不同的学习率,对频繁变化的参数以更小的步长进行更新,而稀疏的参数以更大的步长进行更新。

但缺点是Adagrad法仍然需要人为指定一个合适的全局学习率,同时网络训练到一定轮次后,分母上梯度累加过大使得学习率为0而导致训练提前结束。

AdaGrad的效果是: 在参数空间中更为平缓的倾斜方向会取得更大的进步,因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小。

优点:解决了SGD中学习率不能自适应的问题

缺点:(1)对于训练深度神经网络模型而言,性训练开始时累计平方梯度值会越来越大,会导致               学习率过早和过量的减少,从而导致迭代后期收敛极其缓慢、Adagrad在某些深度学习模                型上效果不错,但不是全部,

            (2)需要动手设置全局学习率

3.2 RMSprop

RMSProp算法,其实它就是Adadelta(Hinton, 2012),这里的RMS就是Adadelta中定义的RMS,也有人说它是一个特例, ρ=0.9 的Adadelta。与Adadelta另一个不同是还是需要学习率的,建议默认值为:0.001。

RMSProp算法是AdaGrad算法的改进,修改AdaGrad以在非凸条件下效果更好,解决了AdaGrad所面临的问题。

RMSProp主要思想:使用指数加权移动平均的方法计算累积梯度,以丢弃遥远的梯度历史信息(让距离当前越远的梯度的缩减学习率的权重越小)。

AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。为了解决这一问题,RMSprop算法对Adagrad算法做了一点小小的修改,RMSprop使用指数衰减只保留过去给定窗口大小的梯度,使其能够在找到凸碗状结构后快速收敛。RMSProp法可以视为Adadelta法的一个特例

RMSProp法缺陷在于依然使用了全局学习率,需要根据实际情况来设定。可以看出分母不再是一味的增加,它会重点考虑距离它较近的梯度(指数衰减的效果)。优点是只用了部分梯度加和而不是所有,这样避免了梯度累加过大使得学习率为0而导致训练提前结束。

3.3 Adam法

Adam法本质上是带有动量项的RMSProp法,它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam法主要的优点在于经过偏置校正后,每一次迭代学习率都有一个确定范围,这样可以使得参数更新比较平稳。

虽然Adam算法目前成为主流的优化算法,不过在很多领域里(如计算机视觉的对象识别、NLP中的机器翻译)的最佳成果仍然是使用带动量(Momentum)的SGD来获取到的。Wilson 等人的论文结果显示,在对象识别、字符级别建模、语法成分分析等方面,自适应学习率方法(包括AdaGrad、AdaDelta、RMSProp、Adam等)通常比Momentum算法效果更差

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值