机器学习-New Optimization

机器学习(New Optimization)

前言:
学习资料

videopptblog

下面的PPT里面有一些符号错误,但是我还是按照PPT的内容编写公式,自己知道符号表示什么含义就好了

New Optimization

    • 机器学习(New Optimization)
      • Notation
      • On-line VS Off-line
      • 常用优化算法
        • 1. 随机梯度下降法(SGD,Stochastic gradient descent)
        • 2. SGD with Momentum (SGDM)
          • Why momentum?
        • 3. Adagrad
        • 4. RMSProp(Root Mean Square Propagation)
        • 5. Adam(Adaptive Moment Estimation)
          • Adam VS SGDM
          • Update Of Adam Alogrithm
        • 6. AMSGrad(Adaptive Moment Estimation with Slower Learning Rates)
        • 7. SWATS(Simply combine Adam with SGDM)
        • 8. RAdam(Rectified Adam)
          • RAdam VS SWATS
        • 9. AdaBound
        • 10. Improving SGDM
        • 11. Lookahead(universal wrapper for all optimizers)
        • 12. Nadam(超前预测)
          • Nesterov动量
        • 13. L2-NORM
        • 14. Something helps optimization
      • Summarize
        • 1. Alogorithm classification
        • 2. Comparison between SGDM and Adam
        • 3. Advice

Notation

符号解释
θ t \theta_t θt第 t 步时,模型的参数
Δ L ( θ ) \Delta L(\theta) ΔL(θ) or g t g_t gt模型参数为 θ t \theta_t θt 时,对应的梯度,用于计算 θ t + 1 \theta_{t+1} θt+1
m t + 1 m_{t+1} mt+1从第 0 步到第 t 步累计的momentum,用于计算 θ t + 1 \theta_{t+1} θt+1

Notation


On-line VS Off-line

  • On-line:每次参数更新,只给一对 ( x t x_t xt , y t y_t yt )
  • Off-line:每次更新参数,考虑所有的训练资料

常用优化算法

intention:

  • Find a 𝜃 to get the lowest ∑ x L ( θ ; x ) \sum_x L(\theta; x) xL(θ;x) !!
  • Or, Find a 𝜃 to get the lowest L ( θ ) L(\theta) L(θ) !!

1. 随机梯度下降法(SGD,Stochastic gradient descent)

算法思想:少量多次

  • GD算法进行梯度更新的时候,一般都使所有数据训练完成以后才进行一次更新,每一次都是对参数进行一大步的更新
  • SGD算法每次选取其中的一个样本进行梯度的计算,然后再进行参数的更新,每一次都是对参数进行一小步的更新

注意

  • SGD随机梯度下降本质是只取一个样本来计算梯度,避免了梯度下降用全部样本计算梯度的大量运算,而在上面的代码里的loss.backward()会使用全部样本来计算梯度,可以去看看这个问答
  • 先在的主流框架中所谓的SGD实际上都是Mini-batch Gradient Descent (MBGD,亦成为SGD)。对于含有N个训练样本的数据集,每次参数更新,仅依据一部分数据计算梯度。小批量梯度下降法既保证了训练速度,也保证了最后收敛的准确率。

图解:
SGD


2. SGD with Momentum (SGDM)

算法思想:在SGD的基础上,考虑前一次更新的梯度。

  • 将前面的梯度考虑在内,防止出现局部最优解
  • Local Minimum,此时的gradient是0,但是不是全局最优解,如果我们考虑前面的梯度的history,那么他会继续优化前进,达到更好的效果

算法:

  • 参数: θ t \theta^t θt
  • 梯度: Δ L ( θ t ) \Delta L(\theta^t) ΔL(θt)
  • 移动:
    • v 0 = 0 v^0 = 0 v0=0
    • v t + 1 = λ v t + η Δ L ( θ t ) v^{t+1} = \lambda v^t + \eta \Delta L(\theta^t) vt+1=λvt+ηΔL(θt)
  • 参数更新: θ t + 1 = θ t + v t + 1 \theta^{t+1} = \theta^t + v^{t+1} θt+1=θt+vt+1

Movement not just based on gradient, but previous movement
图解:
SGDM

Why momentum?
  • Momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力
  • 防止局部最优解
  • 在进入梯度为0的地方,并不会马上停下来,而因为gradient of previous 而继续前进

Momentum


3. Adagrad

