当前位置: 首页 > news >正文

常见优化器Optimizer总结

文章目录

  • 优化器 Optimizer
    • 1. 梯度下降 (Gradient Descent, GD)
    • 2. 批量梯度下降 (Batch Gradient Descent, BGD)
    • 3. 小批量梯度下降 (Mini-batch Gradient Descent, MBGD)
    • 4. 随机梯度下降 (Stochastic Gradient Descent, SGD)
      • 带动量的随机梯度下降
      • 使⽤Nesterov动量的SGD
    • 5.RMSProp - Root Mean Square Propagation
    • 6.⾃适应矩估计Adam - Adaptive Moment Estimation
    • 7.AdamW(Adam with Weight Decay Fix)

优化器 Optimizer

在 PyTorch 中,优化器(optimizer)是⽤于更新神经⽹络参数的⼯具,它会根据计算得到的损失函数的梯度来调整模型的参数,通常是以最⼩化损失函数来改进模型的性能 。结合着计算图在运⾏时动态更新张量(模型参数)的需要,PyTorch 已实现了所有主流的优化器算法。
我们从最基础的梯度下降开始,⼀步步了解并掌握开发中常⽤的优化器。

1. 梯度下降 (Gradient Descent, GD)

模型参数为 W W W,代价函数为 J ( W t ) J(W_t) J(Wt),则代价函数关于模型参数的偏导数即相关梯度为 Δ J ( W t ) \Delta J(W_t) ΔJ(Wt),学习率为 η t \eta_t ηt,则使用梯度下降法更新参数为:

W t + 1 = W t − η t Δ J ( W t ) W_{t+1} = W_t - \eta_t \Delta J(W_t) Wt+1=WtηtΔJ(Wt)

对于 t + 1 t + 1 t+1 时刻的模型参数 W W W,它的取值决定于 t t t 时刻的参数值加上负的学习率 η \eta η 乘以梯度值。

特点

  • 训练速度慢
  • 容易陷入局部最优解

2. 批量梯度下降 (Batch Gradient Descent, BGD)

批量梯度下降法是最原始的形式,就是指在每一次训练迭代时使用所有样本来进行梯度的更新。参数的更新方式和 GD 一样。

特点

  • 理想状态下经充分训练,梯度可以达到全局最优
  • 缺点是不适合大样本和大模型

3. 小批量梯度下降 (Mini-batch Gradient Descent, MBGD)

模型样本的总批次为 n n n,把自变量 X X X 和因变量 Y Y Y 拆分为 X ( i ) X^{(i)} X(i) Y ( i ) Y^{(i)} Y(i) 批样本。学习率 η t \eta_t ηt 和梯度的计算方式和 GD 一致。但 Δ J i \Delta J_i ΔJi 计算的是 X ( i ) X^{(i)} X(i) Y ( i ) Y^{(i)} Y(i) 批次下的梯度,因此模型参数的调整更新与当前批次样本得到的损失函数值相关。

W t + 1 = W t − η t ∑ i = 1 n Δ J i ( W t , X ( i ) , Y ( i ) ) W_{t+1} = W_t - \eta_t \sum_{i=1}^n \Delta J_i (W_t, X^{(i)}, Y^{(i)}) Wt+1=Wtηti=1nΔJi(Wt,X(i),Y(i))

特点

  • 训练速度比GD快
  • 通过批次大小(batch size)控制模型训练速度

4. 随机梯度下降 (Stochastic Gradient Descent, SGD)

在每次训练迭代时,通过打乱样本原始排序实现随机梯度下降。这种方法也可以看作增强模型泛化能力的手段。

实际上深度学习中最常用的SGD优化器是随机小批量梯度下降(Stochastic Mini-batch Gradient Descent)的混合形式:

  • 结合了SGD的随机性
  • 保留了MBGD的小批量特性

