神经网络优化中的学习率调整(下)

Posted 云隐雾匿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络优化中的学习率调整(下)相关的知识,希望对你有一定的参考价值。

目录

一、AdaGrad算法

二、RMSprop算法

三、AdaDelta算法

四、学习率调整方法总结 


在上一遍文章中详细介绍了学习率衰减、学习率预热、周期性学习率调整几种方法,本文将主要介绍一些自适应调整学习率的方法,例如AdaGrad、RMSprop、 AdaDelta 等。想要了解学习率衰减、学习率预热、周期性学习率调整方法的朋友可以在文末找到链接入口。

一、AdaGrad算法

在标准的梯度下降法中 每个参数在每次迭代时都使用相同的学习率。 由于每个参数的维度上收敛速度都不相同, 因此需要根据不同参数的收敛情况分别设置学习率。 AdaGrad算法 Adaptive Gradient Algorithm )是借鉴 ℓ2 正则化的思想 每次迭代时自适应地调整每个参数的学习率。 在第  𝑡 次迭代时 , 先计算每个参数梯度平方的累计值:

其中 为按元素乘积 ,𝒈𝜏 ∈ ℝ |𝜃| 是第  𝜏  次迭代时的梯度。 AdaGrad 算法的参数更新差值为:

其中 𝛼 是初始的学习率 ,𝜖 是为了保持数值稳定性而设置的非常小的常数 一般取值e −7 e −10。 此外 这里的开平方 加运算都是按元素进行的操作。 在 AdaGrad 算法中 如果某个参数的偏导数累积比较大 其学习率相对较小; 相反 如果其偏导数累积较小 其学习率相对较大。 但整体是随着迭代次数的增加, 学习率逐渐缩小。 AdaGrad 算法的缺点是在经过一定次数的迭代依然没有找到最优点时 由于这时的学习率已经非常小, 很难再继续找到最优点。

二、RMSprop算法

RMSprop算法 Geoff Hinton 提出的一种自适应学习率的方法 可以在有些情况下避免 AdaGrad 算法中学习率不断单调下降以至于过早衰减的缺点。 RMSprop 算法首先计算每次迭代梯度  𝒈 𝑡 平方的指数衰减移动平均:

其中  𝛽 为衰减率 一般取值为 0.9。 RMSprop 算法的参数更新差值为:

从上式可以看出 RMSProp 算法和 AdaGrad 算法的区别在于 𝐺 𝑡 的计算由累积方式变成了指数衰减移动平均。 在迭代过程中 每个参数的学习率并不是呈衰减趋势,而是 既可以变小也可以变大。

三、AdaDelta算法

AdaDelta 算法 也是 AdaGrad 算法的一个改进。 RMSprop算法类似, AdaDelta 算法通过梯度平方的指数衰减移动平均来调整学习率。 此外, AdaDelta 算法还引入了每次参数更新差值  Δ𝜃  的平方的指数衰减权移动平均。

𝑡 次迭代时 参数更新差值 Δ𝜃 的平方的指数衰减权移动平均为:

其中 𝛽1 为衰减率。此时 Δ𝜃𝑡 还未知因此只能计算到Δ𝑋𝑡−1。

AdaDelta算法的参数更新差值为:

 

其中  𝐺𝑡 的计算方式和 RMSprop算法一样 Δ𝑋 ^2 (𝑡−1) 为参数更新差值 Δ𝜃 的指数衰减权移动平均从上式可以看出 AdaDelta 算法将 RMSprop 算法中的初始学习率  𝛼  改为动态计算的√Δ𝑋^2 (𝑡−1),在一定程度上平抑了学习率的波动。

四、学习率调整方法总结 

 相关文章链接:

神经网络优化中的学习率调整(上)_云隐雾匿的博客-CSDN博客

10的三次方怎么稀释梯度

参考技术A 这个复杂,需要了解方法。可以用到两三种方法。
十倍梯度稀释法(倍比稀释和梯度稀释):
梯度下降是寻找函数极小值的优化方法,在深度学习模型中常用于在反向传播过程中更新神经网络的权重。

梯度下降优化算法功能是什么?

