李宏毅机器学习第6周New Optimization 新优化器

摘要

本文首先对之前学习的优化器进行了简略的复习,并对比了adam与SGDM两种算法各自的优势。之后将目光聚焦于如何优化这两种算法以克服各自缺点。之后介绍了RAdam算法,该算法吸取了One-cycle LR中的warm-up暖机机制,目的是在训练的开始阶段需要保持步长较小以减小梯度的方差。而Lookahead算法在优化器外进行了“包裹”,以实现在行进k步之后进行检查并做出修正。为了达到Lookahead算法先确定梯度的后续效果再行进,Nadam算法引用了NAG算法对Adam算法进行了改进。最后介绍了L2正则化并给出了两个版本的算法。

Abstract

This paper first briefly reviews the previously learned optimizer, and compares the advantages of Adam and SGDM algorithms. After that, focus on how to optimize the two algorithms to overcome their respective shortcomings. After that, the RAdam algorithm is introduced, which draws on the warm-up mechanism in One-cycle LR to reduce the variance of the gradient at the beginning of training. The Lookahead algorithm “pack” outside the optimizer to enable checks and corrections after k steps have been made. In order to achieve the subsequent effect of the Lookahead algorithm to determine the gradient before “traveling”, the Nadam algorithm refers to the NAG algorithm to improve the Adam algorithm. Finally, L2 regularization is introduced and two versions of the algorithm are given.

New Optimization 新优化器

深度学习的新优化器New Optimization for Deep Learning

之前学习过的优化器:

  • SGD
  • SGD with momentum(SGDM)
  • Adagrad
  • RMSProp
  • Adam

参数说明

  • θ t \theta_t θt,在时间步长t的模型参数
  • ∇ L ( θ t )   o r   g t \nabla L(\theta_t)\ or\ g_t L(θt) or gt,在 θ t \theta_t θt的梯度,用于计算 θ t + 1 \theta_{t+1} θt+1
  • m t + 1 m_{t+1} mt+1,从时间步长0到时间步长t累积的动量,用于计算 θ t + 1 \theta_{t+1} θt+1

在这里插入图片描述

上图为神经网络的概念图

输入参数为 x t x_t xt,在时间步长t神经网络的参数为 θ t \theta_t θt,得出预测值 y t y_t yt,根据真实值 y ^ t \hat y_t y^t以及损失函数 L ( θ t ; x t ) L(\theta_t;x_t) L(θt;xt),最终计算对应的 g t g_t gt

优化器需要完成的任务

  • 确定一个 θ \theta θ使得 ∑ x L ( θ ; x ) \sum_x{L(\theta;x)} xL(θ;x)
  • 确定一个 θ \theta θ使得 L ( θ ) L(\theta) L(θ)

on-line vs off-line

on-line:一个时间步长内仅有一组数据

off-line:在所有的时间步长中注入所有的数据

off-line的做法对于机器的要求极高,但在本课程中作为假设,假定在任何时刻都可以得到任何的x、y从而算出完整的 L ( θ t ) L(\theta_t) L(θt),损失函数仅由 θ \theta θ决定

Review

SGD(stochastic gradient descent)随机梯度下降
  • 取参数的初始值
  • 计算该点的梯度
  • 按照梯度的反方向更新参数
  • 迭代至 ∇ L ( θ t ) ≈ 0 \nabla L(\theta^t)\approx0 L(θt)0

在这里插入图片描述

SGDM带动量的随机梯度下降
  • 设置动量以及参数的初始值 v 0 = 0 ,   θ 0 v^0=0,\ \theta^0 v0=0, θ0
  • 计算该点的梯度
  • 计算动量 v 1 = λ v 0 − η ∇ L ( θ 0 ) v^1=\lambda v^0-\eta\nabla L(\theta^0) v1=λv0ηL(θ0)
  • 更新参数

动量不仅仅基于当前的梯度,也基于以前计算的动量

在这里插入图片描述

该算法在到达local minimum的时候不会直接停止,因为有之前累积的动量,从而可能脱离local minimum达到更低的点

在这里插入图片描述

Adagrad适应性梯度

θ t = θ t − 1 = − η ∑ i = 1 t − 1 ( g i ) 2 g t − 1 \theta_t=\theta_{t-1}=-\frac\eta{\sqrt{\sum_{i=1}^{t-1}(g_i)^2}}g_{t-1} θt=θt1=i=1t1(gi)2 ηgt1