数学表示
W t + 1 = W t − η t Δ J i ( W t , X ( i ) , Y ( i ) ) W_{t+1} = W_t - \eta_t \Delta J_i (W_t, X^{(i)}, Y^{(i)}) Wt+1=WtηtΔJi(Wt,X(i),Y(i))
其中 ( X ( i ) , Y ( i ) ) (X^{(i)}, Y^{(i)}) (X(i),Y(i))表示随机选取的小批量样本

特点

  • 引入随机性有助于逃离局部最优
  • 适合大规模数据集训练
  • 需要仔细调整学习率 η t \eta_t ηt

1.计算梯度:找到当前点的斜率
2.更新参数:往下降方向走一步
3.使用随机样本(SGD):不计算全部数据,只用一部分
4.重复这个过程,直到找到最低点(最优解)

  • 计算过程

在这里插入图片描述

  • 输入参数说明

    • ( l r ) (lr) (lr):学习率,控制参数更新的步长。
    • θ 0 \theta_0 θ0 ( p a r a m s ) (params) (params):初始参数值。
    • f ( θ ) f(\theta) f(θ) ( o b j e c t i v e ) (objective) (objective):目标函数,需要优化(最大化或最小化)的函数。
    • λ \lambda λ ( w e i g h t d e c a y ) (weight\ decay) (weight decay):权重衰减系数,用于防止过拟合,对参数进行惩罚。
    • μ \mu μ ( m o m e n t u m ) (momentum) (momentum):动量系数,用于加速收敛,模拟物理中的动量概念。
    • τ \tau τ ( d a m p e n i n g ) (dampening) (dampening):阻尼系数,调整动量更新时的影响。
    • nesterov:一个布尔值,指示是否使用Nesterov加速梯度法。
    • maximize:一个布尔值,指示是最大化还是最小化目标函数。
  • 计算过程步骤

    1. 初始化循环:从 t = 1 t = 1 t=1 开始迭代训练,直到满足指定的循环条件。

    2. 计算梯度
      g t ← ∇ f t ( θ t − 1 ) g_t \leftarrow \nabla f_t(\theta_{t-1}) gtft(θt1)
      计算目标函数 f f f 在当前参数 θ t − 1 \theta_{t-1} θt1 处的梯度 g t g_t gt

    3. 权重衰减

      • 如果 λ ≠ 0 \lambda \neq 0 λ=0,执行 g t ← g t + λ θ t − 1 g_t \leftarrow g_t + \lambda \theta_{t-1} gtgt+λθt1,将权重衰减项加入梯度中,使得参数更新时考虑对参数大小的惩罚。

      权重衰减 weight decay
      权重衰减是通过对模型参数施加⼀个约束,来提升模型的泛化能⼒。模型在训练数据上表现的过好是,可能学习到的是⽆关特征。权重衰减通过惩罚较⼤的参数值,迫使模型参数趋于更⼩更平滑的参数值。这种惩罚也可以理解为:抑制模型对训练数据的“记忆ˮ,提升模型对未知数据的泛化能⼒

    4. 动量更新

      • 如果 μ ≠ 0 \mu \neq 0 μ=0,说明使用动量:
        • t = 1 t = 1 t=1 时, b t ← g t b_t \leftarrow g_t btgt,因为没有上一时刻的动量,直接将当前梯度作为动量。
        • t > 1 t > 1 t>1 时, b t ← μ b t − 1 + ( 1 − τ ) g t b_t \leftarrow \mu b_{t-1} + (1 - \tau) g_t btμbt1+(1τ)gt,结合上一时刻的动量项 b t − 1 b_{t-1} bt1 和当前梯度 g t g_t gt 计算当前动量项 b t b_t bt,起到阻尼作用。
      • Nesterov加速梯度处理:
        • 如果 nesterov 为真, g t ← g t + μ b t g_t \leftarrow g_t + \mu b_t gtgt+μbt,对梯度进行Nesterov修正,提前考虑下一时刻的动量影响。
        • 否则, g t ← b t g_t \leftarrow b_t gtbt,直接使用计算得到的动量项作为更新梯度。
    5. 参数更新

    • 如果 maximize 为真, θ t ← θ t − 1 + γ g t \theta_t \leftarrow \theta_{t-1} + \gamma g_t θtθt1+γgt,朝着梯度上升的方向更新参数以最大化目标函数。
    • 否则, θ t ← θ t − 1 − γ g t \theta_t \leftarrow \theta_{t-1} - \gamma g_t θtθt1γgt,朝着梯度下降的方向更新参数以最小化目标函数。
    1. 返回结果:循环结束后,返回最终的参数 θ t \theta_t θt

