深度学习中梯度下降优化算法

1 随机梯度下降

       最原始的随机梯度下降算法主要依据当前梯度∂L/∂w乘上一个系数学习率α来更新模型权重w的。
w t + 1 = w t − α ∂ L ∂ w t w_{t+1}=w_t-\alpha \frac{\partial L}{\partial w_t} wt+1=wtαwtL

2 动量算法(Momentum)

       动量算法使用带有动量的梯度(梯度的指数滑动平均,Polyak, 1964)而不是当前梯度来对w进行更新,采用指数滑动平均作为动量更新的方式几乎成为了一个业内标准。
w t + 1 = w t − α V t w_{t+1}=w_t-\alpha V_t wt+1=wtαVt
V t = β V t − 1 + ( 1 − β ) ∂ L ∂ w t V_t=\beta V_{t-1}+(1-\beta)\frac{\partial L}{\partial w_t} Vt=βVt1+(1β)wtL
       V初始化值为0。β一般会被设置为0.9。
       与随机梯度下降相比,它为添加了一个动量的概念使得模型有可能冲出局部最小值,而且通过指数滑动平均的过程降低梯度震荡的程度,加速收敛。

3 自适应学习率算法(Adagrad)

       自适应梯度算法,通过将学习率除以S的平方根来研究学习率分量,其中S为当前和过去平方梯度的累积和。请注意,和SGD算法相同,自适应学习率算法中的梯度分量也保持不变。
w t + 1 = w t − α S t + ϵ ⋅ ∂ L ∂ w t w_{t+1}=w_t-\frac{\alpha}{\sqrt{S_t+\epsilon}}\cdot \frac{\partial L}{\partial w_t} wt+1=wtSt+ϵ αwtL
S t = S t − 1 + [ ∂ L ∂ w t ] 2 S_t=S_{t-1}+[\frac{\partial L}{\partial w_t}]^2 St=St1+[wtL]2
       S的初始值置0,α = 0.01,ε = 10⁻⁷。

4 均方根传递算法(RMSprop)

       均方根传递算法,是在AdaGrad算法上进行改进的另一种自适应学习率算法。 它使用指数加权平均计算,而不是使用累积平方梯度和。
w t + 1 = w t − α S t + ϵ ⋅ ∂ L ∂ w t w_{t+1}=w_t-\frac{\alpha}{\sqrt{S_t+\epsilon}}\cdot \frac{\partial L}{\partial w_t} wt+1=wtSt+ϵ αwtL
S t = β S t − 1 + ( 1 − β ) [ ∂ L ∂ w t ] 2 S_t=\beta S_{t-1}+(1-\beta)[\frac{\partial L}{\partial w_t}]^2 St=βSt1+(1β)[wtL]2
       S的初始值置0,α = 0.001,β = 0.9,ε = 10⁻⁶。

5 自适应增量算法(Adadelta)

       与RMSprop算法类似,Adadelta是在AdaGrad算法的基础上针对学习率进行改进的一种自适应算法。Adadelta算法和RMSprop算法的区别,在于Adadelta算法中用delta的指数加权平均值D来替代原来在Adadelta算法中的学习率参数。
w t + 1 = w t − D t − 1 + ϵ S t + ϵ ⋅ ∂ L ∂ w t w_{t+1}=w_t-\frac{\sqrt{D_{t-1}+\epsilon}}{\sqrt{S_t+\epsilon}}\cdot \frac{\partial L}{\partial w_t} wt+1=wtSt+ϵ Dt1+ϵ wtL
D t = β D t − 1 + ( 1 − β ) [ Δ w t ] 2 D_t=\beta D_{t-1}+(1-\beta)[\Delta w_t]^2 Dt=βDt1+(1β)[Δwt]2
S t = β S t − 1 + ( 1 − β ) [ ∂ L ∂ w t ] 2 S_t=\beta S_{t-1}+(1-\beta)[\frac{\partial L}{\partial w_t}]^2 St=βSt1+(1β)[wtL]2
Δ w t = w t − w t − 1 \Delta w_t=w_t-w_{t-1} Δwt=wtwt1
       D和S的初始值置0,β = 0.95,ε = 10⁻⁶。

6 适应性矩估计算法(Adam)

       适应矩估计算法,是一种将动量和RMSprop结合使用的算法。它通过:使用梯度分量V,梯度的指数移动平均值(如动量)和将学习率α除以S的平方根,平方梯度的指数移动平均值(如在RMSprop中)来学习率分量而起作用。
w t + 1 = w t − α S ^ t + ϵ ⋅ V ^ t w_{t+1}=w_t-\frac{\alpha}{\sqrt{\hat S_t}+\epsilon}\cdot \hat V_t wt+1=wtS^t +ϵαV^t
V ^ t = V t 1 − β 1 t \hat V_t=\frac{V_t}{1-\beta_1^t} V^t=1β1tVt
S ^ t = S t 1 − β 2 t \hat S_t=\frac{S_t}{1-\beta_2^t} S^t=1β2tSt
V t = β 1 V t − 1 + ( 1 − β 1 ) ∂ L ∂ w t V_t=\beta_1V_{t-1}+(1-\beta_1)\frac{\partial L}{\partial w_t} Vt=β1Vt1+(1β1)wtL
S t = β 2 S t − 1 + ( 1 − β 2 ) [ ∂ L ∂ w t ] 2 S_t=\beta_2S_{t-1}+(1-\beta_2)[\frac{\partial L}{\partial w_t}]^2 St=β2St1+(1β2)[wtL]2
       V和S的初始值置0,α = 0.001,β₁ = 0.9,β₂ = 0.999,ε = 10⁻⁸。
       模型的梯度是一个随机变量,一阶矩表示梯度均值,二阶矩表示其方差,一阶矩来控制模型更新的方向,二阶矩控制步长(学习率)。用moveing average来对一阶矩和二阶矩进行估计。bias correct是为了缓解初始一阶矩和二阶矩初始为0带来的moving average的影响。

参考

https://zhuanlan.zhihu.com/p/73962541

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值