对于较为崎岖的部分,有较大的梯度累积,从而有较大的分母、较小的学习率,避免移动过快

对于较为平缓的部分,有较小的梯度累积,从而有较小的坟墓、较大的学习率,避免移动过慢

在这里插入图片描述

RMSProp

θ t = θ t − 1 − η v t g t − 1 \theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{v_t}}g_{t-1} θt=θt1vt ηgt1

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α)(gt1)2

避免因部分梯度过大,导致后续迭代中的学习率过小

Adam
  • SGDM
    • θ t = θ t − 1 − η m t \theta_t=\theta_{t-1}-\eta m_t θt=θt1ηmt
    • m t = β 1 m t − 1 + ( 1 − β 1 ) g t − 1 m_t=\beta_1m_{t-1}+(1-\beta_1)g_{t-1} mt=β1mt1+(1β1)gt1
  • RMSProp
    • θ t = θ t − 1 − η v t g t − 1 \theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{v_t}}g_{t-1} θt=θt1vt ηgt1
    • 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α)(gt1)2

Adam综合了上述两种优化器,并添加了对于动量以及速度的偏差修正

θ t = θ t − 1 − η v ^ t + ϵ m ^ t \theta_t=\theta_{t-1}-\frac\eta{\sqrt{\hat v_t}+\epsilon}\hat m_t θt=θt1v^t +ϵηm^t

偏差修正: m ^ = m t 1 − β 1 t ,   v ^ t = v t 1 − β 2 t \hat m=\frac{m_t}{1-{\beta_1}^t},\ \hat v_t=\frac{v_t}{1-{\beta_2}^t} m^=1β1tmt, v^t=1β2tvt

论文作者提出其中 β 1 = 0.9 ,   β 2 = 0.999 ,   ϵ = 1 0 − 8 \beta_1=0.9,\ \beta2=0.999,\ \epsilon=10^{-8} β1=0.9, β2=0.999, ϵ=108

上述几种优化器的出处

在这里插入图片描述

Optimizers: Real Application优化器的现实应用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Adam vs SGDM

以下是在一个项目上采用不同优化器进行训练的效果

training accuracy,在训练集的准确性上adam最高,sgdm较高

在这里插入图片描述

validation accuracy,sgdm有最高的准确率,而adam较高

在这里插入图片描述

Adam:训练快,泛化差距大,不稳定

SGDM:稳定,泛化差距小,更好收敛(?)

能否直接结合两者?在SWATS中将两者结合,起始使用adam,之后使用SGDM

在该文中对优化器之间切换的方法较为生硬,且没有对切换的点进行说明

在这里插入图片描述

针对Adam进行优化

AMSGrad

文中提出Adam的问题是,在训练过程的后期,大多数梯度小且没提供信息,而一些小batch很少提供大的信息梯度

在下图中,经过多次梯度较小的迭代后碰到了较大的gradient,该梯度会提供较少的信息量,即动量受其影响较小。

在这里插入图片描述

在AMSGrad为了减少低信息量的梯度,给出的方案是 v ^ t = m a x ( v ^ t − 1 , v t ) \hat v_t=max(\hat v_{t-1},v_t) v^t=max(v^t1,vt),即通过选取本节点与前一节点速度中较大的一个消除去偏置

但该方法会单调的减小学习率,这是在adagrad以及RMSProp中的问题

在这里插入图片描述

AdaBound

另一种解法中,除了要解决低信息量梯度的问题外,还认为学习率对于小梯度较大、大梯度较小

在这里插入图片描述

AMSGrad仅解决了较大的学习率导致的问题

AdaBound给出了一个上界以及一个下界,显然这限制了学习率的适应性adaptive

θ t = θ t − 1 − C l i p ( η v ^ t ) m ^ t \theta_t=\theta_{t-1}-Clip(\frac\eta{\sqrt{\hat v_t}})\hat m_t θt=θt1Clip(v^t η)m^t

C l i p ( x ) = C l i p ( x , 0 , 1 − 0.1 ( 1 − β 2 ) t + 1 , 0.1 + 0.1 ( 1 − β 2 ) t ) Clip(x)=Clip(x, 0,1-\frac{0.1}{(1-\beta_2)t+1},0.1+\frac{0.1}{(1-\beta_2)t}) Clip(x)=Clip(x,0,1(1β2)t+10.1,0.1+(1β2)t0.1)