带动量的随机梯度下降

具有动量(momentum)的SGD是⽤于提⾼神经⽹络性能的优化器之⼀
在这里插入图片描述

带有动量的SGD,就是在连续的梯度更新过程中,将之前的梯度项通过动量⽽建⽴起关联,让每⼀次的梯度更新都不再孤⽴。也就是让每⼀次的参数更新⽅向都不再仅取决于当前位置的梯度,还会受到上⼀次参数更新⽅向的影响

  • 动量的作用

    • 动量可以帮助优化器在梯度下降过程中更快地收敛,尤其是在梯度变化较大的情况下。
    • 它通过累积之前的梯度信息,使得参数更新不仅依赖于当前的梯度,还考虑了之前的梯度方向,从而减少震荡和提高收敛速度。
  • 动量的计算

    • 在每次迭代中,动量会根据当前梯度和之前的动量进行更新。
    • 具体来说,动量的更新公式为:
      v t = μ v t − 1 + η ∇ J ( θ t − 1 ) v_t = \mu v_{t-1} + \eta \nabla J(\theta_{t-1}) vt=μvt1+ηJ(θt1)
      其中, v t v_t vt 是当前的动量, μ \mu μ 是动量系数, η \eta η 是学习率, ∇ J ( θ t − 1 ) \nabla J(\theta_{t-1}) J(θt1) 是当前梯度。
    • 然后,参数更新公式为:
      θ t = θ t − 1 − v t \theta_t = \theta_{t-1} - v_t θt=θt1vt
  • 动量系数

    • 动量系数 μ \mu μ 通常取值在 0.5 0.5 0.5 0.99 0.99 0.99 之间。
    • 较大的动量系数可以使得优化器更快地收敛,但也可能导致震荡;较小的动量系数则会使得优化器更加稳定,但收敛速度较慢。
  • 使⽤动量的SGD优势

    1. 动量⽐随机梯度下降快,训练也⽐ SGD 快。
    2. 由于涉及到动量,可以逃离局部最⼩值的可能并达到全局最⼩值。
      在这里插入图片描述

在动图中,我们可以看到紫⾊是具有动量的SGD,浅蓝⾊是没有动量的SGD,具有动量的SGD可以达到全局最⼩值,⽽SGD则停留在局部最⼩值。 但有⼀个问题,动量本⾝有时可能是⼀个问题,因为达到全局最⼩值后的⾼动量仍在波动,需要⼀些时间才能稳定在全局最⼩值。这种⾏为会导致时间消耗,这使得动量 SGD ⽐其他优化慢,但仍然⽐ SGD 快。

惯性存在的同时有好处也有坏处,紫色小球需要更大的衰减,更长时间的震荡才能停下来

使⽤Nesterov动量的SGD