梯度下降,优化算法发挥了以下三个主要方面的作用:
1、学习率成分、或

2、修正坡度成分L/W
3或2者
让我们看看下面的公式1。
方程1 :随机梯度下降中的各种量
学习率调度器vs梯度下降优化的主要区别在于,梯度下降优化是将学习率乘以梯度的函数即因子来调整学习率成分,而学习率调度器是将学习率乘以一定的常数或关于时间步的函数的因子来更新学习率。
第一种方法主要是通过将学习率(learning rate )乘以0到1之间的因子来降低学习率)例如RMSprop。 第二种方法通常使用坡度(Gradient )的滑动平均(也称为动量)而不是纯坡度来确定下降方向。 第三种方法是将Adam和AMSGrad这样的两者结合起来。

Fig.2 )各类梯度下降优化算法、其发表年和使用的核心思路。
Fig.3自上而下,展示了这些优化算法是如何从最简单的简单梯度下降(SGD )进化到Adam的各种变种的。 SGD最初分别向两个方向发展,一个是AdaGrad,主要调整学习率(learning rate )。 另一个是Momentum,主要调整梯度的构成要素。 随着进化的发展,Momentum和RMSprop一体化,“QS dch”(Adam )诞生了。 你可能会对我这样的组织方式提出异议,但我一直以来都是这样理解的。

Fig.3 )各种最优化算法的进化图(gist ) ) ) ) ) )。

符号表示
t -迭代步数

w -需要更新的权重和参数
-学习率
L/w - L (损失函数)相对于w的梯度
因为我统一了论文中出现的希腊文字和符号表示,所以可以用统一的“进化”的观点来看这些优化算法

1. 随机梯度下降(Stochastic Gradient Descend)
最原始的随机梯度下降算法主要是将当前梯度l/w乘以一个系数学习率来更新模型的权重w。
2. 动量算法(Momentum)

动量算法使用具有动量的坡度(坡度的指数滑动平均、Polyak、1964 )而不是当前坡度来更新w。 在后续的文章中,我们会发现采用指数滑动平均作为动量更新方法几乎已经成为行业标准。
另外,v初始化值为0。 通常设定为0.9。

值得注意的是,许多文章在引用Momemtum算法时都使用年轻花瓣Qian,1999的文章。 但是,该算法的原始来源是Sutskever et al。 另一方面,经典动量算法是1964年由Polyak提出的,因此上述也引用了Polyak的文章。 (谢谢James指出这一点)
3.Nesterov加速梯度下降法(NAG)

是在Polyak提出动量法后(双关: Polyak势)
头正盛),一个使用Nesterov加速梯度下降法(Sutskever et al., 2013)的类似更新方法也被实现了。此更新方法使用V,即我称之为投影梯度的指数移动平均值。

其中

且V 初始化为0。
第二个等式中的最后一项就是一个投影梯度。这个值可以通过使用先前的速度“前进一步”获得(等式4)。这意味着对于这个时间步骤t,我们必须在最终执行反向传播之前执行另一个前向传播。这是步骤:
1.使用先前的速度将当前权重w更新为投影权重w*
(等式4)
2. 使用投影权重计算前向传播
3.获得投影梯度∂L/∂w*
4.计算相应的V和w
常见的默认值:
β = 0.9
请注意,原始的Nesterov 加速梯度下降法论文( Nesterov, 1983 )并不是关于随机梯度下降,也没有明确使用梯度下降方程。因此,更合适的参考是上面提到的Sutskever等人的出版物。在2013年,它描述了NAG在随机梯度下降中的应用。(再一次,我要感谢James对HackerNews的评论中指出这一点。)

以上是关于神经网络优化中的学习率调整(下)的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow:实战Google深度学习框架第四章02神经网络优化(学习率,避免过拟合,滑动平均模型)

深度学习:batch_size和学习率 及如何调整

深度学习:batch_size和学习率 及如何调整

DL:深度学习模型优化之模型训练技巧总结之适时自动调整学习率实现代码

Keras深度学习实战——神经网络性能优化技术详解

「深度学习一遍过」必修11:优化器的高级使用+学习率迭代策略+分类优化目标定义