在这里插入图片描述

针对SGDM进行优化

自适应学习算法可以随着时间动态调整学习率,而SGD类的算法对于所有的更新调整学习,对于小学习率太慢,对于大学习率结果不好。如何确定一个“最佳”学习率?

LR range test

在这里插入图片描述

Cyclical LR

使用LR range test中的方法生成学习率,周期性的设置学习率,通过变动的学习率避免local minimum

在这里插入图片描述

SGDR

该算法相较于Cyclical LR,不再较慢的增加梯度,而是直接增加至最大

在这里插入图片描述

One-cycle LR

该算法将整个学习率调整的过程设置为一个循环,循环为:“预热+退火+微调”

在这里插入图片描述

RAdam

基于One-cycle LR的思路,Adam也可以引入warm-up

下图的实验中显示前十步的梯度分布比较混乱

在这里插入图片描述

Distorted gradient不稳定的的梯度

θ t = θ t − 1 − η θ t + ϵ m ^ t \theta_t=\theta_{t-1}-\frac\eta{\sqrt{\theta_t}+\epsilon}\hat m_t θt=θt1θt +ϵηm^t

v t = β 2 v t − 1 + ( 1 − β 2 ) ( g t − 1 ) 2 v_t=\beta_2v_{t-1}+(1-\beta_2)(g_{t-1})^2 vt=β2vt1+(1β2)(gt1)2

若最初的梯度是较为混乱的,则会干扰速度 v t v_t vt的生成,从而产生低效的学习率

在训练的开始阶段需要保持步长较小以减小梯度的方差

RAdam算法内容

指数移动均值的有效内存大小—— ρ t = ρ ∞ − 2 t β 2 t 1 − β 2 t \rho_t=\rho_\infin-\frac{2t{\beta_2}^t}{1-{\beta_2}^t} ρt=ρ1β2t2tβ2t

指数移动均值的最大内存大小 t → ∞ t\rightarrow \infin t—— ρ ∞ = 2 1 − β 2 − 1 \rho_\infin=\frac2{1-{\beta_2}}-1 ρ=1β221

ρ t > 4 \rho_t>4 ρt>4该值用于近似 V a r [ 1 v ^ ∞ ] V a r [ 1 v ^ t ] \frac{Var[\frac1{\hat v_\infin}]}{Var[\frac1{\hat v_t}]} Var[v^t1]Var[v^1]—— r t = ( ρ t − 4 ) ( ρ t − 2 ) ρ ∞ ( ρ ∞ − 4 ) ( ρ ∞ − 2 ) ρ t r_t=\sqrt{\frac{(\rho_t-4)(\rho_t-2)\rho_\infin}{(\rho_\infin-4)(\rho_\infin-2)\rho_t}} rt=(ρ4)(ρ2)ρt(ρt4)(ρt2)ρ

在训练的初期阶段,当 ρ t ≤ 4 \rho_t\leq4 ρt4时, θ t = θ t − 1 − η m ^ t \theta_t=\theta_{t-1}-\eta\hat m_t θt=θt1ηm^t;当 ρ t > 4 \rho_t>4 ρt>4时, θ t = θ t − 1 − η r t v ^ t + ϵ m ^ t \theta_t=\theta_{t-1}-\frac{\eta r_t}{\sqrt{\hat v_t}+\epsilon}\hat m_t θt=θt1v^t +ϵηrtm^t

r t r_t rt用于修正自适应的学习率,该值仅和迭代次数相关且单调递增,变化曲线如下图右下角,但当 ρ t > 4 \rho_t>4 ρt>4 r t r_t rt才有效,因此当不满足时使用SGD的方法

在这里插入图片描述

RAdam vs SWATS
RAdamSWATS
思路在训练的开始阶段梯度偏差较大导致自适应学习率不准确Adam的泛化效果不好且难以收敛,SGDM训练速度较慢
如何实行引入了“暖机”思路,减小不准确自适应学习率的影响通过先Adam后SGDM使得网络兼具两者的优点
切换顺序SGDM → \rightarrow RAdamAdam → \rightarrow SGDM
为何如此切换 v ^ t \hat v_t v^t偏差的预估在训练的初期不准确为了追求更好的收敛
切换点当预估准确时一些人为定义的标准

在这里插入图片描述