Nesterov动量是对传统动量的改进,主要通过提前计算梯度来提高收敛速度。

  • Nesterov动量的原理
    Nesterov动量在计算梯度时,不是直接使用当前参数,而是先根据当前动量预测下一个参数位置,然后在这个位置计算梯度。这样可以更好地利用动量信息,减少震荡。
  • Nesterov动量的计算
    • 在每次迭代中,先计算预测位置:
      θ p r e d = θ t − 1 − μ v t − 1 \theta_{pred} = \theta_{t-1} - \mu v_{t-1} θpred=θt1μvt1
      其中, v t − 1 v_{t-1} vt1 是上一次的动量。
    • 然后,在预测位置计算梯度:
      g t = ∇ J ( θ p r e d ) g_t = \nabla J(\theta_{pred}) gt=J(θpred)
    • 最后,更新动量和参数:
      v t = μ v t − 1 + η g t v_t = \mu v_{t-1} + \eta g_t vt=μvt1+ηgt
      θ t = θ t − 1 − v t \theta_t = \theta_{t-1} - v_t θt=θt1vt
  • Nesterov动量的优势
    • Nesterov动量可以更快地收敛,尤其是在梯度变化较大的情况下。
    • 它通过提前计算梯度,使得参数更新更加准确,从而减少震荡和提高收敛速度。

但是,在随机梯度的情况下,Nesterov动量没有改进收敛率。

5.RMSProp - Root Mean Square Propagation

RMSProp 的核⼼思想是保持梯度平⽅的移动平均,并使⽤这个移动平均值来调整学习率,从⽽使参数更新更加稳定和⾼效。
算法引⼊⼀个类似于Momentum中的衰减系数r,让r每回合都衰减⼀定⽐例。
在这里插入图片描述

  • 输入参数

    • α \alpha α:用于计算梯度平方的平滑系数
    • γ \gamma γ ( l r ) (lr) (lr):学习率,控制参数更新步长
    • θ 0 \theta_0 θ0:模型初始参数
    • f ( θ ) f(\theta) f(θ):目标函数
    • λ \lambda λ:权重衰减系数
  • 模型训练相关要素

    • μ \mu μ:动量系数
    • centered:布尔值,指示是否计算中心梯度
    • c c c:平滑项,防止分母为零
  • 参数初始化

    • v 0 ← 0 v_0 \leftarrow 0 v00:初始化平方梯度的指数加权平均值
    • b 0 ← 0 b_0 \leftarrow 0 b00:初始化动量缓冲区
    • g 0 a v e ← 0 g_0^{ave} \leftarrow 0 g0ave0:初始化平均梯度(用于中心梯度计算)
  • 计算过程步骤

    1. 初始化循环
    • t = 1 t = 1 t=1 开始迭代训练,直到满足指定的循环条件。
    1. 计算当前梯度
    • g t ← ∇ f ( t ) ⋅ ( f t − 1 ) g_t \leftarrow \nabla f(t) \cdot (f_{t-1}) gtf(t)(ft1)
      对目标函数 f f f 在参数 θ t − 1 \theta_{t-1} θt1 处求梯度,得到当前梯度 g t g_t gt
    1. 权重衰减处理
    • λ ≠ 0 \lambda \neq 0 λ=0,执行 g t ← g t + λ θ t − 1 g_t \leftarrow g_t + \lambda \theta_{t-1} gtgt+λθt1
      将权重衰减项 λ θ t − 1 \lambda \theta_{t-1} λθt1 加入梯度,惩罚参数大小,防止过拟合。
    1. 计算梯度平方的指数加权平均
    • v t ← α v t − 1 + ( 1 − α ) g t 2 v_t \leftarrow \alpha v_{t-1} + (1 - \alpha) g_t^2 vtαvt1+(1α)gt2
      更新梯度平方的指数加权平均值 v t v_t vt,融合历史梯度平方信息。
    1. 中心梯度计算
    • v ~ t ← v t \tilde{v}_t \leftarrow v_t v~tvt(直接使用 v t v_t vt 作为归一化分母)
    • centered 为 True:
      g t a v e ← g t a v e α + ( 1 − α ) g t g_t^{ave} \leftarrow g_t^{ave} \alpha + (1 - \alpha) g_t gtavegtaveα+(1α)gt
      计算梯度的指数加权平均值 g t a v e g_t^{ave} gtave;
      v ~ t ← v ~ t − ( g t a v e ) 2 \tilde{v}_t \leftarrow \tilde{v}_t - (g_t^{ave})^2 v~tv~t(gtave)2
      v t v_t vt 减去梯度均值的平方,得到修正后的 v ~ t \tilde{v}_t v~t(用于归一化)。
    1. 动量更新与参数迭代
    • μ > 0 \mu > 0 μ>0(使用动量):
      b t ← μ b t − 1 + g t / ( v ~ t + ϵ ) b_t \leftarrow \mu b_{t-1} + g_t / (\sqrt{\tilde{v}_t} + \epsilon) btμbt1+gt/(v~t +ϵ)
      结合历史动量 b t − 1 b_{t-1} bt1 和当前归一化梯度 g t / ( v ~ t + ϵ ) g_t / (\sqrt{\tilde{v}_t} + \epsilon) gt/(v~t +ϵ),更新动量项 b t b_t bt;
      θ t ← θ t − 1 − γ b t \theta_t \leftarrow \theta_{t-1} - \gamma b_t θtθt1γbt
      用动量项 b t b_t bt 和学习率 γ \gamma γ 更新参数 θ t \theta_t θt
    • μ ≤ 0 \mu \leq 0 μ0(不使用动量):
      θ t ← θ t − 1 − γ g t / ( v ~ t + ϵ ) \theta_t \leftarrow \theta_{t-1} - \gamma g_t / (\sqrt{\tilde{v}_t} + \epsilon) θtθt1γgt/(v~t +ϵ)
      直接用归一化后的梯度 g t / ( v ~ t + ϵ ) g_t / (\sqrt{\tilde{v}_t} + \epsilon) gt/(v~t +ϵ) 和学习率 γ \gamma γ 更新参数 θ t \theta_t θt
  • 输出结果

    • 循环结束后,返回最终更新的参数 θ t \theta_t θt,完成模型训练中的参数优化。

