ADADELTA AN ADAPTIVE LEARNING RATE METHOD

ADADELTA: AN ADAPTIVE LEARNING RATE METHOD

参考:[自适应学习率调整AdaDelta](https://www.cnblogs.com/neopenx/p/4768388.html)

我们提出了一种新的梯度下降的逐维学习率方法ADADELTA。该方法仅使用一阶信息随时间动态地适应,并且除了一般的随机梯度下降外,具有最小的计算开销。该方法不需要人工调整学习速率,对噪声梯度信息、不同模型结构选择、不同数据模式和超参数选择具有鲁棒性。与其他方法相比,我们在分布式集群环境下,在单机和大规模语音数据集上进行MNIST数字分类时,取得了令人满意的结果。

1. INTRODUCTION

许多机器学习方法的目的是更新一组参数x,以优化目标函数f(x)。将第t次迭代的参数表示为 x t x_t xt,这个简单的更新规则为:

x t + 1 = x t + Δ x t x_{t+1}=x_t+\Delta x_t xt+1=xt+Δxt (1)

本文考虑梯度下降算法,该算法试图通过跟踪梯度 g t g_t gt的负方向给出的最陡下降方向来优化目标函数。此一般方法可用于更新任何可获得导数的参数:
Δ x t = − η g t \Delta x_t=-\eta g_t Δxt=ηgt (2)
其中 g t g_t gt为第t次迭代时参数的梯度 ∂ f ( x t ) ∂ x t \frac{\partial f(x_t)}{\partial x_t} xtf(xt) η \eta η是一个学习率,它控制在负梯度方向上的步长。对于从数据集中选择的每一个新样本或每一批样本,按照这个负梯度给出一个局部估计,即哪个方向的代价最小,称为随机梯度下降(SGD)。梯度下降算法对各参数的梯度解析推导往往比较简单,但要求选择学习率超参数。

设定学习速率通常需要一个调整过程,在该过程中,手动选择可能的最高学习速率。选择高于此速率会导致系统在目标函数方面出现分歧,而选择此速率过低会导致学习缓慢。对于许多问题来说,确定一个好的学习率更像是一门艺术而不是科学。

这项工作试图通过引入一个新的动态学习率来减轻选择学习率的任务,该动态学习率是基于每个维度仅使用一阶信息计算的。这需要在梯度下降的每次迭代中进行少量的额外计算。另外,虽然该方法中存在一些超参数,但我们发现它们的选择并没有显著地改变结果。这种方法的好处如下:

没有需要手动设置的学习率

超参数不敏感

每个维度独立的动态学习速率。

梯度下降的最小计算。

鲁棒的大梯度,噪音和架构的选择。

适用于单机或分布式环境。

2. RELATED WORK

梯度下降算法有许多修改,其中最强大的修改是牛顿法,它需要成本函数的二阶导数:

Δ x t = H t − 1 g t \Delta x_t=H^{-1}_tg_t Δxt=Ht1gt (3)

H t − 1 H^{-1}_t Ht1为第t次迭代计算的二阶导数海森矩阵的逆。这决定了二次型问题的最优步长,但不幸的是,在大型模型的实际计算中是不允许的。因此,提出了许多其他的方法来改进一阶信息的使用或近似二阶信息。

2.1. Learning Rate Annealing

已经有好几次尝试使用启发式方法在梯度下降的每次迭代中估计一个好的学习率,这些尝试要么在适当的时候加快学习速度,要么在接近局部极小值时减慢学习速度。在这里我们考虑后者。

当梯度下降接近成本曲面的极小值时,参数值可以围绕极小值来回振荡。一种防止这种情况的方法是通过降低学习速率来减慢参数更新的速度。当验证精度趋于稳定时,可以手动完成。另外,还提出了学习速率表[1],以根据通过数据完成的阶段数自动退火学习速率。这些方法通常会添加额外的超参数来控制学习速率衰减的速度。
在这里插入图片描述
η0为初始学习率,d为衰减常数,通常为 1 0 − 3 10^{-3} 103

模拟退火基于一个梯度法优化的事实:

在优化过程中,Weight逐渐变大,因而需要逐渐减小学习率,保证更新平稳。

2.2. Per-Dimension First Order Methods

上面讨论的启发式退火过程修改了适用于参数所有维度的单个全局学习率。由于参数向量的每个维度可以以完全不同的方式与总体成本相关,因此能够补偿这些差异的每个维度的学习率通常是有利的。

2.2.1. Momentum

加速每维训练的一种方法是动量法[2]。这也许是几十年来成功使用的SGD最简单的扩展。动量背后的主要思想是沿着梯度一致指向同一方向的维度加速前进,并沿着梯度符号持续变化的维度减慢前进。这是通过跟踪具有指数衰减的过去参数更新来完成的:

Δ x t = ρ Δ x t − 1 − η g t \Delta x_t=\rho\Delta x_{t-1}-\eta g_t Δxt=ρΔxt1ηgt (4)

ρ \rho ρ 是一个常数,控制前一个参数更新的衰减。在优化复杂的成本曲面(如狭长的山谷)时,与SGD相比,这是一个很好的直观改进。沿着山谷的梯度,尽管比穿过山谷的梯度小得多,但通常是在同一个方向上,因此动量项积累起来以加快进展。在SGD中,由于梯度幅度较小,且各维度共享的固定全局学习率不能加快进度,因此沿着山谷的进展将是缓慢的。为SGD选择更高的学习率可能会有所帮助,但整个山谷的维度也会进行更大的参数更新,这可能会导致整个山谷前后的振荡。当使用动量时,这些振荡会得到缓解,因为梯度的符号会改变,因此动量项会减弱这些更新,从而减缓整个山谷的进展。同样,这发生在每个维度,因此沿着山谷的进展不受影响。

ρ为动量因子,通常设为0.9

在更新中引入0.9这样的不平衡因子,使得:

★在下降初期,使用前一次的大比重下降方向,加速。

★在越过函数谷面时,异常的学习率,会使得两次更新方向基本相反,在原地”震荡“

此时,动量因子使得更新幅度减小,协助越过函数谷面。

★在下降中后期,函数面局部最小值所在的吸引盆数量较多,一旦陷进吸引盆当中,

Gradient→0,但是前后两次更新方向基本相同。

此时,动量因子使得更新幅度增大,协助跃出吸引盆

#### 2.2.2. ADAGRAD

最近一种称为ADAGRAD[3]的一阶方法在分布式环境中的大规模学习任务中显示了显著的良好效果[4]。该方法只依赖于一阶信息,但具有二阶方法和退火的一些性质。ADAGRAD的更新规则如下:

Δ x t = − η Σ τ = 1 t g τ 2 g t \Delta x_t=-\frac{\eta}{\sqrt{\Sigma^t_{\tau=1}g_\tau^2}}g_t Δxt=Στ=1tgτ2 ηgt (5)

这里分母计算每个维度所有先前梯度的 l 2 l_2 l2范数 η \eta η是一种全局学习所有维度共享的学习率。虽然存在手动调整的全局学习速率,但每个维度都有自己的动态速率。由于这种动态速率随梯度大小的倒数而增长,大梯度的学习速率较小,小梯度的学习速率较大。这有一个很好的特性,就像在二阶方法中一样,随着时间的推移,每个维度上的进度都是均衡的。这对于训练深层神经网络是非常有益的,因为每一层的梯度尺度往往相差几个数量级,所以最优学习率应该考虑到这一点。此外,分母中梯度的累积具有与退火相同的效果,随着时间的推移降低了学习速率。

由于在ADAGRAD中考虑了梯度的大小,因此该方法对参数的初始条件和相应的梯度比较敏感。如果初始梯度较大,则剩余训练的学习率将较低。这可以通过提高全局学习率来解决,使ADAGRAD方法对学习率的选择敏感。此外,由于分母中平方梯度的不断累积,学习率在整个训练期间将继续下降,最后降为零,完全停止训练,我们建立了ADADELTA方法,克服了对超参数选择的敏感性,避免了学习率的持续下降

2.3. Methods Using Second Order Information

上述方法仅利用梯度和函数求值来优化目标,而二阶方法如牛顿法或拟牛顿法则利用Hessian矩阵或其近似。虽然这为优化提供了有用的附加曲率信息,但计算精确的二阶信息通常是昂贵的。由于计算整个二阶导数的Hessian矩阵对于大型模型来说计算成本太高,Becker和LecCun[5]提出了Hessian的对角近似。这种对角近似可以通过模型中的一个额外的正向和反向传播来计算,有效地在SGD上加倍计算。一旦Hessian的对角线 d i a g ( H ) diag(H) diag(H)被计算出来,更新规则变成:

Δ x t = − 1 ∣ d i a g ( H t ) ∣ + μ g t \Delta x_t=-\frac{1}{|diag(H_t)|+\mu}g_t Δxt=diag(Ht)+μ1gt (6)

其中,该对角Hessian的绝对值用于确保始终遵循负梯度方向,并且 μ \mu μ是一个小常数,用于改善Hessian对小曲率区域的条件(避免分母为0)。Schaul等人的最新方法。[6] 引入了对角Hessian和ADAGRAD结合在一起的方法,以减少对手工指定学习速率的需要。此方法使用以下更新规则:
在这里插入图片描述
**其中 E [ g t − w : t ] E[g_{t-w:t}] E[gtw:t]是之前w个梯度的期望值, E [ g t − w : t 2 ] E[g_{t-w:t}^2] E[gtw:t2]是同一窗口w上的梯度的平方的期望值。**Schaul等人还为这个窗口大小w引入了一种启发式方法(有关详细信息,请参阅[6])。

3. ADADELTA METHOD

本文提出的思想来源于ADAGRAD[3],目的是改进该方法的两个主要缺点:1)在整个训练过程中学习率持续下降,2)需要手动选择全局学习率。在推导出我们的方法后,我们注意到与Schaul等人的一些相似之处。[6] ,将与下面进行比较。在ADAGRAD方法中,分母从训练开始的每次迭代中累积平方梯度。由于每个学期都是正的,这个累积的总和在整个训练过程中继续增长,有效地缩小了每个维度的学习率。经过多次迭代后,这个学习速率将变得非常小。