算法思想:根据所有的梯度自行调整学习率,使得模型在较短的时间内达到较好的收敛效果
算法:
θ t = θ t − 1 − η ∑ i = 0 t − 1 ( g i ) 2 g t − 1 \theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\sum_{i=0}^{t-1}(g_i)^2}} g_{t-1} θt=θt1i=0t1(gi)2 ηgt1
优缺点:

  • 优点:
    • 自适应学习率,根据每个参数的历史梯度信息调整学习率,有助于更稳定地收敛。
    • 不需要手动调整学习率,适应不同参数的更新频率。
    • 适用于稀疏数据,对出现频率较低的参数使用较大的学习率。
  • 缺点:
    • 学习率逐渐减小可能导致学习率过小,使得模型停止学习或更新过于缓慢。
    • 对非凸优化问题可能表现不佳,难以跳出局部最小值。
    • 内存开销较大,对大规模模型和数据集可能不适用。

图解:
在这里插入图片描述


4. RMSProp(Root Mean Square Propagation)

算法思想:实现学习率的自动更新

  • 用微分平方移动加权平均解决了vt一直增大,防止在t很大以后,系数太小,无法走出去的问题。vt如果是前t个gradient的平方和,分母会永无止境的增加。
  • 与Adagrad一致,但解决了Adagrad的缺点

算法:

  • v 1 = g 0 2 v_1 = g_0^2 v1=g02
  • v t = α v t − 1 + ( 1 − α ) g t − 1 2 v_t = \alpha v_{t-1} + (1 - \alpha)g_{t-1}^2 vt=αvt1+(1α)gt12
  • θ t = θ t − 1 − η v t g t − 1 \theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{v_t}}g_{t-1} θt=θt1vt ηgt1
  • α \alpha α:衰减因子(一般取值较接近1,如0.9)

优缺点:

  • 优点:
    • 自适应学习率,可以在训练过程中调整学习率,有助于稳定收敛。
    • 解决Adagrad的学习率衰减问题,避免学习率过小导致停止学习。
    • 在非凸优化问题中表现良好,有助于跳出局部最小值。
    • 适用于大规模模型和数据集,内存开销较小。
  • 缺点:
    • 学习率仍可能衰减过快,导致收敛较慢。
    • 对于不同问题,对超参数敏感,需要调参。
    • 不适用于稀疏数据。

图解:
RMSProp


5. Adam(Adaptive Moment Estimation)

算法思想:将SGDM与RMSProp合在一起使用
算法:

  • m t = β 1 m t − 1 + ( 1 − β 1 ) g t ( 1 ) m_t = \beta_1m_{t-1} + (1 - \beta_1)g_t \qquad(1) mt=β1mt1+(1β1)gt(1)
  • v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 ( 2 ) v_t = \beta_2v_{t-1} + (1 - \beta_2)g_t^2 \qquad(2) vt=β2vt1+(1β2)gt2(2)
  • m ^ t = m t 1 − β 1 t ( 3 ) \widehat{m}_t = \frac{m_t}{1 - \beta_1^t} \qquad(3) m t=1β1tmt(3)
  • v ^ t = v t 1 − β 2 t ( 4 ) \widehat{v}_t = \frac{v_t}{1 - \beta_2^t} \qquad(4) v t=1β2tvt(4)
  • θ t = θ t − 1 − η v ^ t + ε m ^ t ( 5 ) \theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\widehat{v}_t + \varepsilon}}\widehat{m}_t \qquad(5) θt=θt1v t+ε ηm t(5)

注解:

  • 公式(1)取自SGDM算法,保留了Momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。
    • m t m_t mt是本次的Momentum
    • m t − 1 m_{t-1} mt1是上一次的Momentum
    • g t g_t gt是本次的梯度
    • β 1 \beta_1 β1是超参数,默认为0.9。通过修改这个参数实现前面动量对后面动向的影响。
    • β 1 \beta_1 β1看起感觉只考虑了0.1的本次梯度,考虑了0.9的历史梯度,但本次梯度会在下次更新时被考虑进来。
  • 公式(2)取自RMSProp算法, β 2 \beta_2 β2是超参数,默认0.999。
  • 公式(3)和(4)是分别对 m t m_t mt v t v_t vt进行了放大,而且是放大得越来越少。
    • 注意:Adam算法中的矩变量(一阶矩估计m和二阶矩估计v)在训练的初期可能会有偏差。这是因为在初始时,这些变量会被初始化为零,导致它们在训练初期偏向于较小的值。
  • 公式(5)是我们最后更新的公式,分母加入 ε \varepsilon ε是为了防止分母为0,一般很小,默认 1 0 − 8 10^{-8} 108.
  • 矩:通过这种方式,Adam算法能够更快地收敛并避免陷入局部最小值。
    • 一阶矩变量m类似于动量的作用,有助于平滑梯度更新方向;
    • 二阶矩变量v类似于RMSProp的作用,对历史梯度平方进行衰减,适应不同参数的更新频率。

