【机器学习】深度学习常见的优化方法(Optimizer)总结

1、GD(最速下降法):

每次迭代沿着当前位置的导数的负方向记得在吴恩达的机器学习视频中提到,不需要刻意降低学习率,因为随着梯度的下降,更新后的梯度越来越小,每一步的距离越来越小。
GD
GD 算法至少有两个明显的缺陷:
首先,在使用的时候, 尤其是机器学习的应用中,我们都会面临非常大的数据集。这个时候如果硬要算f(x)的导数,往往意味着我们要花几个小时把整个数据集都扫描一遍,然后还只能走一小步。一般 GD 要几千步几万步才能收敛,所以这样就根本跑不完了。
其次,如果我们不小心陷入了鞍点,或者比较差的局部最优点,GD 算法就跑不出来了,因为这些点的导数是 0。

2、SGD(Stochastic Gradient Descent)随机梯度下降:

Stochastic gradient descent 算法每读入一个数据,便立刻计算cost fuction的梯度来更新参数:
在这里插入图片描述
gt为随机梯度,满足:
在这里插入图片描述
也就是说,虽然包含一定的随机性,但是从期望上来看,它是等于正确的导数的。SGD 就像是喝醉了酒的 GD,它依稀认得路,最后也能自己走回家,但是走得歪歪扭扭。(红色的是 GD 的路线,偏粉红的是 SGD 的路线)。
在这里插入图片描述
SGD特点:
1、执行步数多;
2、对导数要求不严格,可以包含大量的噪声,只要期望正确就行(有时候期望不对都是可以的);
3、计算速度快;
总之,就是用路程换时间
GD+SGD 逃离鞍点:因为鞍点有负的特征值,所以只要扰动之后在这个方向上有那么一点点分量,就能够一马平川地滑下去。除非分量非常非常小的情况下才可能会继续陷在鞍点附近。换句话说,如果加了一个随机扰动,其实大概率情况下是能够逃离鞍点的!
但是,上面的方法都存在一个问题,就是update更新的方向完全依赖于计算出来的梯度.很容易陷入局部最优的马鞍点,能不能改变其走向,又保证原来的梯度方向,就像向量变换一样,我们模拟物理中物体流动的动量概念(惯性),引入Momentum的概念.

3、Momentum(动量):

通常情况我们在训练深度神经网络的时候把数据拆解成一小批一小批地进行训练,这就是我们常用的mini-batch SGD训练算法,然而虽然这种算法能够带来很好的训练速度,但是在到达最优点的时候并不能够总是真正到达最优点,而是在最优点附近徘徊。另一个缺点就是这种算法需要我们挑选一个合适的学习率,当我们采用小的学习率的时候,会导致网络在训练的时候收敛太慢;当我们采用大的学习率的时候,会导致在训练过程中优化的幅度跳过函数的范围,也就是可能跳过最优点。我们所希望的仅仅是网络在优化的时候网络的损失函数有一个很好的收敛速度同时又不至于摆动幅度太大。
所以Momentum优化器刚好可以解决我们所面临的问题,它主要是基于梯度的移动指数加权平均。假设在当前的迭代步骤第 t步中,那么基于Momentum优化算法可以写成下面的公式:
在这里插入图片描述
vt-1为前t-1次积累的动量。
它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。
特点:
若当前梯度的方向与历史梯度一致(表明当前样本不太可能为异常点),则会增强这个方向的梯度,若当前梯度与历史梯方向不一致,则梯度会衰减。一种形象的解释是:我们把一个球推下山,球在下坡时积聚动量,在途中变得越来越快,η可视为空气阻力,若球的方向发生变化,则动量会衰减。
在这里插入图片描述

4. Nesterov Momentum

在这里插入图片描述
在这里插入图片描述

5. Adagrad:

上述方法中,对于每一个参数θi 的训练都使用了相同的学习率α。**Adagrad算法能够在训练中自动的对learning rate进行调整,**对于出现频率较低参数采用较大的α更新;相反,对于出现频率较高的参数采用较小的α更新。因此,Adagrad非常适合处理稀疏数据。 AdaGrad算法就是将每一个参数的每一次迭代的梯度取平方累加后在开方,用全局学习率除以这个数,作为学习率的动态更新。
在这里插入图片描述s为梯度累积变量。
特点:
(1)、随着算法不断收敛,s不断累计增大,然而x整体的学习率却降低,因此,一开始算法激励收敛,随着收敛性越好,算法开始惩罚收敛。
(2)经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。AdaGrade在某些深度学习模型上效果不错,但不是全部。
(3)Adagrad的缺点是在训练的中后期,分母上梯度平方的累加将会越来越大,从而梯度趋近于0,使得训练提前结束。

6. RMSprop均方根传播:

RMSprop是Geoff Hinton提出的一种自适应学习率方法。**Adagrad会累加之前所有的梯度平方,而RMSprop仅仅是计算对应的平均值,**因此可缓解Adagrad算法学习率下降较快的问题。
在这里插入图片描述

7、Adam(Adaptive Moment Estimation)适应性矩估计:

Adam是另一种自适应学习率的方法。它利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定范围,使得参数比较平稳。公式如下:
在这里插入图片描述
在这里插入图片描述
特点:
直截了当地实现,高效的计算,所需内存少
更新步长和梯度大小无关
对目标函数没有平稳要求,即loss function可以随着时间变化
梯度对角缩放的不变性
适合解决含大规模数据和参数的优化问题
适用于非稳态(non-stationary)目标
适用于解决包含很高噪声或稀疏梯度的问题
超参数可以很直观地解释,并且基本上只需极少量的调参
  
Adam算法同时获得了AdaGrad和RMSProp算法的优点。Adam不仅如RMSProp算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncenteredvariance)。具体来说,算法计算了梯度的指数移动均值(exponentialmovingaverage),超参数beta1和beta2控制了这些移动均值的衰减率。
beta1:一阶矩估计的指数衰减率(如0.9)。
beta2:二阶矩估计的指数衰减率(如0.999)。该超参数在稀疏梯度(如在NLP或计算机视觉任务中)中应该设置为接近1的数。
alpha:同样也称为学习率或步长因子,它控制了权重的更新比率(如0.001)。较大的值(如0.3)在学习率更新前会有更快的初始学习,而较小的值(如1.0E-5)会令训练收敛到更好的性能。
epsilon:该参数是非常小的数,其为了防止在实现中除以零(如10E-8)。
  移动均值的初始值和beta1、beta2值接近于1(推荐值),因此矩估计的偏差接近于0。该偏差通过首先计算带偏差的估计而后计算偏差修正后的估计而得到提升。

参考链接:
https://blog.csdn.net/willduan1/article/details/78070086
https://www.cnblogs.com/zongfa/p/9727073.html
https://www.leiphone.com/news/201709/c7nM342MTsWgau9f.html
https://baijiahao.baidu.com/s?id=1572697980489279&wfr=spider&for=pc

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值