adadelta算法_深度模型优化算法SGD、Momentum、NAG、AdaGrad、RMSProp及Adam等

本文介绍了深度学习中常用的优化算法,包括随机梯度下降(SGD)、小批量梯度下降(MBGD)、动量法(Momentum)、Nesterov动量(NAG)、AdaGrad、Adadelta、RMSprop以及Adam。这些算法在参数更新和收敛速度上各有特点,如AdaGrad独立适应每个参数的学习率,而Adam结合了AdaGrad和RMSprop的优点,适用于大规模数据和参数的场景。
摘要由CSDN通过智能技术生成

ca36d4a5b5c01522048fb9495d68ee76.png

随机梯度下降

Batch Gradient Descent(BGD)

BGD在训练中,每一步迭代都是用训练集中的所有数据,也就是说,利用现有参数对训练集中的每一个输入生成一个估计输出,然后跟实际输出比较,统计所有误差,求平均以后得到平均误差,并以此作为更新参数的依据.

  • 优点: 由于每一步都利用了训练集中的所有数据,因此当损失函数达到最小值以后,能够保证此时计算出的梯度为0,换句话说,就是能够收敛(曲线比较平滑),因此,使用BGD时不需要逐渐降低学习率.
  • 缺点: 由于每一步都要用到所有训练数据,因此随着数据集的增大,运行速度会越来越慢.

SGD与MBGD

MBGD是指在训练中,每次使用小批量(一个小批量训练m个样本)的随机采样进行梯度下降.训练方法与BGD一样,只是BGD最后对训练集的所有样本取平均,而MBGD只对小批量的m个样本取平均.SGD是指在训练中每次仅使用一个样本.MBGD与SGD统称为SGD.因为小批量不能代表整个训练集,使得梯度估计引入噪声源,因此SGD并不是每次迭代都向着整体最优化方向.虽然SGD包含一定的随机性(表现为损失函数的震荡),但是从期望来看,它是等于正确的导数的(表现为损失函数有减小的趋势).

  • 优点: 训练速度比较快
  • 缺点: 在样本数量较大的情况下,可能只用到了其中一部分数据就完成了训练,得到的只是局部最优解.另外,小批量样本的噪声较大,所以每次执行梯度下降,并不一定总是朝着最优的方向前进.

3450302dbdc48fd6231fbd23c0bff9be.png

参数更新

其中,

代表学习率,
表示
时刻的参数,
代表参数
时刻的导数,
代表参数的更新速度。

Momentum

在训练中,采取的策略与SGD一样,不同的是学习率的更新方式。动量的参数更新方式为:

一般取值0.9.

直观理解为:

f3e6c9e2182e1737d3b0a41254d1959d.png

动量方法旨在加速学习(加快梯度的下降速度),特别是处理高曲率、小但一致的梯度,或是带噪声的梯度。动量算法累积了之前梯度指数级衰减的移动平均,并且继续沿该方向移动。

d4ddc761520a18cdc66d4685f82a4300.gif

动量SGD算法引入

使每一次的参数更新方向不仅仅取决于当前位置的梯度,还受到上一次参数更新方向的影响(如上图所示)。在某一维度上,当梯度方向不变时,更新速度变快,当梯度方向有所改变时,更新速度变慢,从而加快收敛速度,减少震荡。

带有动量的SGD的优点:

  • 加快收敛速度
  • 抑制梯度下降时上下震荡的情况
  • 通过局部极小点
分析:假设任意时刻参数的梯度均为
,则使用SGD时,
时刻的梯度
,Momentum算法的梯度
.当
,因
,所以
,所以
,当
时,Momentum更新速度是SGD的10倍

Nesterov(NAG)

Nesterov动量是Momentum的变种,即在计算参数梯度之前,前瞻一步,超前一个动量单位处:

,Nesterov动量可以理解为往Momentum动量中加入了一个校正因子。参数更新公式为:

Momentum动量与Nesterov动量的对比如下图所示,其中

代表A节点 ( theta_t )的梯度,
代表B节点(
的梯度),灰色实线代表 t-1 时刻的速度
.

b97d643a1bd510d85be74f4f216953a0.png
注意:图中的
以及
应该为
因为梯度方向是增长速度最快的方向,而图中所示为梯度的反方向,所以应该为
.

Nesterov动量相对于Momentum多了一个本次梯度相对上次梯度的变化量,这个变化量本质上是对目标函数二阶导的近似,由于令了二阶导的信息,Nesterov动量算法才会比Momentum具有更快的收敛速度。

AdaGrad

AdaGrad其实是对学习率进行了约束,AdaGrad独立地适应所有模型参数的学习率,缩放每个参数反比于其它所有梯度历史平方值总和的平方根。损失较大偏导的参数相应地拥有一个快速下降的学习率,而较小偏导的参数在学习率上有相对较小的下降。净效果是在参数空间中更为平缓的倾斜方向会取得更大的进步。参数更新公式为:

其中,

是个很小的数,用来保证分母非0。对
从1到
进行一个递推形成一个约束项regularizer——

优点:

前期

较小的时候,
较大,梯度更新较大,可以解决SGD中学习率一直不变的问题;后期
较大的时候,
较小,能够约束梯度.适合处理稀疏梯度.

缺点:

由公式可以看出,AdaGrad依赖于人工设置一个全局学习率

,当
设置过大时,使regularizer过于敏感,对梯度的调节太大。在中后期,分母上梯度平方的累加将会越来越大,gradient→0,网络的更新能力会越来越弱,学习率会变的极小,使得训练提前结束。为了解决这样的问题,又提出了Adadelta算法。

Adadelta

Adadelta是对AdaGrad的扩展,AgaGrad会累加所有历史梯度的平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值。参数更新方式为:

但是,此时Adadelta其实仍然依赖于全局学习率,因此,又做了一些处理,新的参数更新方式为:

新的参数更新方式,不依赖于全局学习率,并且,训练初中期,加速效果不错,很快;训练后期,反复在局部最小值附近抖动。

RMSprop

RMSprop可以算作Adadelta的一个特例:当

时,
就变为了求梯度平方和的平均数。

如果再求根的话,就变成了RMS(均方根):

。RMSprop的参数更新方式为:

特点:(1)RMSprop依然依赖于全局学习率;(2)RMSprop算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间;(3)适合处理非平稳目标 - 对于RNN效果很好

Adam

Adam优化器结合了AdaGrad与RMSProp两种算法的优点。对梯度的一阶距估计

(即梯度的均值)和二阶距估计
(即梯度的未中心化的方差)进行综合考虑,计算出更新步长。更新方式为:

注:所有的
均表示
时刻。
分别是梯度的一阶距估计和二阶距估计,可以看做是对期望
的估计;
是对
的校正,这样可以近似为对期望的无偏估计。

优点:

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

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

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

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

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

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

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

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

参考资料:
1. G-kdom:使用动量(Momentum)的SGD、使用Nesterov动量的SGD
2. 郑思座:谈谈优化算法(动量法、Nesterov法、自然梯度法)
3. https:// blog.csdn.net/u01275913 6/article/details/52302426
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值