优缺点:

  • 优点:
    • 自适应学习率,稳定收敛,适应不同参数的更新频率。
    • 综合了动量和自适应学习率,高效优化模型参数。
    • 适用于稀疏数据和大规模模型,内存开销较小。
  • 缺点:
    • 对非平稳目标函数可能不稳定。
    • 对超参数敏感,需要调参。

图解:
Adam
Adam
Adam

Adam VS SGDM
  • Adam:fast training, large generalization gap, unstable
  • SGDM:stable, little generalization gap, better convergence

Adam VS SGDM

Update Of Adam Alogrithm

Introduction: Adam算法是一种结合了动量(momentum)和自适应学习率的优化算法,广泛用于深度学习模型的训练。虽然Adam在很多情况下表现出色,但在某些情况下可能存在一些问题。因此,研究人员提出了一些改进版本的Adam算法,旨在克服其一些缺点并提升性能。以下是一些对Adam算法的改进:

  1. AdaBound: AdaBound算法是对Adam算法的改进,主要解决Adam在训练后期可能出现学习率过大导致震荡或不稳定的问题。它引入了学习率上下界的概念,并通过收缩学习率的方式在训练后期更好地控制学习率的大小。
  2. Nadam: Nadam(Nesterov-accelerated Adaptive Moment Estimation)算法是对Adam算法的扩展,结合了Nesterov动量和Adam的特性。Nadam在更新参数时采用了带有Nesterov动量的梯度,这样可以更准确地估计梯度并更快地收敛。
  3. RAdam: RAdam(Rectified Adam)算法是对Adam算法的改进,解决了Adam在训练初期可能出现梯度估计不准的问题。RAdam在梯度估计的前期进行修正,使得训练更加稳定。
  4. SGD + Momentum: 一些研究人员发现,在某些任务上,使用传统的SGD优化器配合动量(Momentum)可以获得更好的性能。SGD + Momentum算法结合了SGD的简单性和动量的稳定性,对于一些任务可能是一个有竞争力的选择。
  5. Lookahead: Lookahead算法是一种优化器的加速器。它将一个“慢速”的优化器和一个“快速”的优化器结合在一起。Lookahead优化器跟踪“慢速”优化器的状态,并周期性地更新“快速”优化器的状态。这样,Lookahead算法可以更快地收敛并且比许多传统的优化器表现更好。

这些改进的算法都是在Adam算法的基础上进行的改进,以满足不同任务和场景下的优化需求。选择合适的优化算法取决于具体的任务、模型结构和数据集特性。在实际应用中,建议通过实验和交叉验证来选择最适合你的深度学习模型的优化算法。


6. AMSGrad(Adaptive Moment Estimation with Slower Learning Rates)

算法思想:与Adam算法基本一样(Adam算法的优化)
调整:二阶矩变量(自适应学习率)
v ^ t = m a x ( v ^ t − 1 , v t ) \widehat{v}_t = max(\widehat{v}_{t-1},v_t) v t=max(v t1,vt)
在对二阶矩变量进行纠正之前,先与前一次纠正后的二阶矩变量进行大小比较,直接赋值给纠正后的二阶矩变量,然后在对纠正后的二阶矩变量再进行纠正
算法:

  • m t = β 1 m t − 1 + ( 1 − β 1 ) g t ( 1 ) m_t = \beta_1m_{t-1} + (1 - \beta_1)g_t \qquad(1) mt=β1mt1+(1β1)gt(1)
  • v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 ( 2 ) v_t = \beta_2v_{t-1} + (1 - \beta_2)g_t^2 \qquad(2) vt=β2vt1+(1β2)gt2(2)
  • v ^ t = m a x ( v ^ t − 1 , v t ) ( 3 ) \widehat{v}_t = max(\widehat{v}_{t-1},v_t) \qquad(3) v t=max(v t1,vt)(3)
  • m ^ t = m t 1 − β 1 t ( 4 ) \widehat{m}_t = \frac{m_t}{1 - \beta_1^t} \qquad(4) m t=1β1tmt(4)
  • v ^ t = v ^ t 1 − β 2 t ( 5 ) \widehat{v}_t = \frac{\widehat{v}_t}{1 - \beta_2^t} \qquad(5) v t=1β2tv t(5)
  • θ t = θ t − 1 − η v ^ t + ε m ^ t ( 6 ) \theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\widehat{v}_t + \varepsilon}}\widehat{m}_t \qquad(6) θt=θt1v t+ε ηm t(6)