特点:
解决了深度学习中过早结束的问题,适合RNN⽹络
依赖于全局学习率,引⼊了和momentum ⼀样的平滑系数 α \alpha α

6.⾃适应矩估计Adam - Adaptive Moment Estimation

Adam算法,通过计算梯度的⼀阶矩和⼆阶矩估计来调整学习率,对不同参数设置⾃适应学习率
在这里插入图片描述

  • 输入参数:

    • γ \gamma γ (lr):学习率;
    • β 1 , β 2 \beta_1, \beta_2 β1,β2 (betas):一阶矩、二阶矩的指数衰减系数;
    • θ 0 \theta_0 θ0:模型初始参数;
    • f ( θ ) f(\theta) f(θ):目标函数;
    • λ \lambda λ:权重衰减系数;
    • amsgrad:指示是否使用AMSGrad变体;
    • e e e:平滑项,防止分母为零;
    • maximize:指示最大化或最小化目标函数。
  • 初始化:

    • m 0 ← 0 m_0 \leftarrow 0 m00:初始化一阶矩(动量相关);
    • v 0 ← 0 v_0 \leftarrow 0 v00:初始化二阶矩(梯度平方的累积);
    • v 0 ‾ m a x ← 0 \overline{v_0}^{max} \leftarrow 0 v0max0:初始化AMSGrad所需的最大二阶矩。
  • 计算过程步骤:

    1. 初始化循环
    • t = 1 t = 1 t=1 开始迭代训练,直到满足指定的循环条件。
    1. 计算梯度方向
    • maximize 为 True:
      g t ← − ∇ f t ( θ t − 1 ) g_t \leftarrow -\nabla f_t(\theta_{t-1}) gtft(θt1),取负梯度(沿梯度反方向更新)。
    • maximize 为 False:
      g t ← ∇ f t ( θ t − 1 ) g_t \leftarrow \nabla f_t(\theta_{t-1}) gtft(θt1),直接计算梯度。
    1. 权重衰减处理
    • λ ≠ 0 \lambda \neq 0 λ=0,执行 g t ← g t + λ θ t − 1 g_t \leftarrow g_t + \lambda \theta_{t-1} gtgt+λθt1,将权重衰减项加入梯度,抑制参数过大。
    1. 计算一、二阶矩
    • m t ← β 1 m t − 1 + ( 1 − β 1 ) g t m_t \leftarrow \beta_1 m_{t-1} + (1 - \beta_1) g_t mtβ1mt1+(1β1)gt:更新一阶矩,融合历史梯度与当前梯度。
    • v t ← β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t \leftarrow \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vtβ2vt1+(1β2)gt2:更新二阶矩,累积梯度平方的指数加权平均。
    1. 偏差修正
    • m ^ t ← m t / ( 1 − β 1 t ) \hat{m}_t \leftarrow m_t / (1 - \beta_1^t) m^tmt/(1β1t):修正一阶矩的偏差(消除初始阶段 m t m_t mt 偏小的影响)。
    • v ^ t ← v t / ( 1 − β 2 t ) \hat{v}_t \leftarrow v_t / (1 - \beta_2^t) v^tvt/(1β2t):修正二阶矩的偏差。
    1. 参数更新
    • amsgrad 为 True:
      • v ^ t m a x ← max ⁡ ( v ^ t − 1 m a x , v ^ t ) \hat{v}_t^{max} \leftarrow \max (\hat{v}_{t-1}^{max}, \hat{v}_t) v^tmaxmax(v^t1max,v^t):更新最大二阶矩(AMSGrad核心,保证二阶矩不下降);
      • θ t ← θ t − 1 − γ m ^ t / ( v ^ t m a x + ϵ ) \theta_t \leftarrow \theta_{t-1} - \gamma \hat{m}_t / (\sqrt{\hat{v}_t^{max}} + \epsilon) θtθt1γm^t/(v^tmax +ϵ):使用最大二阶矩归一化一阶矩,更新参数。

      AMSGrad算法是针对 Adam 在收敛性上的不足提出的改进算法。

    • amsgrad 为 False:
      • θ t ← θ t − 1 − γ m ^ t / ( v ^ t + ϵ ) \theta_t \leftarrow \theta_{t-1} - \gamma \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon) θtθt1γm^t/(v^t +ϵ):直接用修正后的二阶矩归一化一阶矩,更新参数。
    1. 返回结果
    • 循环结束后,返回最终更新的参数 θ t \theta_t θt,完成模型训练中的参数优化。

