深度学习:10种随机梯度下降优化算法

深度学习框架(例如:TensorFlow,Keras,PyTorch)中使用的常见梯度下降优化算法。梯度下降是一种用于寻找函数最小值的优化方法。 它通常在深度学习模型中用于通过反向传播来更新神经网络的权重。


Vanilla SGD

朴素随机梯度下降(Vanilla SGD)通过将当前权重减去其梯度的因子(即\alpha,学习率)来更新权重。​

\omega_{t+1}=\omega_{t}-\alpha\frac{\partial L}{\partial \omega_{t}}

该方程式的变化通常被称为随机梯度下降优化器。 它们有3种主要区别方式:

  1. 调整“梯度分量”(\partial L/\partial \omega
    代替像在随机梯度下降中那样仅使用单个梯度来更新权重,而是采用多个梯度的集合。 具体而言,这些优化器使用梯度的指数移动平均值。
  2. 调整“学习率”(\alpha
    根据梯度的大小来调整学习速率,代替保持恒定的学习速率。
  3. (1)和(2)
    调整梯度分量和学习率分量。

SGD 的缺点在于收敛速度慢,可能在鞍点处震荡。并且,如何合理的选择学习率是 SGD 的一大难点。

Momentum

引入动量的梯度下降算法,梯度累积是指数移动平均值。

\omega_{t+1}=\omega_{t}}-\alpha m_{t}}

其中,

m_{t}=\beta m_{t-1} +(1-\beta)\frac{\partial L}{\partial \omega_{t}}

m初始化为0,一般

\beta =0.9

这使得参数中那些梯度方向变化不大的维度可以加速更新,并减少梯度方向变化较大的维度上的更新幅度。由此产生了加速收敛和减小震荡的效果。

AdaGrad

对于更新频繁的参数,我们则希望步长较小,使得学习到的参数更稳定,不至于被单个样本影响太多。通过将学习率除以v的平方根来作用于学习率分量, v的平方根是当前梯度与过去平方梯度(即 t-1)的累加和 。像SGD一样,梯度分量保持不变。

\omega_{t+1}=\omega_{t}-\frac{\alpha}{\sqrt{v_{t}+\epsilon}}\frac{\partial L}{\partial \omega_{t}}

其中,

v_{t}=v_{t-1}+\left[ \frac{\partial L}{\partial \omega_{t}} \right]^{2}

v初始化为0。注意,\epsilon被添加到分母。 Keras将此称为模糊因素,这是一个小的浮点值,可确保分母永远不必除以零。

\alpha =0.01

\epsilon=10^{-7}

此方法在稀疏数据的场景下表现很好。

RMSprop

均方根prop或RMSprop是另一种尝试提高AdaGrad的自适应学习率。 而不是像AdaGrad取平方梯度的累加总和,取这些梯度的指数移动平均值。 与动量类似,此更新成为大多数优化程序的学习率组件的标准更新。

\omega_{t+1}=\omega_{t}-\frac{\alpha}{\sqrt{v_{t}+\epsilon}}\frac{\partial L}{\partial \omega_{t}}

其中,

v_{t}=\beta v_{t-1}+(1-\beta )\left[ \frac{\partial L}{\partial \omega_{t}} \right]^{2}

v=0\alpha =0.001\beta =0.9\epsilon=10^{-6}

二阶动量采用指数移动平均公式计算,即可避免二阶动量持续累积的问题。

Adadelta

与RMSprop一样,Adadelta也是AdaGrad的另一项改进,重点是学习率分量。 Adadelta可能是“adaptive delta”的缩写,此处的delta是指当前权重和新更新的权重之间的差。

Adadelta和RMSprop之间的区别在于,Adadelta通过将其替换为D(平方增量的指数移动平均值)来完全消除了学习速率参数的使用。

\omega_{t+1}=\omega_{t}-\frac{\sqrt{D_{t-1}+\epsilon}}{\sqrt{v_{t}+\epsilon}}\frac{\partial L}{\partial\omega_{t}}

其中

D_{t}=\beta D_{t-1}+(1-\beta)\left[\Delta\omega_{t} \right]^{2}

v_{t}=\beta v_{t-1}+(1-\beta)\left[ \frac{\partial L}{\partial \omega_{t}} \right]^{2}

D=0v=0

\Delta\omega_{t}=\omega_{t}-\omega_{t-1}

\beta =0.95

\epsilon=10^{-6}

NAG

投影梯度的指数移动平均值

\omega_{t+1}=\omega_{t}-\alpha m_{t}

其中