优缺点:

  • 优点:
    • 防止学习率过大,更稳定地收敛。
    • 适用于不同问题,在某些复杂的优化问题中表现优于Adam算法。
  • 缺点:
    • 需要额外的存储开销,可能增加内存需求。
    • 需要调参,同样需要调节学习率和衰减因子等超参数。

图解:
AMSGrad


7. SWATS(Simply combine Adam with SGDM)

算法思想:将Adam算法和SGDM(随机梯度下降法与动量)算法简单地结合在一起的优化算法。

  • 在SGDM中,动量被用来加速优化过程,通过将上一次的更新的一部分加到当前的更新中,帮助算法在某个方向上“保持运动”,从而加快收敛速度。
  • Adam算法结合了自适应学习率和动量的优点。它根据历史梯度信息为每个参数自适应地调整学习率,从而在不同场景下实现更高效的优化。
  • 在SWATS算法中,利用Adam的快速收敛和自适应学习率优势来加速初始训练,然后切换到SGDM来保持训练的稳定性和收敛性。通过这样做,算法可以充分利用Adam对每个参数使用不同学习率的能力,以及SGDM的加速特性。

图解:
SWATS

注意:
SWATS算法最重要的在于两点,算法转换时机和学习率调整

  1. 算法转换时机:
    一般来说,其转换时机是基于训练的迭代次数。具体来说,算法将在事先设定的一个迭代次数阈值上进行切换。这个阈值是一个超参数,可以根据任务和数据集的特性进行调整。在训练的初始阶段,SWATS使用Adam(fast)进行快速收敛,然后在达到设定的迭代次数阈值后,自动转换为SGDM以继续训练并稳定收敛。
  2. 学习率调整:
    在算法转换时,SWATS还需要调整学习率以适应SGDM的优化方式。通常情况下,学习率在切换到SGDM后会相对减小。学习率的调整方式可以采用线性或指数衰减等策略,也可以根据具体的任务和数据集来进行自定义调整,其中涉及到的衰减速率或衰减系数就是超参数。这些超参数控制了学习率的调整方式和速率,直接影响算法在训练过程中学习的效果和模型的收敛性。。调整学习率的目的是为了在切换优化器后保持训练的稳定性,避免过大的学习率导致模型在参数空间中发生震荡或不稳定。

8. RAdam(Rectified Adam)

这个算法确实看不懂
算法思想:在训练初期,由于梯度信息较少,Adam算法的一阶矩估计(m)可能不准确,导致学习率的自适应调整不够稳定。
算法:

  1. 初始化:设置学习率 α \alpha α,一阶矩估计的衰减因子 β 1 \beta_1 β1和二阶矩估计的衰减因子 β 2 \beta_2 β2,并初始化一阶矩变量 m m m和二阶矩变量 v v v
  2. 计算梯度:计算当前迭代的梯度 g t = ∇ θ L ( θ ) g_t = \nabla_{\theta} L(\theta) gt=θL(θ)
  3. 更新一阶矩变量:计算一阶矩估计 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
  4. 更新二阶矩变量:计算二阶矩估计 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
  5. 计算修正后的一阶矩估计:计算修正后的一阶矩估计 m ^ t = m t 1 − β 1 t \widehat m_t = \frac{m_t}{1 - \beta_1^t} m t=1β1tmt
  6. 计算修正项 ρ \rho ρ:计算 ρ = ( 2 − β 2 t ) ( 1 − β 2 t ) \rho = \sqrt{\frac{(2 - \beta_2^t)}{(1 - \beta_2^t)}} ρ=(1β2t)(2β2t)
  7. 计算修正后的学习率:计算修正后的学习率 l r t = α ρ lr_t = \alpha \rho lrt=αρ
  8. 计算RAdam更新量:如果 v ^ t = max ⁡ ( v ^ t − 1 , v t ) \widehat v_t = \max(\widehat v_{t-1}, v_t) v t=max(v t1,vt),则 r t = l r t m ^ t v ^ t + ϵ r_t = \frac{lr_t \widehat m_t}{\sqrt{\widehat v_t} + \epsilon} rt=v t +ϵlrtm t,否则 r t = l r t m t v t + ϵ r_t = \frac{lr_t m_t}{\sqrt{v_t} + \epsilon} rt=vt +ϵlrtmt
  9. 更新参数: θ t = θ t − 1 − r t \theta_t = \theta_{t-1} - r_t θt=θt1rt