3.1. Idea 1: Accumulate OverWindow

我们没有一直累积平方梯度之和,而是将累积的过去梯度的窗口限制为某个固定大小的w(而不是大小t,其中t是ADAGRAD中的当前迭代)。有了这个加窗累加,ADAGRAD的分母不能累加到无穷大,而是使用最近的梯度成为一个局部估计。这确保了即使在多次更新迭代之后,学习仍能继续取得进展。

由于存储以前的平方梯度是低效的,我们的方法实现这种积累作为指数衰减平均的平方梯度。假设t时刻的滑动平均值为 E [ g 2 ] t E[g^2]_t E[g2]t,则计算:

E [ g 2 ] t = ρ E [ g 2 ] t − 1 + ( 1 − ρ ) g t 2 E[g^2]_t=\rho E[g^2]_{t-1}+(1-\rho)g^2_t E[g2]t=ρE[g2]t1+(1ρ)gt2 (8)

其中 ρ \rho ρ是一个类似于动量法的衰变常数。因为我们在参数更新中需要这个量的平方根,所以这实际上成为时间t之前的先前平方梯度的均方根:

在这里插入图片描述

常数 ε \varepsilon ε是为了更好地满足分母条件而添加的,如[5]。由此产生的参数更新为:

Δ x t = − η R M S [ g ] t g t \Delta x_t=-\frac{\eta}{RMS[g]_t}g_t Δxt=RMS[g]tηgt (10)
在这里插入图片描述

