深度学习中常见的优化器及其优化思路

首先,深度学习优化算法经历了:BGD→SGD→SGDM→NAG→AdaGrad→AdaDelta→Adam→Nadam

BGD

批量梯度下降,根据整个训练集计算梯度进行梯度下降。

公式 θ = θ − η △ θ J ( θ ) θ = θ-η△_θJ(θ) θ=θηθJ(θ),其中J(θ)是根据整个训练集计算出来的损失。

优点

  • 当损失函数是凸函数时,BGD能收敛到全局最优,非凸时只能局部最优。

缺点

  • 每次根据全部数据来计算梯度,速度较慢。
  • BGD不能够在线训练,不能根据新数据来实时更新模型。

SGD

随机梯度下降。和BGD相反,SGD每次只使用一个训练样本来进行梯度更新

公式 θ = θ − η △ θ J ( θ : x ( i ) : y ( i ) ) θ = θ-η△_θJ(θ:x^{(i)}:y^{(i)}) θ=θηθJ(θ:x(i):y(i)),其中 J ( θ : x ( i ) : y ( i ) ) J(θ:x^{(i)}:y^{(i)}) J(θ:x(i):y(i))是根据样本 ( x ( i ) : y ( i ) ) (x^{(i)}:y^{(i)}) (x(i):y(i))计算出来的损失。

优点

  • SGD每次只根据一个样本计算梯度,速度较快。
  • SGD可以根据新样本实时地更新模型。

缺点

  • SGD在优化过程中损失震荡比较严重。

Momentum(引入了一阶动量)

假设模型在时间t的梯度为 △ J ( θ ) △J(θ) J(θ),则Momentum的梯度更新方法为: V t = β V t − 1 + ( 1 − β ) △ J ( θ ) V_t=βV_{t-1}+(1-β)△J(θ) Vt=βVt1+(1β)J(θ) θ = θ − α V t θ=θ-αV_t θ=θαVt
其中 V t V_t Vt是模型前 1 1 + β \frac{1}{1+β} 1+β1步梯度的平均值,β通常为0.9,α为学习率。
在这里插入图片描述
优点:

  • Momentum引入了一阶动量,使用了Momentum的SGD梯度下降的过程更平滑,震荡更少,收敛也更快。

NAG

对Momentum进行了轻微的修改 V t = β V t − 1 + ( 1 − β ) △ J ( θ − β V t − 1 ) V_t=βV_{t-1}+(1-β)△J(θ-βV_{t-1}) Vt=βVt1+(1β)J(θβVt1) θ = θ − α V t θ=θ-αV_t θ=θαVt

也就是,在梯度更新之前看一下Momentum指向的方向,然后在Momentum指向的位置计算梯度并进行更新。

Adagrad(引入了二阶动量)

优化器命中包含Ada,其含义是Adaptive,代表“自适应”,自适应优化器时代来临。

 在我们训练模型的初期我们的学习率一般比较大,因为这时我们的位置离最优点比较远;当训练快结束时,我们通常会降低学习率,因为训练快结束时我们离最优点比较近,这时使用大的学习率可能会跳过最优点。Adagrad 能使得参数的学习率在训练的过程中越来越小,公式如下: θ = θ − η ∑ t g 2 + ϵ g t θ = θ-\frac{η}{\sqrt{\sum_{t}g^2+\epsilon}}g_t θ=θtg2+ϵ ηgt
 其中, g t g_t gt是模型在t时刻的梯度, ∑ t g 2 \sum_{t}g^2 tg2是模型前t个时刻梯度的平方和, ϵ \epsilon ϵ一般为 1 0 − 8 10^{-8} 108,防止分母为0.
在训练过程中 ∑ t g 2 + ϵ \sqrt{\sum_{t}g^2+\epsilon} tg2+ϵ 越来越大, η ∑ t g 2 + ϵ \frac{η}{\sqrt{\sum_{t}g^2+\epsilon}} tg2+ϵ η越来越小,所以lr越来越小, η η η通常为0.01。
优点

  • 自动调节参数的学习率。

缺点

  • 学习率下降会比较快,可能造成学习提早停止

Adadelta

Adadelta是 对Adagrad的改进,解决了Adagrad优化过程中lr减少导致训练停止的问题。

方法
  不再对过去的梯度平方进行累加,而是改用指数平均的方法进行计算。将 ∑ t g 2 \sum_{t}g^2 tg2替换为 ( 1 − γ ) ∑ i = 0 t γ i g 2 (1-\gamma)\sum_{i=0}^tγ^ig^2 (1γ)i=0tγig2(一阶一样,二阶引入了参数γ)
 但此时仍然依赖全局学习率η,为了消除影响,定义新的指数平均方法: E [ Δ θ 2 ] t = γ E [ Δ θ 2 ] t − 1 + ( 1 − γ ) Δ θ t 2 E[Δθ^2]_t=γE[Δθ^2]_{t-1}+(1-γ)Δθ^2_t E[Δθ2]t=γE[Δθ2]t1+(1γ)Δθt2
  Adadelta 把 Adagrad 分母中的梯度平方和换成了梯度平方的指数加权平均,这使得 Adadelta 学习率的下降速度没有 Adagrad 那么快。

Adam

自适应矩估计,将MomentumAdadelta结合的方法。
同时引入一阶动量和二阶动量。 β 1 β_1 β1以及 β 2 β_2 β2
m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t=β_1m_{t-1}+(1-β_1)g_t mt=β1mt1+(1β1)gt v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t=β_2v_{t-1}+(1-β_2)g_t^2 vt=β2vt1+(1β2)gt2
作者发现一阶动量和二阶动量在初始训练时很小,接近为0,因为β值很大,所以重新计算一个偏差来校正: m t ^ = m t 1 − β 1 t \hat{m_t}=\frac{m_t}{1-β_1^t} mt^=1β1tmt v t ^ = v t 1 − β 2 t \hat{v_t}=\frac{v_t}{1-β_2^t} vt^=1β2tvt
其中, β t β^t βt代表t次方,所以刚开始训练时,通过除(1-β)就可以很好的修正lr,当epoch越大时候,分母就越接近1,又回到了原设计方程。 β 1 β_1 β1默认为0.9, β 2 β_2 β2为0.999, ϵ \epsilon ϵ 1 0 − 8 10^{-8} 108.

Nadam

Adam是结合了Momentum和Adadelta,而NGA又是Momentum的改进。
所以Nadam将Momentum的一阶动量换成了NGA,结合了NGA以及Adadelta。

参考资料:
https://www.cnblogs.com/flix/p/13144064.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值