Lookahead

k step forward, 1 step back

该算法在优化器外进行了“包裹”,以实现在行进k步之后进行检查并做出修正

latex
For t=1,2,\dots(outer loop)
	\theta_{t,0}=\phi_{t-1}
	For i=1,2,\dots,k(inner loop)
		\theta_{t,i}=\theta_{t,i-1}+\Optim{(Loss,data,\theta_{t,i-1})}
	\phi_t=\phi_{t-1}+\alpha(\theta_{t,k}-\phi_{t-1})

第一层循环中,首先设置 θ t , 0 \theta_{t,0} θt,0 ϕ t − 1 \phi_{t-1} ϕt1,随后用优化器向前行进k步(蓝色虚线部分),最后根据 θ t , 0 ,   θ t , k \theta_{t,0},\ \theta_{t,k} θt,0, θt,k更新参数 ϕ t = ϕ t − 1 + α ( θ t , k − ϕ t − 1 ) \phi_t=\phi_{t-1}+\alpha(\theta_{t,k}-\phi_{t-1}) ϕt=ϕt1+α(θt,kϕt1)

  • 优化器可以是任意优化器

简单理解:有两条路径,一条快速路径由选定的任意优化器生成,另一条慢速路径根据快速路径生成,快速路径依附于慢速路径

在这里插入图片描述

该算法相对稳定,“向后退的一步”一定程度上避免了较为“危险”的前进,下图中靠近纵轴的快速路径出现了较为强烈的波动,但通过慢速路径避免了选取较低准确率的 θ \theta θ

该算法更易泛化,倾向于寻找更平滑的最小值,随着训练进行,快速路径在纵坐标上的波动逐渐减小,这说明平面趋于平缓

在这里插入图片描述

Nadam

NAG(Nesterov accelerated gradient)Nesterov加速梯度

能否通过类似于Lookahead中的方法先确定梯度的后续效果再进行更新?

  • SGDM
    • θ t = θ t − 1 − m t \theta_t=\theta_{t-1}-m_t θt=θt1mt
    • m t = λ m t − 1 + η ∇ L ( θ t − 1 ) m_t=\lambda m_{t-1}+\eta\nabla L(\theta_{t-1}) mt=λmt1+ηL(θt1)
  • 确定梯度的后续效果
    • θ t = θ t − 1 − m t \theta_t=\theta_{t-1}-m_t θt=θt1mt
    • m t = λ m t − 1 + η ∇ L ( θ t − 1 − λ m t − 1 ) m_t=\lambda m_{t-1}+\eta\nabla L(\theta_{t-1}-\lambda m_{t-1}) mt=λmt1+ηL(θt1λmt1)
      • 该式中 ∇ L \nabla L L所取的点是由 θ t − 1 ,   m t − 1 \theta_{t-1},\ m_{t-1} θt1, mt1联合确定的
      • ∇ L ( θ t − 1 − λ m t − 1 ) \nabla L(\theta_{t-1}-\lambda m_{t-1}) L(θt1λmt1)可以理解为基于上次生成的点,且假定动量仅有第一部分 λ m t − 1 \lambda m_{t-1} λmt1,来预估进行本次移动后可能达到的效果
    • 但需要保持一份模型参数的备份,以下对该问题进行优化

在这里插入图片描述

下图中进行优化,优化后不必再为参数额外保留一部分备份空间

在这里插入图片描述

在这里插入图片描述

Nadam算法内容

基于NAG算法,将其应用于optimization上有Nadam算法

θ t = θ t − 1 − η v ^ t + ϵ m ^ t \theta_t=\theta_{t-1}-\frac\eta{\sqrt{\hat v_t+\epsilon}}\hat m_t θt=θt1v^t+ϵ ηm^t

m ^ t = β 1 m t 1 − β 1 t + 1 + ( 1 − β 1 ) g t − 1 1 − β 1 t \hat m_t=\frac{\beta_1m_t}{1-{\beta_1}^{t+1}}+\frac{(1-\beta_1)g_{t-1}}{1-{\beta_1}^t} m^t=1β1t+1β1mt+1β1t(1β1)gt1

