深度学习-优化算法与梯度下降

文章目录

  • 前置知识
    • 指数移动平均EMA
    • L2正则(L2 Regularization)
    • 权重衰减(Weight Decay)
  • 优化器
    • SDG
    • Momentum
    • NAG
    • Adagrad
    • RMSProp
    • AdaDelta
    • Adam
    • AdamW
    • 综上
  • 学习率
    • StepLR
    • MultiStepLR
    • Exponential
    • CosineAnealing
    • RLROP(ReduceLRonPlateau)
    • lambda
    • 总结

前置知识

指数移动平均EMA

  • 给予近期数据更高权重的平均方法
    V t = α ⋅ x t + ( 1 − α ) ⋅ V t − 1 V_t = \alpha \cdot x_t + (1 - \alpha) \cdot V_{t-1} Vt=αxt+(1α)Vt1

L2正则(L2 Regularization)

  • 约束 weights 不要太大
    L ′ = L + 1 2 λ ⋅ ∑ i = 1 n w t 2 L' = L+\frac{1}{2}\lambda \cdot \sum_{i=1}^{n} w_t^2 L=L+21λi=1nwt2

权重衰减(Weight Decay)

w t = ( 1 − λ ) ⋅ w t − 1 − μ ⋅ g w_t = (1 - \lambda) \cdot w_{t-1} - \mu \cdot g wt=(1λ)wt1μg

优化器

SDG

  • mini-batch gradient descent:随机选一批量
  • 亲戚1:batch gradient descent:全部
  • 亲戚2:stochatic gradient descent:随机选一个
    w t + 1 = w t − η ⋅ ∇ J ( w t ) w_{t+1} = w_t - \eta \cdot \nabla J(w_t) wt+1=wtηJ(wt)

Momentum

  • 动量
  • 利用EMA融入历史的梯度
  • 原理:将历史梯度和当前梯度做合并
    v t = γ ⋅ v t − 1 + ( 1 − γ ) ∗ J ( w t ) v_{t} = \gamma \cdot v_{t-1} + (1-\gamma)* J(w_t) vt=γvt1+(1γ)J(wt)
    w t = w t − 1 − μ ∗ v t w_{t} = w_{t-1} -\mu* v_{t} wt=wt1μvt

NAG

  • 改进(Nesterov accelerated gradient)
  • 原理:先按照历史梯度走一小步,然后再进行合并
    v t + 1 = γ ⋅ v t + ∇ J ( w t − α ⋅ γ ⋅ v t ) v_{t+1} = \gamma \cdot v_t + \nabla J(w_t - \alpha·\gamma \cdot v_t) vt+1=γvt+J(wtαγvt)
    w t + 1 = w t − α v t + 1 w_{t+1} = w_t - \alpha v_{t+1} wt+1=wtαvt+1

Adagrad

  • 历史梯度+当前梯度的平方
  • 对学习率进行约束
  • 前期较小的时候,r较大,能放大梯度
  • 后期较大的时候,r较小,能约束梯度

g t + 1 = g t + ( ∇ J ( w t ) ) 2 g_{t+1} = g_t + (\nabla J(w_t))^2 gt+1=gt+(J(wt))2
w t + 1 = w t − η g t + 1 + ϵ ⋅ ∇ J ( w t ) w_{t+1} = w_t - \frac{\eta}{\sqrt{g_{t+1} + \epsilon}} \cdot \nabla J(w_t) wt+1=wtgt+1+ϵ ηJ(wt)

RMSProp

  • 在Adagrad上加上EMA思想
    g t + 1 = ρ g t + ( 1 − ρ ) ( ∇ J ( w t ) ) 2 g_{t+1} = \rho g_t + (1 - \rho)(\nabla J(w_t))^2 gt+1=ρgt+(1ρ)(J(wt))2
    w t + 1 = w t − η g t + 1 + ϵ ⋅ ∇ J ( w t ) w_{t+1} = w_t - \frac{\eta}{\sqrt{g_{t+1} + \epsilon}} \cdot \nabla J(w_t) wt+1=wtgt+1+ϵ ηJ(wt)

AdaDelta

  • 也是在Adagrad上进行改进,不需要提前设置学习率
  • 原理尽可能听,听不懂也没关系

Δ w t = − Δ w t − 1 + ϵ g t + 1 + ϵ ⋅ ∇ J ( w t ) \Delta w_t = -\frac{\sqrt{\Delta w_{t-1} + \epsilon}}{\sqrt{g_{t+1} + \epsilon}} \cdot \nabla J(w_t) Δwt=gt+1+ϵ Δwt1+ϵ J(wt)

Adam

  • 用EMA更新梯度,用RMSProp更新学习率,然后进行修正,来避免冷启动,避免训练开始时梯度很小,参数更新很慢

m t + 1 = β 1 m t + ( 1 − β 1 ) ∇ J ( w t ) m_{t+1} = \beta_1 m_t + (1 - \beta_1) \nabla J(w_t) mt+1=β1mt+(1β1)J(wt)
v t + 1 = β 2 v t + ( 1 − β 2 ) ( ∇ J ( w t ) ) 2 v_{t+1} = \beta_2 v_t + (1 - \beta_2)(\nabla J(w_t))^2 vt+1=β2vt+(1β2)(J(wt))2
m ^ t + 1 = m t + 1 1 − β 1 t + 1 \hat{m}_{t+1} = \frac{m{t+1}}{1 - \beta_1^{t+1}} m^t+1=1β1t+1mt+1
v ^ t + 1 = v t + 1 1 − β 2 t + 1 \hat{v}_{t+1} = \frac{v{t+1}}{1 - \beta_2^{t+1}} v^t+1=1β2t+1vt+1
w t + 1 = w t − η v ^ t + 1 + ϵ ⋅ m ^ t + 1 w_{t+1} = w_t - \frac{\eta}{\sqrt{\hat{v}_{t+1}} + \epsilon} \cdot \hat{m}_{t+1} wt+1=wtv^t+1 +ϵηm^t+1

AdamW

  • 数学推导比AdaDelta还难,改进好Adam几乎一样

综上

  • 如果追求优化器效果,直接使用AdamW

学习率

StepLR

  • 等间隔调整学习率
    深度学习-优化算法与梯度下降_第1张图片

MultiStepLR

  • 给定间隔调整学习率

Exponential

  • 调整策略上带上指数项
    深度学习-优化算法与梯度下降_第2张图片

CosineAnealing

  • 余弦周期调整学习率
  • 比较有助于跳出局部极小值
    深度学习-优化算法与梯度下降_第3张图片

RLROP(ReduceLRonPlateau)

  • 非常实用
  • 监控Loss和acc如果不再变化就进行学习率调整

lambda

  • 自定义调整策略

总结

  • 有序调整:前4个
  • 自适应调整:RLROP
  • 自定义调整
    随机梯度下降去优化你的人生-李沐

你可能感兴趣的:(深度学习,深度学习,算法,人工智能)