优缺点:

  • 优点:
    • 稳定性改进:修正学习率在训练初期的偏差,提高了算法的稳定性,更容易收敛。
    • 自适应学习率:无需手动调节学习率,算法能够自适应地调整学习率。
    • 高效:在大规模模型和数据集上具有较快的收敛速度。
  • 缺点:
    • 适用性限制:对于某些问题可能不如其他优化算法效果好。
    • 需要额外存储开销:算法需要额外存储梯度平方估计的历史信息,增加一些内存开销。
    • 需要调参:虽然不需手动调节学习率,但仍需调节其他超参数以获得最佳性能。

RAdam

RAdam VS SWATS

RAdam VS SWATS

9. AdaBound

算法思想:AdaBound算法是对Adam算法的改进,主要解决Adam在训练后期可能出现学习率过大导致震荡或不稳定的问题。
算法:

  • g t = ∇ θ L ( θ ) g_t = \nabla_{\theta} L(\theta) gt=θL(θ)
  • 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
  • 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
  • m ^ t = m t 1 − β 1 t \widehat m_t = \frac{m_t}{1 - \beta_1^t} m t=1β1tmt
  • v ^ t = v t 1 − β 2 t \widehat v_t = \frac{v_t}{1 - \beta_2^t} v t=1β2tvt
  • η l o w e r = η f i n a l ⋅ ( 1 − 1 γ ⋅ t + 1 ) \eta_{lower} = \eta_{final} \cdot \left(1 - \frac{1}{\gamma \cdot t + 1}\right) ηlower=ηfinal(1γt+11)
  • η u p p e r = η f i n a l ⋅ ( 1 + 1 γ ⋅ t ) \eta_{upper} = \eta_{final} \cdot \left(1 + \frac{1}{\gamma \cdot t}\right) ηupper=ηfinal(1+γt1)
  • η t = η ⋅ min ⁡ ( max ⁡ ( ϵ , v ^ ) m ^ + ϵ , η u p p e r ) \eta_t = \eta \cdot \min\left(\frac{\max(\epsilon, \sqrt{\hat{v}})} {\sqrt{\hat{m}} + \epsilon}, \eta{upper}\right) ηt=ηmin(m^ +ϵmax(ϵ,v^ ),ηupper)
  • θ t = θ t − 1 − η t ⋅ m ^ v ^ + ϵ \theta_t = \theta_{t-1} - \eta_t \cdot \frac{\hat{m}}{\sqrt{\hat{v}} + \epsilon} θt=θt1ηtv^ +ϵm^

学习率下界 η l o w e r \eta_{lower} ηlower的计算公式,是为了实现AdaBound算法的具体逻辑,但并不直接用于修正后的学习率的计算。
解释
AdaBound算法中有以下超参数:

  1. 初始学习率( η \eta η):优化算法开始时的学习率,控制模型在训练初期的更新步长。
  2. 最终学习率( η f i n a l \eta_{final} ηfinal):学习率的最终上界,用于控制学习率在训练后期的收敛速度和稳定性。
  3. β 1 \beta_1 β1:Adam优化算法中一阶矩估计的衰减率,通常取值为0.9。
  4. β 2 \beta_2 β2:Adam优化算法中二阶矩估计的衰减率,通常取值为0.999。
  5. ϵ \epsilon ϵ:避免除以零的小常数,用于增加数值稳定性,通常取一个很小的值,比如1e-8。
  6. γ \gamma γ:收缩速度的超参数,用于控制学习率的收缩速度,通常取值在0.1到0.3之间。

10. Improving SGDM

Towards Improving SGD

  1. Adaptive learning rate algorithms:dynamically
    adjust learning rate over time
  2. SGD-type algorithms:fix learning rate for all updates…
    • too slow for small learning rates
    • bad result for large learning rates

LR range tes
基本思想是在一系列不同的学习率下训练模型,并观察损失函数或准确率随着学习率的变化而变化的情况。通过绘制学习率和损失函数(或准确率)之间的关系图,可以获得一个学习率和训练损失之间的曲线,称为"学习率-损失曲线"(Learning Rate vs. Loss Curve)。

Cyclical Learning Rate (CLR) 是一种优化算法,它在训练过程中通过调整学习率来帮助模型更好地收敛。CLR的核心思想是让学习率在一个较大范围内周期性地变化,从而在训练过程中跳出局部最优解,避免陷入到某个特定的局部最小值。CLR包含以下主要超参数:

  1. 学习率范围测试(LR range test):在训练开始时,首先进行一个学习率范围测试,逐渐增大学习率,并观察模型的损失或准确率随着学习率的变化情况。这样可以找到一个合适的学习率范围,用来作为后续CLR算法中学习率的上下界。
  2. Step Size:CLR中的一个超参数,表示学习率周期性变化的步长。具体来说,每经过几个epochs,学习率就会变化一次。这个参数影响了CLR的周期性变化频率。
  3. 最小学习率(Minimum Learning Rate):学习率在周期性变化中的最小值。在学习率变化的过程中,学习率会周期性地在上下界之间变化,而最小学习率限制了学习率的最小值,确保学习率不会降得太小。