相应的对于SGDM有 m ^ t = 1 1 − β 1 t ( β 1 m t − 1 + ( 1 − β 1 ) g t − 1 ) = β 1 m t − 1 1 − β 1 t + ( 1 − β 1 ) g t − 1 1 − b e t a 1 t \hat m_t=\frac1{1-{\beta_1}^t}(\beta_1m_{t-1}+(1-\beta_1)g_{t-1})=\frac{\beta_1m_{t-1}}{1-{\beta_1}^t}+\frac{(1-\beta_1)g_{t-1}}{1-{beta_1}^t} m^t=1β1t1(β1mt1+(1β1)gt1)=1β1tβ1mt1+1beta1t(1β1)gt1

可以将上述改动理解为一种“超前部署”, β 1 m t − 1 1 − β 1 t → β 1 m t 1 − β 1 t + 1 \frac{\beta_1m_{t-1}}{1-{\beta_1}^t}\rightarrow\frac{\beta_1m_t}{1-{\beta_1}^{t+1}} 1β1tβ1mt11β1t+1β1mt

在这里插入图片描述

关于L2正则化

L2 regularization: L l 2 ( θ ) = L ( θ ) + γ 2 ∣ ∣ θ ∣ ∣ 2 L_{l_2}(\theta)=L(\theta)+\frac\gamma2||\theta||^2 Ll2(θ)=L(θ)+2γ∣∣θ2

L2正则化是在原本的损失函数基础上加上所有 θ \theta θ的平方乘以一个参数,这是为了避免 θ \theta θ过大导致error surface过于崎岖

对于SGD有 θ t = θ t − 1 − ∇ L l 2 ( θ t − 1 ) = θ t − 1 − ∇ L ( θ t − 1 − γ θ t − 1 ) \theta_t=\theta_{t-1}-\nabla L_{l_2}(\theta_{t-1})=\theta_{t-1}-\nabla L(\theta_{t-1}-\gamma\theta_{t-1}) θt=θt1Ll2(θt1)=θt1L(θt1γθt1)