在Adam优化器中,计算一阶矩估计( m t m_t mt)与二阶矩估计( v t v_t vt)的比值( m ^ t v t \frac{\hat{m}_t}{\sqrt{v_t}} vt m^t),其核心目的是实现自适应学习率调整。

  • 自适应调整步长:根据梯度的方向和大小动态调整每个参数的更新幅度。
  • 稳定训练过程:减少噪声干扰,避免梯度震荡,提高收敛效率。
  • 解耦参数更新:使不同参数的学习率独立于全局学习率,适应不同特征的优化需求。

7.AdamW(Adam with Weight Decay Fix)

AdamW 在Adam算法的基础上,对参数 θ t \theta_t θt加⼊了权重衰减项的计算。

  • 计算过程
    在这里插入图片描述

  • Aadm算法和AdamW算法结构对⽐

    步骤AdamAdamW
    梯度计算 g t = ∇ J ( θ t ) + λ ⋅ θ t g_t = \nabla J(\theta_t) + \lambda \cdot \theta_t gt=J(θt)+λθt g t = ∇ J ( θ t ) g_t = \nabla J(\theta_t) gt=J(θt)
    一阶矩估计 m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t mt=β1mt1+(1β1)gt与Adam相同
    二阶矩估计 v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 vt=β2vt1+(1β2)gt2与Adam相同
    偏差修正 m ^ t = m t / ( 1 − β 1 t ) \hat{m}_t = m_t / (1 - \beta_1^t) m^t=mt/(1β1t)与Adam相同
    v ^ t = v t / ( 1 − β 2 t ) \hat{v}_t = v_t / (1 - \beta_2^t) v^t=vt/(1β2t)与Adam相同
    更新公式 θ t + 1 = θ t − γ ⋅ m ^ t v ^ t + ϵ \theta_{t+1} = \theta_t - \gamma \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t + \epsilon}} θt+1=θtγv^t+ϵ m^t θ t + 1 = θ t − γ ⋅ m ^ t v ^ t + ϵ − γ ⋅ λ ⋅ θ t \theta_{t+1} = \theta_t - \gamma \cdot \frac{\hat{m}_t}{\sqrt{\hat{v}_t + \epsilon}} - \gamma \cdot \lambda \cdot \theta_t θt+1=θtγv^t+ϵ m^tγλθt
  • Adam
    运用传统的正则化方法,具体是在梯度计算时,把正则项 λ ⋅ θ t \lambda \cdot \theta_t λθt 添加到原始梯度中:
    g t = ∇ J ( θ t ) + λ ⋅ θ t g_t = \nabla J(\theta_t) + \lambda \cdot \theta_t gt=J(θt)+λθt
    这种方式下,权重衰减和学习率是关联的。因为正则项会受到自适应学习率 α / v t \alpha / \sqrt{v_t} α/vt 的缩放影响,所以当学习率变化时,权重衰减的强度也会跟着改变。

  • AdamW
    采用独立的权重衰减策略,将权重衰减和梯度更新分开进行操作:
    θ t + 1 = θ t − learning_rate ⋅ ( m t v t + ϵ + λ ⋅ θ t ) \theta_{t+1} = \theta_t - \text{learning\_rate} \cdot \left( \frac{m_t}{\sqrt{v_t + \epsilon}} + \lambda \cdot \theta_t \right) θt+1=θtlearning_rate(vt+ϵ mt+λθt)
    在这里,权重衰减直接以 λ ⋅ θ t \lambda \cdot \theta_t λθt 的形式独立作用于权重更新,和学习率的缩放没有关系。

