摘要
本文首先对之前学习的优化器进行了简略的复习,并对比了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=θt−1=−∑i=1t−1(gi)2ηgt−1
对于较为崎岖的部分,有较大的梯度累积,从而有较大的分母、较小的学习率,避免移动过快
对于较为平缓的部分,有较小的梯度累积,从而有较小的坟墓、较大的学习率,避免移动过慢
RMSProp
θ t = θ t − 1 − η v t g t − 1 \theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{v_t}}g_{t-1} θt=θt−1−vtηgt−1
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=αvt−1+(1−α)(gt−1)2
避免因部分梯度过大,导致后续迭代中的学习率过小
Adam
- SGDM
- θ t = θ t − 1 − η m t \theta_t=\theta_{t-1}-\eta m_t θt=θt−1−η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=β1mt−1+(1−β1)gt−1
- RMSProp
- θ t = θ t − 1 − η v t g t − 1 \theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{v_t}}g_{t-1} θt=θt−1−vtηgt−1
- 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=αvt−1+(1−α)(gt−1)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=θt−1−v^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, ϵ=10−8
上述几种优化器的出处
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^t−1,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=θt−1−Clip(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=θt−1−θ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=β2vt−1+(1−β2)(gt−1)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−β22−1
当 ρ 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(ρt−4)(ρt−2)ρ∞
在训练的初期阶段,当 ρ t ≤ 4 \rho_t\leq4 ρt≤4时, θ t = θ t − 1 − η m ^ t \theta_t=\theta_{t-1}-\eta\hat m_t θt=θt−1−η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=θt−1−v^t+ϵηrtm^t
r t r_t rt用于修正自适应的学习率,该值仅和迭代次数相关且单调递增,变化曲线如下图右下角,但当 ρ t > 4 \rho_t>4 ρt>4时 r t r_t rt才有效,因此当不满足时使用SGD的方法
RAdam vs SWATS
RAdam | SWATS | |
---|---|---|
思路 | 在训练的开始阶段梯度偏差较大导致自适应学习率不准确 | Adam的泛化效果不好且难以收敛,SGDM训练速度较慢 |
如何实行 | 引入了“暖机”思路,减小不准确自适应学习率的影响 | 通过先Adam后SGDM使得网络兼具两者的优点 |
切换顺序 | SGDM → \rightarrow →RAdam | Adam → \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} ϕt−1,随后用优化器向前行进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=ϕt−1+α(θt,k−ϕt−1)
- 优化器可以是任意优化器
简单理解:有两条路径,一条快速路径由选定的任意优化器生成,另一条慢速路径根据快速路径生成,快速路径依附于慢速路径
该算法相对稳定,“向后退的一步”一定程度上避免了较为“危险”的前进,下图中靠近纵轴的快速路径出现了较为强烈的波动,但通过慢速路径避免了选取较低准确率的 θ \theta θ
该算法更易泛化,倾向于寻找更平滑的最小值,随着训练进行,快速路径在纵坐标上的波动逐渐减小,这说明平面趋于平缓
Nadam
NAG(Nesterov accelerated gradient)Nesterov加速梯度
能否通过类似于Lookahead中的方法先确定梯度的后续效果再进行更新?
- SGDM
- θ t = θ t − 1 − m t \theta_t=\theta_{t-1}-m_t θt=θt−1−mt
- m t = λ m t − 1 + η ∇ L ( θ t − 1 ) m_t=\lambda m_{t-1}+\eta\nabla L(\theta_{t-1}) mt=λmt−1+η∇L(θt−1)
- 确定梯度的后续效果
- θ t = θ t − 1 − m t \theta_t=\theta_{t-1}-m_t θt=θt−1−mt
-
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=λmt−1+η∇L(θt−1−λmt−1)
- 该式中 ∇ L \nabla L ∇L所取的点是由 θ t − 1 , m t − 1 \theta_{t-1},\ m_{t-1} θt−1, mt−1联合确定的
- ∇ L ( θ t − 1 − λ m t − 1 ) \nabla L(\theta_{t-1}-\lambda m_{t-1}) ∇L(θt−1−λmt−1)可以理解为基于上次生成的点,且假定动量仅有第一部分 λ m t − 1 \lambda m_{t-1} λmt−1,来预估进行本次移动后可能达到的效果
- 但需要保持一份模型参数的备份,以下对该问题进行优化
下图中进行优化,优化后不必再为参数额外保留一部分备份空间
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=θt−1−v^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)gt−1
相应的对于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(β1mt−1+(1−β1)gt−1)=1−β1tβ1mt−1+1−beta1t(1−β1)gt−1
可以将上述改动理解为一种“超前部署”, β 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β1mt−1→1−β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=θt−1−∇Ll2(θt−1)=θt−1−∇L(θt−1−γθt−1)
对于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=θt−1−λmt−1−η(∇L(θt−1)+γθt−1)
- 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=λmt−1+η(∇L(θt−1)+γθt−1)
- 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=λmt−1+η(∇L(θt−1)+γθt−1)
-
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=β2vt−1+(1−β2)(∇L(θt−1)+∣γθt−1)2
- SGDM
-
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=θt−1−λmt−1−γθt−1
- m t = λ m t − 1 + η ( ∇ L ( θ t − 1 ) ) m_t=\lambda m_{t-1}+\eta(\nabla L(\theta_{t-1})) mt=λmt−1+η(∇L(θt−1))
- 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=β1mt−1+(1−β1)∇L(θt−1)
- 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=β2vt−1+(1−β2)(∇L(θt−1)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=θt−1−η(v^t+ϵ1m^t−γθt−1)
- SGDWM
一些可以帮助优化过程的操作
- 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生成对抗神经网络
- NLP自然语言处理
课程小结
本文首先对之前学习的优化器进行了简略的复习,并对比了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。
一般情况下,优秀的优化器要以优秀的模型为基础。在训练的过程中,应该将主要的精力放在调整模型、数据集合等,例如调整神经网络的架构、数据集的划分方式等;其次才是选择更加优秀的优化器。