对于SGDM以及adam需要注意,在计算动量时,可以选择是否保留参数的正则化部分,由此引出两种改写方式,保留时,称L2 regularizationL2正则化;不保留时,称weight decay参数衰减。其中参数衰减仅需要在 θ t \theta_t θt中减去正则项。在参数衰减中,正则化并不影响动量以及速度的计算

  • L2正则化

    • SGDM
      • θ t = θ t − 1 − λ m t − 1 − η ( ∇ L ( θ t − 1 ) + γ θ t − 1 ) \theta_t=\theta_{t-1}-\lambda m_{t-1}-\eta(\nabla L(\theta_{t-1})+\gamma\theta_{t-1}) θt=θt1λmt1η(L(θt1)+γθt1)
      • m t = λ m t − 1 + η ( ∇ L ( θ t − 1 ) + γ θ t − 1 ) m_t=\lambda m_{t-1}+\eta(\nabla L(\theta_{t-1})+\gamma\theta_{t-1}) mt=λmt1+η(L(θt1)+γθt1)
    • Adam
      • m t = λ m t − 1 + η ( ∇ L ( θ t − 1 ) + γ θ t − 1 ) m_t=\lambda m_{t-1}+\eta(\nabla L(\theta_{t-1})+\gamma\theta_{t-1}) mt=λmt1+η(L(θt1)+γθt1)
      • v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ L ( θ t − 1 ) + ∣ γ θ t − 1 ) 2 v_t=\beta_2v_{t-1}+(1-\beta_2)(\nabla L(\theta_{t-1})+|\gamma\theta_{t-1})^2 vt=β2vt1+(1β2)(L(θt1)+γθt1)2
        在这里插入图片描述
  • weight decay参数衰减

    • SGDWM
      • θ t = θ t − 1 − λ m t − 1 − γ θ t − 1 \theta_t=\theta_{t-1}-\lambda m_{t-1}-\gamma\theta_{t-1} θt=θt1λmt1γθt1
      • m t = λ m t − 1 + η ( ∇ L ( θ t − 1 ) ) m_t=\lambda m_{t-1}+\eta(\nabla L(\theta_{t-1})) mt=λmt1+η(L(θt1))
    • AdamW
      • m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ L ( θ t − 1 ) m_t=\beta_1m_{t-1}+(1-\beta_1)\nabla L(\theta_{t-1}) mt=β1mt1+(1β1)L(θt1)
      • v t = β 2 v t − 1 + ( 1 − β 2 ) ( ∇ L ( θ t − 1 ) 2 v_t=\beta_2v_{t-1}+(1-\beta_2)(\nabla L(\theta_{t-1})^2 vt=β2vt1+(1β2)(L(θt1)2
      • θ t = θ t − 1 − η ( 1 v ^ t + ϵ m ^ t − γ θ t − 1 ) \theta_t=\theta_{t-1}-\eta(\frac1{\sqrt{\hat v_t}+\epsilon}\hat m_t-\gamma\theta_{t-1}) θt=θt1η(v^t +ϵ1m^tγθt1)

在这里插入图片描述

一些可以帮助优化过程的操作

  • Shffling
    • 打乱数据的输入
  • Dropout
    • 错误的设置参数
  • 梯度噪声
    • 对梯度加上高斯噪声
  • warm-up
    • 通过在训练的初期阶段设置较小的学习率,来减小该阶段参数的方差
  • curriculum learning课程化学习
    • 训练模型时,先使用简单数据,在引入复杂数据,可能有利于泛化
  • fine-tuning
    • 使用经过预处理的模型
  • Normalization标准化
    • 预处理数据,或将数据缩放至单位范数
  • Regularization
    • 见上文L2正则化部分

在这里插入图片描述

在这里插入图片描述

总结

上述算法大致分为两个类别,即SGD类与adam类

  • SGD类
    • SGD
    • SGDM
  • Adam类
    • Adagrad
    • RMSProp
    • Adam
    • 对于极端的学习率取值有,AdaBound

上述两类均可以引入学习率计划learning rate scheduling

对Adam引入“warm-up”有RAdam

对SGD类引入“超前部署”有NAG,对Adam引入有NAdam

对二者分别引入仅在最后生效的L2正则化有SGDWM、AdamW

将SGDM与Adam结合有SWATS

基于k steps forward, 1 step back的思路,可以将上述的各种算法嵌入至lookahead算法中

在这里插入图片描述

SGDM与Adam的区别

  • SGDM
    • 训练过程较慢
    • 更好收敛
    • 稳定
    • 较小的泛化间隙
  • Adam
    • 训练过程较快
    • 可能难以收敛
    • 不稳定
    • 较大的泛化间隙

在这里插入图片描述

两种算法的应用领域

  • SGDM
    • 计算机视觉
      • 图像分类
      • segmentation细分
      • 物体检测
  • Adam
    • NLP自然语言处理
      • QA
      • 机器翻译
      • 总结
    • Speech synthesis语音生成
    • GAN生成对抗神经网络

在这里插入图片描述

课程小结

本文首先对之前学习的优化器进行了简略的复习,并对比了adam与SGDM两种算法各自的优势。Adam算法训练速度快、泛化差距大、不稳定;而SGDM算法训练速度较慢、泛化差距小、稳定,且相对于Adam算法更好收敛。之后将目光聚焦于如何优化这两种算法以克服各自缺点,对于Adam算法为了减少低信息量的梯度,在AMSGrad算法的思路是选取一节点与其前一节点速度中较大的一个,但这会使得学习率单调减少。AdaBound认为AMSGrad的缺点是因其仅考虑了学习率较大的情况,因此其为学习率设置了上界与下界以避免学习率不匹配问题,由于其给出的上下界过于“粗鲁”导致训练效果不好。对于SGD算法,由于其对所有的梯度调整学习率,导致不能“及时”调整学习率,因此LR range test算法对此进行了优化。而Cyclical LR通过周期性的调整学习率以避免local minimum。SGDR算法在Cyclical LR算法的基础上将增大梯度的过程简化为直接将梯度增加至最大。One-cycle LR算法将调整学习率的过程设置为了一个周期,周期内依次进行“预热+退火+微调”。RAdam算法吸取了One-cycle LR中的warm-up暖机机制,目的是在训练的开始阶段需要保持步长较小以减小梯度的方差。Lookahead算法在优化器外进行了“包裹”,以实现在行进k步之后进行检查并做出修正。Nadam算法在NAG算法思想的基础上对Adam算法进行了改进。最后介绍了L2正则化并给出了两个版本的算法,保留参数正则化的L2 regularization算法与仅在参数调整部分减去正则项的weight decay。

一般情况下,优秀的优化器要以优秀的模型为基础。在训练的过程中,应该将主要的精力放在调整模型、数据集合等,例如调整神经网络的架构、数据集的划分方式等;其次才是选择更加优秀的优化器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值