SGD

每次迭代只采样一个样本

优化 learn-rate,自适应学习率

  • 自适应学习率的方法:对不同的参数使用不同的学习率,参数更新频率和更新步长负相关

  • [[Annealing]],全局共享learn_rate 所有的参数以相同的幅度进行更新

    • 随步衰减

    • 指数衰减

    • 1/t衰减

  • [[AdaGrad]],参数独立 learn_rate 更新幅度取决于参数本身

    • θt+1=θtηGt+ϵgt\theta_{t+1}=\theta_t-\frac{\eta}{\sqrt{G_t+\epsilon}} \odot g_t

    • nt=nt1+gt2n_t=n_{t-1}+g^2_t

    • Δθt=ηnt+ϵ\Delta \theta _t = -\frac{\eta}{\sqrt{n_t+\epsilon}}

    • 计算一个时间区间内的梯度值累积和 [[移动平均]]

      • AdaDelta 分母滑动区间 + 单位矫正

        • E[g2]t=γE[g2]t1+(1γ)gt2E\left[g^2\right]_t=\gamma E\left[g^2\right]_{t-1}+(1-\gamma) g_t^2

        • E[Δθ2]t=γE[Δθ2]t1+(1γ)E[Δθ2]tE\left[\Delta \theta^2\right]_t=\gamma E\left[\Delta \theta^2\right]_{t-1}+(1-\gamma) E\left[\Delta \theta^2\right]_t

        • Δθt=RMS[Δθ]t1RMS[g]tgt\Delta \theta_t=-\frac{R M S[\Delta \theta]_{t-1}}{R M S[g]_t} g_t

      • [[RMSProp]] 分子滑动区间

        • cache = decay_rate * cache + (1 - decay_rate) * dx**2

        • x += - learning_rate * dx / (sqrt(cache) + eps)

        • E[g2]t=0.9E(g2)t1+0.1gt2E\left[g^2\right]_t=0.9 E\left(g^2\right)_{t-1}+0.1 g_t^2

        • θt+1=θtηE[g2]t+ϵ\theta_{t+1}=\theta_t-\frac{\eta}{\sqrt{E\left[g^2\right]_t+\epsilon}}

        • [[Adam]] 分子动量版

          • vt=β2vt1+(1β2)gt2v_t=\beta_2 v_{t-1}+\left(1-\beta_2\right) g_t^2

          • mt=β1mt1+(1β1)gtm_t=\beta_1 m_{t-1}+\left(1-\beta_1\right) g_t

          • θt+1=θtηv^t+ϵm^t\theta_{t+1}=\theta_t-\frac{\eta}{\sqrt{\hat{v}_t+\epsilon}} \hat{m}_t

          • [[AdamW]][[LazyAdam]]

优化梯度方向,减小震荡

  • [[Momentum]]:强化相关方向的训练和弱化无关方向的震荡来加速 SGD 收敛

    • vt=γvt1+ηθJ(θ)v_t=\gamma v_{t-1}+\eta \nabla_\theta J(\theta)

    • V[t+1] = rho * v[t] + dx;

    • x[t+1] = x[t] - learningRate * V[t+1]

  • Nesterov 梯度加速法

    • 预判前方地形

    • vt=γvt1+ηθJ(θγvt1)v_t=\gamma v_{t-1}+\eta \nabla_\theta J\left(\theta-\gamma v_{t-1}\right)

梯度下降法 [[SGD]]

  • 并行化,Scalable

    • Downpour SGD

    • Hogwild!

作者

Ryen Xiang

发布于

2024-10-05

更新于

2024-10-05

许可协议


网络回响

评论