Cyclical Learning Rate允许学习率在一个较大的范围内变化,这种周期性的学习率调整能够在训练过程中跳出局部最优解,帮助模型更好地探索全局最优解的方向。这种方法通常在深度学习模型的训练中能够获得更好的泛化性能和更快的收敛速度。不过需要注意的是,CLR的参数选择和学习率范围测试都是关键的步骤,需要通过实验进行调整来找到最佳的超参数设置。
CLR


warm-up
在初始阶段,graident可能会很不稳定。
在深度学习中,“Warm-up”(预热)通常指的是一种学习率策略。在训练神经网络时,优化器通常使用学习率(learning rate)来控制参数更新的步长。学习率越大,参数更新的步子就越大,训练过程中可能会更快地收敛,但同时也可能导致不稳定或发散的情况。
预热(Warm-up)的目的是在训练刚开始的时候,使用一个较小的学习率,然后逐渐增加学习率到最终设定的值。这样做的好处是在训练初期,模型有机会更好地探索参数空间,有利于稳定地开始训练过程。
预热通常在训练的前几个epochs中应用,并且学习率逐渐增加,直到达到设定的最终学习率。一旦预热阶段完成,优化器将使用设定的最终学习率来继续训练模型。
预热(Warm-up)是一种训练策略,通过逐渐增加学习率,帮助模型在训练开始时更好地收敛和学习。

下面是没有做预热的情况,在开始阶段由于gradient不稳定出现暴走

Without Warm-up

RAdam算法就是经过预热以后的Adam算法


11. Lookahead(universal wrapper for all optimizers)

算法思想:k step forward, 1 step back
"k steps forward, 1 step back"意味着在进行k步的快速权重更新(使用快速优化器)后,进行1步的参数回滚(使用慢速优化器)。这个回滚步骤使得慢速优化器能够在参数空间中跟随快速优化器的前瞻探索,从而确保稳定的收敛。
Lookahead>Lookahead


12. Nadam(超前预测)

算法思想:在Adam算法的基础上,引入Nesterov动量来更好地更新参数。
Nadam

Nesterov动量

在传统的动量算法中,参数更新是根据当前梯度的方向和当前动量的方向来进行的。动量算法使用过去的梯度信息来调整参数更新方向,以加速收敛。然而,这种方法可能导致在参数更新过程中出现较大的摆动,特别是在参数空间中曲折或窄谷的区域。
Nesterov动量通过引入前瞻性来解决传统动量算法中的摆动问题。具体来说,Nesterov动量会先在当前位置向前迈出一步,然后计算梯度。它会使用这个前瞻的位置来调整参数更新的方向,而不是仅仅依赖于当前位置的梯度。这样做的目的是避免参数更新时在曲折或窄谷的区域产生大幅度的摆动。
算法:
Nesterov动量的更新公式如下:

  1. 计算前瞻的位置 θ lookahead \theta_{\text{lookahead}} θlookahead
    θ lookahead = θ t + μ ⋅ v t − 1 \theta_{\text{lookahead}} = \theta_t + \mu \cdot v_{t-1} θlookahead=θt+μvt1
    其中, θ t \theta_t θt 表示当前的参数, v t − 1 v_{t-1} vt1 表示上一次迭代的动量, μ \mu μ 是动量的学习率。
  2. 计算前瞻位置 θ lookahead \theta_{\text{lookahead}} θlookahead 处的梯度 ∇ f ( θ lookahead ) \nabla f(\theta_{\text{lookahead}}) f(θlookahead)
  3. 更新动量 v t v_t vt 和参数 θ t \theta_t θt
    v t = μ ⋅ v t − 1 − α ⋅ ∇ f ( θ lookahead ) v_t = \mu \cdot v_{t-1} - \alpha \cdot \nabla f(\theta_{\text{lookahead}}) vt=μvt1αf(θlookahead)
    θ t + 1 = θ t + v t \theta_{t+1} = \theta_t + v_t θt+1=θt+vt
    其中, α \alpha α 是学习率。

通过引入前瞻性,Nesterov动量能够在梯度计算时使用前瞻位置的信息来指导参数更新的方向,从而减少了在参数空间中的大幅度摆动,加速了收敛过程。这使得Nesterov动量在深度学习的优化过程中表现出色,并被广泛应用于各种深度学习模型和任务中。
Nesterov