相关文章:

  • 论文润色指令
  • shell:基础
  • C语言数组初始化方法大全(附带实例)
  • JAVA 集合进阶 06 - 09 Map 集合的实现类:HashMap、LinkecHashMap
  • JAVA 集合进阶 Map集合的实现类 TreeMap
  • 电子电路:空气也会形成电容吗?
  • 并发工具【上】——线程池及其操作
  • Elasticsearch的插件(Plugin)系统介绍
  • 多态(全)
  • 企业级实战之Iptables防火墙案例分析
  • 11. MySQL事务管理(上)
  • 极客大挑战 2019 EasySQL 1(万能账号密码,SQL注入,HackBar)
  • 3.spring基础入门(三)
  • 打卡day44
  • typescript中的type如何使用
  • 信息学奥赛一本通 1570:【例 2】能量项链 | 1843:【06NOIP提高组】能量项链 | 洛谷 P1063 [NOIP 2006 提高组] 能量项链
  • MySQL 索引:为使用 B+树作为索引数据结构,而非 B树、哈希表或二叉树?
  • React-native实战系列
  • 论文速读《VideoMimic:通过视觉模仿实现人形机器人感知控制》
  • 玩转Docker | 使用Docker部署Qwerty Learner英语单词学习网站
  • 市场营销咨询/360优化大师历史版本
  • 做网站的是什么/新闻报道最新消息今天
  • 网站开发新闻管理系统的背景/百度关键词点击
  • 湘潭做网站价格优选磐石网络/优化关键词推广
  • 网站开发单子/深圳公关公司
  • 万网人网站备案流程/百度推广电话是多少