3.2. Idea 2: Correct Units with Hessian Approximation

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

在这里插入图片描述

在这里插入图片描述

4.2. Sensitivity to Hyperparameters

3047)]

[外链图片转存中…(img-7wTRnvqa-1593961503049)]

[外链图片转存中…(img-zhqIHz8t-1593961503049)]

4.2. Sensitivity to Hyperparameters

虽然经过许多阶段的训练,动量收敛到比ADADELTA更好的最终解,但它对学习率的选择非常敏感,SGD和ADAGRAD也是如此。在表1中,我们改变了每种方法的学习率,并使用校正线性单元作为激活函数(relu),显示了6个阶段的训练后的测试集错误。每个列的最佳设置用于生成图1。对于SGD、动量或ADAGRAD,需要将学习速率设置为正确的数量级,高于该数量级的解通常会发散,低于该数量级的解则优化过程缓慢。我们可以看到,与表2中的ADADELTA相比,每种方法的这些结果都是高方差的,其中ADADELTA两个超参数不会显著改变性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自适应学习粒子群优化(Adaptive Learning PSO)是一种以粒子群优化(PSO)算法为基础,结合了自适应学习能力的优化算法。该算法利用了粒子群优化的思想,模拟了鸟群觅食的行为,通过不断地迭代更新粒子的位置和速度,来搜索最优解。 在自适应学习PSO代码中,首先需要定义问题的目标函数和约束条件。然后,初始化一群粒子,并随机初始化它们的位置和速度。接着,根据粒子的位置和速度更新公式,不断迭代直到达到迭代次数或满足停止条件时停止。 自适应学习PSO代码的关键在于如何动态调整粒子的学习能力。在传统PSO中,学习参数是固定不变的,而在自适应学习PSO中,学习参数会随着迭代的进行而逐渐调整。这样可以使得粒子在搜索空间中具有更好的探索和利用能力,增加了算法的全局搜索能力和收敛速度。 在代码实现中,需要根据自适应学习的策略来更新粒子的学习参数,比如可以采用自适应权重的方法,根据粒子的历史表现来动态调整其学习参数。同时,还需要考虑到PSO算法的一些问题,比如局部最优解的问题和收敛速度的问题,可以通过设置适当的参数和策略来加以克服。 综上所述,自适应学习PSO代码是在传统PSO算法的基础上,加入了自适应学习能力,通过动态调整学习参数来提高算法的全局搜索能力和收敛速度,在实现代码时需要注重学习参数的动态调整和解决传统PSO算法的一些问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值