13. L2-NORM

L2范数常用于正则化(也称为L2正则化或权重衰减)。在损失函数中加入L2范数的惩罚项,有助于减小模型参数的大小,防止过拟合,并提高模型的泛化能力。
L2
L2


14. Something helps optimization

  • shuffling 乱序,每次更新顺序,让mini-batch每次选择的都不一样
  • dropout 丢弃,随机地将神经网络中的部分节点(神经元)丢弃,即将它们的输出置零
  • gradient noise 梯度噪声,一种随机性的梯度扰动,通过在梯度上添加随机的噪声来增加优化过程的探索性。随着t变大Gaussian noise 越来愈小
  • warm-up 预热,保证模型训练初期的稳定性
  • Curriculum learning 课程学习,逐步增加训练样本的难度来提高模型的泛化能力
  • Fine-tuning 微调,在特定任务的数据上进行微调
  • Normalization 归一化,帮助加快训练过程,使得梯度下降更加稳定,防止梯度爆炸和梯度消失问题。
  • Regularization 正则化,在损失函数中增加一个正则项,惩罚模型的复杂性,从而减小模型对训练数据的过度拟合

Summarize

1. Alogorithm classification

Classification

2. Comparison between SGDM and Adam

Comparision

3. Advice

Advice


这些算法终于看完了,里面很多无法理解,但是可能确实就有比较好的效果,我们掌握基础的算法,其他的算法了解一下,理解他们都是对基础算法的优化,但是我们要知道具体优化了什么,各个算法有什么优缺点,感觉这样应该就差不多了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/55843.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Html5播放器按钮在移动端变小的问题解决方法

Html5播放器按钮在移动端变小的问题解决方法 用手机浏览器打开酷播云视频&#xff0c;有时会出现播放器按钮太小的情况&#xff0c;此时只需在<head>中加入下面这段代码即可解决&#xff1a; <meta name"viewport" content"widthdevice-width, initia…

Python入门二

目录&#xff1a; python封装与property装饰器python继承与类型检查python多态与superpython 模块与包错误与异常Debug 调试与分析python类型注解python数据类dataclasspython内置装饰器python装饰器学生信息管理系统 1.python封装与property装饰器 封装的概念 封装&#x…

如何压缩高清PDF文件大小?将PDF文件压缩到最小的三个方法

PDF格式是一种非常常用的文档格式&#xff0c;但是有时候我们需要将PDF文件压缩为更小的大小以便于传输和存储。在本文中&#xff0c;我们将介绍三种PDF压缩的方法&#xff0c;包括在线PDF压缩、利用软件PDF压缩以及使用WPS缩小pdf。 首先&#xff0c;在线PDF压缩是最常用的方…

《cuda c编程权威指南》04 - 使用块和线程索引映射矩阵索引

目录 1. 解决的问题 2. 分析 3. 方法 4. 代码示例 1. 解决的问题 利用块和线程索引&#xff0c;从全局内存中访问指定的数据。 2. 分析 通常情况下&#xff0c;矩阵是用行优先的方法在全局内存中线性存储的。如下。 8列6行矩阵&#xff08;nx,ny&#xff09;&#xff08;…

JVM内存结构

JVM内存结构 5个部分 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 JDK 1.8 同 JDK 1.7 比&#xff0c;最大的差别就是&#xff1a;元数据区取代了永久代。元空间的本质和永久代类似&#xff0c;都是对 JVM 规范中方法区的实现。不过元空间与永久代之间最大的区别在于…

获取 NGINX QUIC+HTTP/3 预览版的二进制包

原文作者&#xff1a;Robert Haynes of F5 原文链接&#xff1a;获取 NGINX QUICHTTP/3 预览版的二进制包 转载来源&#xff1a;NGINX 官方网站 我们很高兴宣布&#xff0c;NGINX QUICHTTP/3 预览版现提供以下两个发行版的预构建二进制包&#xff1a; Red Hat Enterprise Linux…

java实现5种不同的验证码图片,包括中文、算式等,并返回前端

导入以下依赖 <!--图片验证码--><dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version></dependency> 编写controller package com.anXin.user.controlle…

牛客网Verilog刷题——VL42

牛客网Verilog刷题——VL42 题目答案 题目 请设计一个可以实现任意小数分频的时钟分频器&#xff0c;比如说8.7分频的时钟信号&#xff0c;注意rst为低电平复位。提示&#xff1a;其实本质上是一个简单的数学问题&#xff0c;即如何使用最小公倍数得到时钟周期的分别频比。设小…