m_{t}=\beta m_{t-1}+(1-\beta) \frac{\partial L}{\partial \omega^{*}}

m=0 ,\beta =0.9

\partial L/\partial \omega^{*}是投影梯度。 该值必须执行一次正向传播,然后才能最终执行反向传播。

  1. 更新当前\omega到投影权重\omega^{*}\omega^{*}=\omega_{t}-\alpha m_{t-1}
  2. 执行正向传播,要用投影权重
  3. 获得投影梯度\partial L/\partial \omega^{*}
  4. 计算m\omega

Adam

自适应矩估计或Adam只是动量和RMSprop的结合:梯度分量用指数移动平均值m和学习率\alpha除以v的平方根(平方梯度的指数移动平均值)(如RMSprop)来获得学习率分量

\omega_{t+1}=\omega_{t}-\frac{\alpha}{\sqrt{\hat{ v }_{t}+\epsilon}}\hat{ m }_{t}

其中,

\hat{ m }_{t}=\frac{m_{t}}{1-\beta^{t}_{1}}

\hat{v }_{t}=\frac{v_{t}}{1-\beta^{t}_{2}}

是偏差校正

m_{t}=\beta_{1} m_{t-1}+(1-\beta_{1})\frac{\partial L}{\partial \omega_{t}}

v_{t}=\beta_{2} v_{t-1}+(1-\beta_{2})\left[ \frac{\partial L}{\partial \omega_{t}} \right]^{2}

mv初始化为0

\alpha=0.001

\beta_{1}=0.9

\beta_{2}=0.999

\epsilon=10^{-8}

AdaMax

使用无穷范数(因此称为“ max”)对Adam优化器的改进。  v用梯度p范数的指数移动平均值,近似于最大函数。

\omega_{t+1}=\omega_{t}-\frac{\alpha}{v_{t}}\hat{ m }_{t}

其中

\hat{ m }_{t}=\frac{m_{t}}{1-\beta^{t}_{1}}

是偏差矫正

m_{t}=\beta_{1}m_{t-1}+(1-\beta_{1})\frac{\partial L}{\partial \omega_{t}}

v_{t}=max(\beta_{2}v_{t-1},\left|\frac{\partial L}{\partial \omega_{t}}\right|)

mv初始化为0

\alpha=0.002

\beta_{1}=0.9

\beta_{2}=0.999

Nadam

\omega_{t+1}=\omega_{t}-\frac{\alpha}{\sqrt{\hat{ v }_{t}+\epsilon}}\left( \beta_{1}\hat{ m }_{t-1}+\frac{1-\beta_{1}}{1-\beta^{t}_{1}} \frac{\partial L}{\partial \omega_{t}}\right)

Nadam使用Nesterov通过将上述等式中的上一个\hat{ m }_{t-1}替换为\hat{ m }_{t}来提前更新梯度:

\omega_{t+1}=\omega_{t}-\frac{\alpha}{\sqrt{\hat{ v }_{t}+\epsilon}}\left( \beta_{1}\hat{ m }_{t}+\frac{1-\beta_{1}}{1-\beta^{t}_{1}} \frac{\partial L}{\partial \omega_{t}}\right)

其中,

\hat{ m }_{t}=\frac{m_{t}}{1-\beta^{t}_{1}}

\hat{v }_{t}=\frac{v_{t}}{1-\beta^{t}_{2}}

是偏差校正

m_{t}=\beta_{1} m_{t-1}+(1-\beta_{1})\frac{\partial L}{\partial \omega_{t}}

v_{t}=\beta_{2} v_{t-1}+(1-\beta_{2})\left[ \frac{\partial L}{\partial \omega_{t}} \right]^{2}

mv初始化为0

\alpha=0.002

\beta_{1}=0.9

\beta_{2}=0.999

\epsilon=10^{-7}

AMSGrad

​重新更改Adam中的自适应学习率分量,并确保当前v始终大于上一个时间步长中的v

 \omega_{t+1}=\omega_{t}-\frac{\alpha}{\sqrt{\hat{ v }_{t}+\epsilon}}\hat{ m }_{t}

其中

\hat{ v }_{t}=\max(\hat{ v }_{t-1},v_{t})

m_{t}=\beta_{1} m_{t-1}+(1-\beta_{1})\frac{\partial L}{\partial \omega_{t}}

v_{t}=\beta_{2} v_{t-1}+(1-\beta_{2})\left[ \frac{\partial L}{\partial \omega_{t}} \right]^{2}

\alpha=0.001

\beta_{1}=0.9

\beta_{2}=0.999

\epsilon=10^{-7}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值