级联选择框

文章目录 实现级联选择框效果图实现前端工具版本添加依赖main.js导入依赖级联选择框样式 后端数据库设计 实现级联选择框 效果图 实现 前端 工具版本 node.js v16.6.0vue3 级联选择框使用 Element-Plus 实现 添加依赖 在 package.json 添加依赖&#xff0c;并 npm i 导入…

高通滤波器,低通滤波器

1.高通滤波器是根据像素与邻近像素的亮度差值来提升该像素的亮度。 import cv2 import numpy as np from scipy import ndimagekernel_3_3 np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]]) print(kernel_3_3) kernel_5_5 np.array([[-1,-1,-1,-1,-1],[-1,1,2,1,-1],[-1,2,4,2,-…

iOS——锁与死锁问题

iOS中的锁 什么是锁锁的分类互斥锁1. synchronized2. NSLock3. pthread 递归锁1. NSRecursiveLock2. pthread 信号量Semaphore1. dispatch_semaphore_t2. pthread 条件锁1. NSCodition2. NSCoditionLock3. POSIX Conditions 分布式锁NSDistributedLock 读写锁1. dispatch_barri…

C++设计模式之责任链设计模式

C责任链设计模式 什么是责任链设计模式 责任链设计模式是一种行为型设计模式&#xff0c;它允许多个处理请求的对象串联起来&#xff0c;形成一个处理请求的链。每个对象都有机会处理请求&#xff0c;如果该对象不能处理请求&#xff0c;则将请求传递给链中的下一个对象。 该…

2023年华数杯建模思路 - 案例:随机森林

## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林&#xff1f; 随机森林属于 集成学习 中的 Bagging&#xff08;Bootstrap AGgregation 的简称&#xff09; 方法。如果用图来表示他们之…

51单片机学习--蜂鸣器播放音乐

由原理图可知&#xff0c;蜂鸣器BEEP与P1_5 相关&#xff0c;但其实这个原理图有错&#xff0c;实测接的是P2_5 下面这个代码就是以500HZ的频率响500ms的例子 sbit Buzzer P2^5;unsigned char KeyNum; unsigned int i;void main() {while(1){KeyNum Key();if(KeyNum){for(i …

亚马逊买家账号ip关联怎么处理

对于亚马逊买家账号&#xff0c;同样需要注意IP关联问题。在亚马逊的眼中&#xff0c;如果多个买家账号共享相同的IP地址&#xff0c;可能会被视为潜在的操纵、违规或滥用行为。这种情况可能导致账号受到限制或处罚。 处理亚马逊买家账号IP关联问题&#xff0c;建议采取以下步骤…

实用干货!一文读懂Salesforce中6种数据关系类型!

Salesforce中对象之间的数据关系可能是一个棘手的话题。对于创建自定义对象的业务场景&#xff0c;需要决定使用哪些关系类型来扩展Salesforce数据模型。 01 查找关系 查找关系&#xff08;Lookup Relationships&#xff09;是一种松散耦合&#xff08;loosely coupled&…

[React]生命周期

前言 学习React&#xff0c;生命周期很重要&#xff0c;我们了解完生命周期的各个组件&#xff0c;对写高性能组件会有很大的帮助. Ract生命周期 React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁 初始化 1、getDefaultProps() 设置默认的props&#xff0c;也可以用duf…

【Quartus FPGA】EMIF DDR3 读写带宽测试

在通信原理中&#xff0c;通信系统的有效性用带宽来衡量&#xff0c;带宽定义为每秒传输的比特数&#xff0c;单位 b/s&#xff0c;或 bps。在 DDR3 接口的产品设计中&#xff0c;DDR3 读/写带宽是设计者必须考虑的指标。本文主要介绍了 Quartus FPGA 平台 EMIF 参数配置&#…

Tomcat 创建https

打开CMD,按下列输入 keytool -genkeypair -alias www.bo.org -keyalg RSA -keystore d:\ambition.keystore -storetype pkcs12 输入密钥库口令:123456 再次输入新口令:123456 您的名字与姓氏是什么? [Unknown]: www.ambition.com 您的组织单位名称是什么? [Unknown…

cc2652在使用过程中的一些注意事项

可能不只是cc2652有这些坑&#xff0c;估计cc26xx系列都存在。 CCS的预编译宏配置位置 时钟获取 时钟获取__STATIC_INLINE uint32_t SysCtrlClockGet( void )在sys_ctrl.h中&#xff0c;sys_ctrl.h没有在工程路径下面&#xff0c;在其sdk中 节拍时间获取 ICall_getTicks(); …