对优化器的改进

本文章结合之前文章优化问题------局部最小值与鞍点-CSDN博客自动调整学习率-CSDN博客的各种优化训练的方法,介绍实际工程中常用的优化器

Adam

Adam,全称Adaptive Moment Estimation(自适应矩估计),它实际上就是结合了 SGD with Momentum(SGDM)RMSProp 思想的自适应学习率优化器,既带惯性,又自适应学习率,是目前深度学习最常用、默认首选的优化器(自适应学习率优化器)。

SGDM和RMSProp之前都已经学习过,这里将它们整合到一起,介绍一个完整的优化器Adam:

SGDM

SGDM 核心是累积历史梯度的一阶矩,核心公式是:

  • :第 步的模型参数
  • :学习率
  • :一阶矩估计(梯度的指数移动平均,类似 "动量")
  • :一阶矩的平滑系数(默认 0.9)
  • :第 步的梯度

动量项 会保留历史梯度方向,像物理中的 "动量" 一样保持运动惯性,从而加速收敛、抑制震荡、帮助跳出鞍点和平坦区。

指数移动平均(EMA)形式 兼顾历史信息与当前趋势。

指数移动平均(Exponential Moving Average, EMA) 是一种对时间序列数据做加权滑动平均的方法,核心特点是越新的数据权重越大,越旧的数据权重呈指数衰减。在优化器里EMA的公式形式为:

  • :第 t 步的 EMA 结果
  • :上一步的 EMA 结果
  • :平滑系数(0 < β < 1),控制历史数据的权重
  • :第 t 步的新观测值(比如SGDM公式中梯度 或RMSProp中的梯度平方

下面将EMA公式展开,看它的本质:

足够大时,​ 趋近于 0(因为 ),所以可以近似为:

对第 步的观测值 ​,它的权重是 ,随着的增大(数据变旧)权重 指数衰减。(所有权重之和,满足概率归一性)。具体查看如下示例所展示的随着的增大指数衰减过程():

最新数据权重最高(如的权重占比为10%、9%),越旧数据权重指数下降(如权重降到了3.87%、3.49%)。前 10 步的权重和约为,即 65% 的权重集中在最近 10 步。

有效平滑窗口 ,我们定义有效窗口大小 为权重衰减到初始的 (约 36.8%)时的步数,即

(SGDM 一阶矩),此时,表示平均关注最近 10 步的数据

(RMSProp二阶矩),此时,表示平均关注最近 1000 步的数据

SGDM平滑系数设置为0.9,表示平均看最近 10 步的梯度方向,既保留趋势,又不会被单步噪声带偏。如果 ​ 太小(比如 0.5),动量几乎消失。

RMSProp

RMSProp 核心是累积历史梯度的二阶矩,实现自适应学习率,核心公式是:

  • :二阶矩估计(梯度平方的指数移动平均,反映梯度的波动幅度)
  • :二阶矩的平滑系数(默认 0.999)

对学习率做归一化,对于梯度波动大的参数,学习率会自动缩小;梯度稳定的参数,学习率自动放大,实现自适应学习率。避免了固定学习率在不同参数维度上表现不均的问题。

​ 太小(比如 0.9),平滑窗口只有 10 步,​ 会对单步噪声太敏感,自适应学习率震荡剧烈,甚至导致训练崩溃。

在概率论里,矩(moment) 是描述随机变量分布特征的统计量:

一阶矩则表示期望 ,描述分布的中心位置;二阶矩则表示方差 ,描述分布的离散程度。

在优化器里,梯度 可以看作一个随机变量(不同 batch 下的梯度是随机采样的):
是对梯度期望 的指数移动平均(EMA)估计,对应一阶矩;
是对梯度平方期望 的 EMA 估计,对应二阶矩。

整合公式

其中

Adam 将 SGDM 的一阶矩与 RMSProp 的二阶矩结合,并引入偏差校正(de-biasing)和数值稳定项:

  • 偏差校正:初始时 是无效初始值,前几步的 EMA 被 0 拉低,导致估计值系统性偏小(向 0 偏),除以 是为了消除这种的偏差,让估计值更接近真实的梯度统计特征。
    以具体数据示例说明偏差的出现及校正过程(假设每一步梯度都为10,):

    时,,校正项趋近于 1,不影响后期训练。
  • 数值稳定项 是一个极小的正数,为了避免分母为 0 时出现除零错误。

SGDM

上面在介绍Adam优化器时说过,Adam包括SDGM,但这并不意味着它一定优于SGDM。Adam在 SGDM 基础上增加了自适应学习率(RMSProp 二阶矩) 和偏差校正,这两个核心改动让它和纯 SGDM 成为完全不同的优化器。实际在使用时,有的模型会使用Adam(如BERT、Transformer、GAN等),有的模型会使用SGDM(如ResNet、VGG、AlphaGo等)。

SGDM,全称Stochastic Gradient Descent with Momentum(带动量的随机梯度下降),核心公式:

与Adam相比:

  • 学习率: SGDM全局固定学习率 ,所有参数共享;而Adam是自适应学习率,每个参数独立。
  • 梯度: SGDM仅用梯度的一阶矩(方向);而Adam同时用一阶矩(方向) 和二阶矩(幅度)。SGDM 只关注 "往哪走";Adam 额外关注 "走多快",用梯度波动来约束步长。
  • **收敛特性:**SGDM收敛慢,但更容易收敛到更优的局部最优 / 全局最优;Adam收敛快,但可能提前收敛到次优解(后期步长过小)。SGDM 靠动量惯性可以 "冲过" 浅谷;而Adam 自适应步长会在后期自动缩小,容易提前停滞

我们可以通过具体的例子来看看Adam的问题所在:

其中:

与SGMD相比,Adam使用了自适应学习率,我么可以让动量(即),只看自适应学习率所起的作用。我们知道当时,平均关注最近 1000 步的数据。而在模型训练过程中,训练到最后时大部分的梯度都特别小,只有某几个Batch的梯度会比较大(关键特征,很明确的告诉你往哪里走),如果使用这种自适应学习率,最近 1000 步的数据进行加权计算,会导致后期少数梯度比较大的Batch提供的更新方向被稀释。举一个比较极端的例子,如下图所示,假设100000~100998的梯度都为1(即更新步长均为),到100999时梯度突然猛增到100000(出现了关键特征),但是由于要考虑前1000步的影响,所以最终巨大的梯度会迅速被稀释,这会让 Adam 错误地认为梯度很小,从而自适应放大学习率,导致参数更新幅度过大,最终偏离最优解,甚至训练发散(不收敛)。

AMSGrad

AMSGrad 是 Adam 的改进版本,核心目的是解决训练后期大梯度被小梯度稀释而导致Adam误以为梯度很小,从而导致更新步长过大而训练发散的问题。 它的核心思路很直接 **"只增不减,锁定历史最大值"。**核心公式如下:

一阶矩计算(与Adam完全相同):

二阶矩计算(核心改进):

参数更新:

AMSGrad引入的核心公式长期记忆变量​。它保证了二阶矩估计是单调非递减的。无论当前梯度 多么小, 都不会下降,只会保持不变或上升。这就锁住了历史上出现过的最大梯度幅度。

但是AMSGrad存在很多缺陷:

  1. 学习率只会变小,不会 "回弹",导致后期走不动、收敛慢:一旦历史上出现过一个大梯度,有效学习率就被永远压小了,哪怕后面梯度方向很稳、很正确,也不敢大步走。
    导致收敛比 Adam 慢很多,甚至卡在鞍点附近不动。
  2. 对 "正常噪声" 太敏感,一遇到大梯度就永久保守:一旦某一个 batch 噪声大,或者某一层梯度突然爆一下,AMSGrad 会把这次偶然的大梯度永久记住,而 Adam 会慢慢忘掉,恢复正常学习率。
  3. 泛化能力往往不如 Adam,更不如 SGDM:AMSGrad 因为学习率只降不升而过度稳定,这缺少适度震荡,更容易陷在critical point。

由于上述缺陷的限制,正常工程中都不会用 AMSGrad,它只是提出了自己的理论,但实际效果并不理想。

AdaBound

AdaBound 是为了解决 Adam 泛化差、SGDM 前期慢 的矛盾:

  • Adam:前期收敛快,但泛化能力差(测试集精度常低于 SGD);后期易出现极端学习率(某些维度过大 / 过小),导致不稳定、不收敛。
  • SGDM:泛化好、最终精度高,但前期收敛极慢,调参成本高。

它通过动态学习率边界让优化器从 Adam 平滑过渡到 SGD,兼得 Adam 的快速收敛与 SGD 的优秀泛化。

AdaBound的原理是在Adam 基础上,给自适应学习率加动态上下界,训练初期时上下界宽松(此时近似Adam,可以快速收敛),训练后期上下界收紧并收敛到同一个值 ,退化为固定学习率的 SGDM(带动量),保证泛化。其核心公式如下:

一阶/二阶矩估计沿用Adam:

动态边界:

  • final_lr:表示训练后期时 SGD 固定的学习率(如 0.1)
  • :边界收敛速度(默认 1e-3)
  • 随训练步数 增大,增大而减小,最终上下界重合为 final_lr

模型使用的裁剪学习率(使用"裁剪 / 钳位" 函数Clip ):

参数更新:

AdaBound 虽然思路巧妙(兼顾 Adam 速度和 SGDM 泛化),但在工程落地中暴露了多个核心缺陷,这也是它始终无法成为主流的关键原因:

  • final_lr 难以调优:final_lr 是 SGDM 的核心超参数,本身就需要针对不同任务 / 模型手动调(比如 ResNet 用 0.1,BERT 用 5e-5)。如果 final_lr 设错,AdaBound 后期要么学习率过大(震荡),要么过小(不动),反而不如直接用 SGDM 调参。
  • 自适应优势被削弱:Adam 的核心价值是不同参数用不同学习率,若某参数的梯度本就该用大 / 小学习率(比如稀疏特征),裁剪会强制 "矫正" 它,反而导致该参数更新不匹配,训练变慢。
  • 超参数复杂度翻倍:AdaBound 除了要调 Adam 的基础超参数(),还新增了两个关键超参数 final_lr和

Cyclical LR

Cyclical LR(Cyclical Learning Rate,循环学习率)核心是让学习率在训练过程中周期性地在预设区间内上下波动 ,而非单调下降。一般在SGDM基础上使用Cyclical LR。

学习率过小参数更新步长不足,模型易卡在局部最优 / 鞍点,无法跳出,学习率过大前期收敛快,但后期震荡,无法收敛到最优解,那就干脆用 "周期性波动的学习率",让模型在 "探索(大学习率跳坑)" 和 "利用(小学习率收敛)" 之间平衡,既避免卡壳,又保证最终精度。

让学习率在一个最小值(base_lr) 和最大值(max_lr) 之间,按预设周期(stepsize)做 "上升 - 下降" 的周期性变化,上升阶段(大学习率)像 "用大步子跳坑",帮助模型跳出局部最优,探索更优的参数空间,下降阶段(小学习率)像 "用小步子微调",让模型在当前优质区域内收敛,保证精度。

Cyclical LR最常用 "三角循环" 模式:

  • scale(t) 是随训练步数 t 变化的缩放因子
  • 在上升阶段(半个周期):scale(t) 从 0 线性增长到 1,学习率从 base_lr 涨到 max_lr
  • 在下降阶段(半个周期):scale(t) 从 1 线性下降到 0,学习率从 max_lr 降到 base_lr
  • 周期长度 step_size通常设为 2-10 * 训练一个 epoch 的步数(比如训练 1 个 epoch 要 1000 步,step_size=2000)。

Cyclical LR是是 "多周期波动",在实际训练中会出现问题:

  • 多周期易导致后期震荡,反而影响精度: 对于一个模型训练而言,前期模型参数远离最优解,这时需要大学习率探索参数空间,波动是正常且有益的,后期模型参数已接近最优解,这时需要小学习率精细收敛,此时任何大的参数更新都会导致 "震荡"(偏离最优解后又往回走)
    所以对于周期性的参数起伏,在后期时模型本应收敛,但每次 lr 升到 max_lr 时,参数更新幅度会突然变大,这把本已接近最优解的参数 "推出去",之后 lr 降到 base_lr,参数又往回走形成 "推出去→拉回来" 的循环,也就是震荡。
  • 缺少对 "训练初期" 的适配(初始大学习率易发散): 主要因为训练初期,模型参数随机初始化,梯度噪声极大、分布极不稳定(batch 间差异大),如果直接用大学习率会让梯度瞬间被极端值主导,分布被 "扭曲"。
    所以zai优化器在训练初期必须做学习率 Warm-up(预热),否则会出现梯度分布畸变、二阶矩 EMA 被污染,最终导致学习率失效、训练震荡甚至发散。Warm-up的核心操作是在训练初期让学习率从极小值线性 / 平滑增长到目标学习率,下面的One-cycle LR就进行了前期的Warm-up。
    相比之下SGDM只有一阶矩(动量),且学习率是全局固定的,初期梯度噪声对 EMA 的影响小,大学习率也不容易直接发散。

下图是Transformer 模型在德英翻译数据集上的梯度绝对值直方图(y 轴是训练迭代次数,x 轴是梯度绝对值的对数尺度,高度是频率):

左图(无Warm up),前 10 步内梯度分布出现明显畸变(The distribution is distorted within 10 updates),大量梯度集中在极小值区域,分布形态混乱,这种畸变会持续影响后续训练,导致参数更新不稳定。右图(有Warm up)梯度分布始终保持平滑、规整的形态,没有出现前期畸变。这说明 Warm-up 有效抑制了初期梯度噪声的影响,让梯度统计更稳定。

One-cycle LR

One-cycle LR 是 Cyclical LR 的升级版,核心是让学习率在整个训练过程中只完成一次 "升 - 降" 循环 ,且搭配 "学习率升温 + 动量反向波动",极致适配 SGDM,最大化其泛化能力和收敛效率。

One-cycle LR仅用 一次完整的升 - 降循环 覆盖全训练周期,避免多周期震荡;前期 "缓慢升温" 学习率,后期 "快速降温",同时反向调整动量,兼顾稳定性和收敛速度。其把整个训练步数 total_steps 分成 3 部分:

对应核心公式1(学习率计算):

  • base_lr:初始低学习率(通常是 max_lr/25
  • max_lr:峰值学习率(核心超参数,需通过 学习率扫描 确定)
  • final_lr:收尾学习率(通常是 base_lr/1000
  • :升温阶段总步数(约 40% total_steps
  • :降温阶段总步数(约 40% total_steps
  • :收尾阶段总步数(约 20% total_steps

对应核心公式2(动量反向波动):

  • max_mom:最大动量(如 0.95)
  • min_mom:最小动量(如 0.85)
  • 动量反向波动(lr 高→动量低,lr 低→动量高),本质是用动量的 "惯性" 一定程度上抵消不同 lr 阶段的风险,具体体现为当Ir处于峰值时并且在动量的影响下,参数更新幅度大,容易 "冲过头"(比如一步跨出最优解区域),所以减小动量(低动量)可以一定程度上防止"冲过头";在lr 处于低谷时,参数更新幅度小,容易 "卡壳"(比如陷在鞍点,梯度接近 0 就不动了),此时采用高动量,高动量保留历史梯度的方向,哪怕当前梯度小,也能靠惯性 "推着参数往前走",突破鞍点,继续收敛。

工作机制:

  1. 升温阶段(小 lr + 高 mom):训练初期模型参数是随机初始化的,直接用大 lr 会导致梯度爆炸 / 损失飞涨,而慢升温让模型在安全范围内,逐步扩大参数更新幅度,"探索"到优质的参数空间区域(比如远离初始随机值的 "低损失区")。
  2. 峰值阶段(大 lr + 低 mom):升温阶段已经找到 "优质参数区域",降温的核心是 "从探索转向收敛" 。通过逐步减小 lr,让参数在优质区域内 "精细调整",而非继续大范围探索。
  3. 降温 + 收尾阶段(小 lr + 高 mom):此时参数已非常接近最优解,哪怕 base_lr 也可能 "微调过头" ,所以采用极低的 final_lr 让参数做 "纳米级微调"。

RAdam

RAdam 是针对 Adam 优化器训练初期学习率震荡 / 不稳定问题的改进版本,核心是融合 SGDM 的稳定性和 Adam 的自适应优势:

  • 训练前期使用SGDM,利用 SGDM 稳定性强、步长可控的优点,让模型 "稳起步",规避 Adam 初期因二阶矩估计不可靠导致的步长爆炸、震荡甚至发散。
  • 训练中后期切换到Adam,利用 Adam 自适应学习率的优点,根据梯度方差调整步长(梯度大则步长小,梯度小则步长大),让模型 "快收敛、准收敛",规避 SGDM 学习率固定,易卡在局部最优、收敛慢的问题。
  • RAdam通过 整流因子 实现了SGDM到Adam的 "平滑过渡",避免了 "突然切换" 导致的训练波动,让两种优化器的特性无缝衔接。

在Cyclical LR的后面我们说过训练初期,模型参数随机初始化,梯度噪声极大、分布极不稳定(batch 间差异大),而Adam的有效学习率依赖二阶矩的偏差校正项**** ,在训练初期(比如 t<10),接近1,极小,被放大,导致有效学习率剧烈波动。

我们在之前说过**** 之所以会除以,是因为Adam初始化时,这导致前几步的 EMA 被 0 拉低,导致估计值系统性偏小(向 0 偏),而除以 是为了消除这种的偏差,让估计值更接近真实的梯度统计特征。使用来进行偏差校正是必要的,但是不可避免地会引入副作用,即导致有效学习率剧烈波动:

,在前几步的值如下。 相当于给乘一个校正系数(倒数)

前几步的 ​ 本身是 "噪声极大的极小值",再乘上 100~1000 倍的放大系数导致​ 变成 "噪声极大的极大值",有效学习率剧烈波动。

副作用仅存在于 的极早期,后期( 趋近于 1,副作用消失

RAdam 的核心不是 "否定偏差校正",而是 "在保留校正的前提下,限制其副作用",它保留了 Adam 的偏差校正,保证估计值无偏,在此基础上新增整流因子,在时动态缩小有效学习率,抵消 "校正后 ​ 过大" 导致的波动,后期 时,,完全退化为 Adam,既保留无偏估计,又无波动问题。其核心公式如下:

计算"方差收敛系数":

计算"学习率方差上限":

动态修正学习率:

RAdam基于统计学的方差分析,计算出​有效学习率的理论方差上限,用这个上限约束前期的学习率,让波动不超过合理范围。下面分别介绍这三个公式的原理及推导:

方差收敛系数

RAdam 要解决的根本问题是Adam 训练初期,二阶矩的 EMA 统计量还未收敛 ,导致自适应学习率的方差过大,参数更新震荡。而"方差收敛系数" 是量化**"二阶矩 EMA 收敛程度"**的关键指标。

要理解****需先从Adam 二阶矩的统计本质说起:

Adam 的二阶矩 是对 梯度平方的指数移动平均(EMA) ,本质是对梯度平方的期望 的无偏估计,即,根据展开(递推到初始值 )得。从公式可以得到我们早已熟知的 EMA 关键特性,即"只有当训练步数 足够大时,​ 才能收敛到真实的 ;训练初期( 小), 是严重有偏的,统计结果不可靠。"关于从此公式得到此特性的原因我们再赘述一下:
看成给第 步梯度平方 的权重。

很小时(如),只依赖单步梯度,完全是噪声,和真实期望差很远。

中等时(如),主要依赖最近几步梯度,统计量仍不稳定。

时,权重和,满足概率归一性,此时 才是 的无偏估计。

所以总结来说,训练初期 小,权重和,未归一化,导致 低估真实期望;只有 足够大时,历史梯度数据足够多了之后,​ 才收敛到

针对上述出现的问题,Adam 用****来做校正,但校正后的副作用也很显著,我们在上面解释过了。

也就是说我们要知道 "二阶矩EMA的收敛程度" 只需要知道当前更新的步数,步数越多,历史梯度数据越多,权重和越接近于1,二阶矩收敛效果越好。
的公式就是这个思路,但它并不是简单的代指更新步数,而是代表 EMA 的有效样本数(Effective Sample Size)

统计上,有效样本数的定义是让 EMA 的方差等于某个普通平均的方差时,那个普通平均的样本数。我们先从最简单的平均开始,再过渡到 EMA来解释这个定义:

  • 普通平均:用 个独立样本 求平均得,每个样本的权重都是 ,权重和为 1,有效样本数 = (所有样本平等参与)。
    这里的样本数 直接决定了统计量的方差,样本数越多,方差越小,估计越可靠。
  • 指数移动平均(EMA): 对样本做EMA得,每个样本的权重是,权重和为(等比数列求和),EMA 里每个样本的权重不一样,那它 "等效于多少个普通平均的样本",这个 "等效数量" 就是 有效样本数(Effective Sample Size, ESS)。

普通平均的方差(假设样本独立同分布,方差为 )则

对 EMA 做方差计算(假设 独立、平稳),通过数学推导可以得出对应,所以 ​ 就被定义为 "有效样本数"(这里不进行EMA方差的推导而只是解释定义),越大,则表示样本数越多,方差越小。

从公式的角度理解:每个样本的权重及其和为

如果表示收敛完成,只需要知道的值就可以知道收敛程度,而只是在此基础上除以将其扩大

例如,则
,则

时,,若此时,则表示无限步 EMA 的统计可靠性约等于10 个样本的等权平均;若此时,则表示无限步 EMA 的统计可靠性约等于1000 个样本的等权平均;

​ 是把梯度权重和按 这个尺度归一后,得到的 "等效样本数量"------ 它的物理意义是 "这个 EMA 到底相当于用了多少个独立样本在平均"。

学习率方差上限

Adam 在训练前期,因为梯度样本太少,自适应学习率的方差会变得非常大,导致更新不稳定、震荡、发散。RAdam做的事情是把梯度近似成 正态分布,把Adam里的看作是一个统计量它在小样本时服从t 分布,然后用 t 分布的方差公式,算出这个统计量到底波动有多大,最后算出一个系数 ​**** 把方差强行拉回正常水平。

正态分布:

自然界大量现象由独立小因素共同影响,最终符合正态分布(Normal Distribution)(中心极限定理),梯度、噪声、误差,均接近正态。正态分布概率密度公式如下:

  • :均值
  • :方差
  • :归一化系数,作用是让总面积等于1(概率必须总和为 1)。
  • 表示样本值离中心 越远,值越大
  • 标准正态分布写为

正态分布图像两侧对称,中间最高,往两边越来越低。下图为的正态分布图像

t 分布:

t 分布是样本很少时的 "正态分布",当你只有很少几个样本数据时,这时估计总体的均值、方差均不准,并且相较于从总体中抽样更容易出现极端值,它的图像尾巴比正态分布更厚(这表示更容易出现极端值),如下所示样本数从30、10、3到1图像尾巴越来越厚(样本越少,尾巴越厚)。样本越多,t 分布 越来越接近正态分布。

t 分布的概率密度函数如下:

  • :称为自由度,决定 t 分布的形状。越小尾巴越肥,越不像正态分布;越大越像正态分布。
    自由度为独立样本数量)。工程上通常认为时 t 分布可以看做是正态分布,时,肉眼完全看不出两者的区别。
  • 上式是t分布的标准形式(默认 ,方差随自由度变)。在实际使用时如果要对t分布平移(改变均值)或缩放(改变方差),可以写成
    的标准t分布,此时方差

标准正态分布为)与t分布公式形式上差异巨大,但在自由度很大时两者依然可以近似相等,这主要是用了数学上的极限思想,下面给出简单证明:

标准正态分布的"形状公式"与t分布的"形状公式"

时,,这是高数里最基础的对自然常数 e 的定义,即,t分布的形状公式可以写成:

时,

所以

即 t 分布在自由度无穷大时,形状公式完全变成标准正态分布的形状公式。

对于不服从标准正态分布的正态分布,如果它的均值等于,方差等于,那么可以通过公式(Z统计量):

来对每一个样本做处理,将其标准化为一个标准正态分布,其中表示均值的标准误差。此时即为一个标准正态分布,即

同理,对于不服从标准 t 分布的 t 分布,如果它的样本均值 等于样本方差 等于,那么可以通过公式(T统计量):

来对每一个样本做处理,将其标准化为一个标准 t 分布,其中表示样本均值的标准误差。此时即为一个标准正态分布,即

RAdam将Adam里的看成是一个服从 t 分布的统计量,原因如下:

  • RAdam假设梯度服从 零均值正态分布 ,即,均值(梯度期望为 0,对应最优解附近),方差未知,需要用样本估计。
  • 一阶矩对应样本均值:一阶矩由加权平均(EMA)得到,本质是对梯度均值 的无偏估计,对应 t 分布中的(因为,所以
  • 二阶矩对应样本方差:二阶矩,这是对梯度方差 的无偏估计,对应 t 分布中的(样本方差)
  • t 统计量分子,分母。RAdam 又用有效样本数 把 EMA 映射到普通平均,把 看成基于 个样本的方差估计,把 看成基于 个样本的均值估计。

RAdam将方差收敛系数(有效样本数)作为 t 分布的自由度,在训练前期小,t 分布方差巨大Adam 的更新方向方差巨大,训练后期大,t 分布接近正态分布,方差稳定。

RAdam的目标是让修正后的更新量的方差尽可能与后期稳定时的方差相等,即

我们知道,在后期稳定时(),t 分布的方差为;而当前时刻方差为。我们希望,所以:

在实际训练时,作者发现 t 分布方差公式很小时(比如 < 4)误差很大,所以加了一个经验修正项来让方差更准,经验修正项为:

于是,重新推导得:

动态修正学习率

RAdam 的更新规则本质是 "条件分支",根据 的大小,决定用哪种方式更新参数,核心是 "初期稳、后期准"。

  • 时,直接退化为 "带动量的 SGD",即SGDM。这是因为Adam在初期时,易导致步长失控,RAdam 此时直接禁用 "自适应学习率",只用动量项更新,避免步长爆炸。
  • 时,整流因子让 SGD 模式平滑切换到 Adam 模式,避免 "突然开启自适应" 导致的步长突变。
    刚超过 4 时(比如 ρt=5), 是一个小于 1 的数(比如≈0.5),此时自适应学习率被 "削弱",步长不会突然变大,
    时,,公式完全等价于Adam。

SWATS

SWATS(Switching from Adam to SGD)是另一类融合 Adam 和 SGDM 的优化器,核心思路与 RAdam 相反 ------先启用 Adam 快速探索参数空间,再根据训练状态自动切换到 SGDM 完成精细收敛 ,而非 RAdam 那样 "先 SGDM 稳起步,再 Adam 自适应"。SWATS 的过渡是 "一次性、平滑触发",而非 RAdam 使用做过渡。

SWATS 的设计思路依赖如下Adam和SGDM的优缺点:

  • Adam 优势:训练初期收敛快(自适应学习率能快速找到优质参数区域);
  • Adam 短板:训练后期易在最优值附近震荡,泛化能力不如 SGDM;
  • SGDM 优势:后期收敛更稳定,泛化能力强;
  • SGDM 短板:初期收敛慢,需手动调学习率。

核心公式如下:

Adam阶段更新(切换前),与标准 Adam 完全一致,先按 Adam 规则更新参数:

切换触发条件,定义一致性指标 用来衡量 Adam 更新方向与原始梯度方向的 "对齐程度",当 ​ 连续多步稳定时,触发切换:

  • 是梯度 与 Adam 更新量 的余弦相似度,取值范围 [−1,1]。
  • 物理意义:当 时,Adam 更新方向与梯度方向几乎完全一致,说明自适应学习率的 "探索价值" 已耗尽,此时切换到 SGDM 更优。
  • 触发规则:当 连续 步(经验值 )大于阈值 (经验值 ),判定为 "训练进入稳定期",触发切换。

SGDM学习率初始化,切换时,SWATS 会从 Adam 的自适应步长中自动推导 SGDM 的最优学习率,避免手动调参:

SGDM阶段更新(切换后),固定使用 SGDM 更新,动量系数复用 Adam 的 (保证一致性):

RAdam 和 SWATS 虽然都融合 Adam 和 SGDM,但它们的设计思路和适用场景截然不同:

  • RAdam更在意稳定性(极强的鲁棒性),解决了 Adam 最致命的 "早期方差估计不可靠导致步长爆炸" 问题,但是后期Adam更新步长小,泛化能力可能不足。
    如果你的任务容易震荡、崩掉(如大 Batch、小模型),选 RAdam。
  • SWATS更在意泛化能力,训练后期完全等价于SGDM,SGDM 具有很好的收敛性和泛化能力,能跳出较差的局部最优,因此在 ImageNet 等分类任务中,SWATS 配合 SGDM 的最终精度往往很高。但一次性切换的机制不稳定,只在特定数据集(如分类任务)上效果拔群,在生成任务、NLP 细调等场景下,SWATS 的 "一刀切" 切换策略往往会破坏训练稳定性。
    如果你的任务需要极高泛化能力、且 Adam 后期震荡严重,选 SWATS。

实际上,针对 "Adam 前期不稳 + 后期停滞"、"SGDM 前期慢 + 后期稳" 的全周期问题,提出了一系列更全面的融合方案,如 "AdamW + 学习率调度 + 权重衰减" 、"RAdam + Lookahead"等,而不是只使用RAdam或者SWATS。

Lookahead

Lookahead 是在 2019 年提出的通用优化器 wrapper(优化器包装器),它可以套在任意基础优化器(如 SGD、Adam、RAdam 等)外面,不修改原有优化器逻辑,仅通过 "快慢权重双轨道" 更新机制,提升训练稳定性与泛化能力。

它的核心行为可以概括为:k 步向前探索,1 步向后回退(k step forward, 1 step back),就像在优化路径上先 "探路",再谨慎地迈出一步。

Lookahead的设计思路源于两个核心问题:

  • 避免危险探索:基础优化器(如 SGD)在训练中可能陷入剧烈震荡或尖锐局部极小值,导致泛化变差。Lookahead 先让 "快权重" 走 k 步探索梯度方向,再让 "慢权重" 向探索终点做小幅回退,避免过度激进的更新。
  • 寻找更平坦的极小值:平坦的极小值通常对应更好的泛化性能。Lookahead 通过慢权重的插值更新,引导优化轨迹向更平缓的区域收敛,从而提升模型在测试集上的表现。
  • 尖锐极小值:对参数扰动敏感,测试集表现差(泛化弱);
  • 平坦极小值:对参数扰动鲁棒,测试集表现好(泛化强)。

Lookahead 维护两套权重:

  • 快权重 :负责在内部循环中执行 k 步基础优化器更新,用于探索梯度方向。
  • 慢权重 :负责在外部循环中向快权重终点做插值更新,用于稳定收敛。

采用 "内外双循环" 更新结构:

外层循环(慢权重更新,第 轮): 将上一轮的慢权重 ​ 作为本轮快权重的初始值,保证探索起点与慢权重一致。此步为初始化步骤:

内层循环(快权重探索,共 步):

  • :模型损失函数
  • :训练数据批次
  • :任意基础优化器(如 SGD、Adam、RAdam),输出梯度更新量
  • 公式含义:以 为起点,用基础优化器执行 k 步梯度更新,完成 "向前探路" 。

慢权重插值更新:

内层循环结束后,更新慢权重:

上述公式等价于:

  • :插值系数(超参数,控制慢权重向快权重移动的步长)
  • :内层循环 k 步探索后的快权重终点
  • 公式含义:慢权重 是「上一轮慢权重」和「快权重终点 」的线性组合,实现「1 step back」的平滑回退,避免剧烈震荡。
    从下图可以看出,快权重(蓝色虚线)在探索过程中精度会短暂下降(震荡),慢权重(绿色点)通过插值更新,始终保持更稳定、更高的测试精度,最终收敛到更优的平坦极小值。

Lookahead的优势在于**「慢权重只跟探索后的终点做插值,而不是跟每一步快权重」以及「探索 k 步后再决定怎么迈一步」**这个设计里。

  • 对于高频震荡会让收敛路径曲折,容易扎进尖锐极小值,而Lookahead通过快权重先跑 k 步,把短期震荡 "平均" 到一个探索终点,慢权重只跟这个 k 步后的平均方向做插值,相当于低通滤波(过滤掉单步梯度的高频噪声)
  • Lookahead 在快权重探索时,会短暂进入尖锐极小值区域(表现为精度下降、震荡),而慢权重通过小步插值,不会直接扎进这些尖锐区域,而是沿着探索轨迹的 "平均方向",慢慢滑向更平坦的区域.。

NAG

NAG,全称Nesterov Accelerated Gradient,是改进版的 Momentum ,它在 Momentum 的基础上引入了**「前瞻性梯度计算」**,本质是对 Momentum 方法的更精细的动量控制,收敛更快、更稳定。

之前介绍过Momentum 的核心是累积历史梯度方向,公式,但Momentum 是基于当前位置计算梯度,容易在接近极小值时因动量过大而冲过最优解(overshooting)。NAG的设计思路是先看一步,再算梯度 ,即在更新前,先沿着历史动量方向 "迈出一小步" ,在这个前瞻位置 计算梯度,而不是在当前位置。这种设计可以使梯度提前感知到 前方地形 ,当接近极小值时,梯度会更早开始减小,从而抑制过度冲量,避免震荡,让收敛更精准。公式对比如下:

标准Momentum公式:

表示在当前参数处的梯度

NAG公式:

先沿动量方向做前瞻:

在前瞻位置计算梯度:

参数更新:

公式含义:模拟 "如果我们继续沿上一步动量方向走,会到达哪里",提前感知前方的梯度地形。而标准 Momentum 只在当前位置算梯度,容易在接近极小值时因动量过大冲过最优解(overshooting);NAG 提前看一步,让梯度更早反映 "前方坡度变缓" 的信号。

公式含义:梯度不再基于当前位置 ,而是基于前瞻位置 。当接近极小值时,前瞻位置的梯度会比当前位置更小,因此动量项 的增量会提前减小,自然削弱冲量,避免震荡。

NAG除了在后期收敛阶段可以防止 overshooting(冲过最优解),让参数精准收敛到极小值点。它在前期参数更新加速阶段还可以提前感知前方梯度,在方向切换时更早调整动量,让收敛路径更平滑,减少不必要的来回震荡,加速收敛。(标准 Momentum 会累积大量动量,容易在梯度方向变化时 "刹不住车",导致路径震荡)

NAG并不会因为前瞻性而更难跳出局部最优 / 鞍点,因为它并没有改变动量积累的本质,只要梯度不为零,动量就会持续累积,依然有足够的 "惯性" 冲出局部最优或鞍点。相反,它反而可能更容易跳出,当接近局部最优 / 鞍点时,前瞻位置的梯度会更早变为零或反向,这会让动量的增量提前减小甚至反向,避免过度 "扎进" 局部最优 / 鞍点,为后续跳出保留了动量空间;而 Momentum 可能因为动量过大,直接扎进局部最优,后续更难挣脱。

Nadam

Nadam就是将上述的NAG用到了Adam中,即Nadam = NAG + Adam。其公式如下:

一阶矩、二阶矩更新:

偏差修正(与Adam相同):

Nesterov前瞻性动量:

  • :Nesterov 修正后的动量(最终用于参数更新的动量)
  • :Adam 中偏差修正后的一阶矩,而
  • :一阶矩的偏差修正项

更新公式:

Nadam 没有显式计算前瞻位置,而是通过动量的加权组合,让最终的 等价于「已经在前瞻位置算过梯度后的动量」,结合NAG公式看:

  • Nadam中的:相当于NAG里的,是 "惯性前瞻",它代表了如果继续沿之前的动量方向走,下一步的动量趋势。
  • Nadam中的:当于 NAG 里的,是 "梯度前瞻修正",这里的 虽然是在 处计算的,但通过和 组合,等价于把梯度信息提前注入到 "下一步动量" 中

AdamW

AdamW,全称Adam with Decoupled Weight Decay,是深度学习中主流的带解耦权重衰减的优化器,核心是把权重衰减从梯度计算中分离,解决传统 L2 正则与自适应优化器不兼容的问题。

在下面的文章中我们在优化模型时提到了正则化机器学习过程(线性回归)------ 模型构造与优化_从机器学习到深度学习的重要步骤-CSDN博客

正则化即在原损失函数上加上一个正则项,即:(关于正则化的详细说明参考上述文章正则化部分)

标准 Adam 中把 L2 正则项加入损失函数,在一阶 / 二阶矩的更新过程中也加上了正则项:

实验表明,如果在一阶 / 二阶矩中加入正则项,会导致权重衰减失效、泛化变差。所以AdamW的设计思路是解耦权重衰减,在参数更新步骤单独施加权重衰减,不参与梯度与矩的计算,让正则效果等价于 SGD 中的权重衰减。公式如下:

一阶/二阶矩的计算(与Adam相同):

偏差修正(与Adam相同):

参数更新(解耦权重衰减,与 Adam 核心区别):先做 Adam 自适应更新,再单独施加权重衰减 ,不影响 ​ 计算。

SGDW

SGDW,全称SGD with Momentum & Decoupled Weight Decay。设计思路与AdamW完全相同,只是是在SGDM之上做的解耦权重衰减。公式如下:

动量累积(同SGDM):

参数更新(解耦权重衰减,与 SGDM 核心区别)先做动量更新,再单独施加权重衰减 ​,不影响动量累积。:

Something may help optimization

下面介绍几种优化常用的小方法,可能对优化有帮助:

  1. Shuffling(数据打乱): 这个用在Mini-Batch SGD,之前介绍过。
    主要方法是在每轮(epoch)训练前,对整个训练集进行随机重排,再按批次(batch)输入模型。
  2. Dropout(随机失活): 防止神经网络过拟合,同时让模型学习更鲁棒的特征表示。
    主要方法是在训练时以概率 随机将部分神经元输出置为 0,目的是在随机失活神经元后,模型无法依赖少数特定神经元的组合来完成预测,迫使它学习更分散、更通用的特征。在测试时保留所有神经元,并将输出缩放 倍,这是因为在训练时每个神经元以概率 被保留,其输出期望,测试时若直接使用完整网络,输出会变为 ,与训练时的期望不一致,会导致分布偏移。
  3. Gradient Noise(梯度噪声注入): 公式
    在梯度计算后,向梯度中注入随时间衰减的高斯噪声,噪声强度随训练步数增加而降低,前期鼓励探索,后期稳定收敛。主要作用是为梯度添加可控噪声,帮助模型跳出局部最优,增强探索性,提升泛化能力(尤其在高维非凸优化中)。
  4. Warm-up(预热): 之前介绍过。在训练初期使用较小的学习率,避免模型参数因梯度爆炸而发散,稳定前期训练过程。训练前若干步(如前 1000 步),学习率从 0 线性 / 分段增长至目标学习率,之后恢复为正常学习率调度。例如Transformer模型常用的线性Warm-up:
    表示Warm-up 总步数,为目标学习率。
  5. Curriculum Learning(课程学习): 模仿人类学习顺序,从简单样本到复杂样本逐步训练,帮助模型更快收敛、提升泛化能力。
    具体做法是先训练简单样本(如干净语音、低噪声图像、易分类样本),让模型学习基础模式,再逐步引入复杂样本(如带噪语音、难分类样本),让模型学习更精细的特征。
  6. **Fine-tuning(微调):**在预训练模型基础上,针对下游任务进行小样本训练,复用预训练学到的通用特征,提升下游任务性能。
  7. Normalization(归一化方法): 可参考文章PyTorch_conda-CSDN博客中Normalization Layers部分
  8. **Regularization(正则化):**已介绍过。

总结

  • Adam阵营:
    核心优势:自适应学习率、收敛快、对超参数不敏感,适合复杂、高维、数据量大的场景。
    优势领域:自然语言处理(NLP,大模型参数量级大、训练数据海量,Adam/AdamW 能快速收敛,且 AdamW 正确的权重衰减机制完美适配 Transformer 正则化需求)、生成式模型(如GAN、Diffusion,自适应学习率能稳定对抗训练中的梯度波动,RAdam/AMSGrad 可缓解 Adam 的梯度估计偏差,避免模式崩溃)、强化学习
  • SGDM阵营:
    核心优势:泛化性能更强、噪声引入更利于跳出局部最优,适合追求极致精度、模型结构相对简单的场景。
    优势领域:计算机视觉(CV)(如图像分类(ResNet、EfficientNet)、目标检测(YOLO、Faster R-CNN)、语义分割等任务)、传统深度学习模型(CNN 为主,如轻量级 CNN、经典视觉 backbone等任务,模型结构相对简单,SGDM 的动量机制能有效平滑梯度噪声,避免过拟合,泛化能力更稳定)
相关推荐
2601_949221032 小时前
边缘智算加速重构算力格局,微模块技术筑牢低延时基础设施底座
大数据·人工智能·重构
木易 士心2 小时前
AI辅助开发:前端“加速器”还是后端“稳定器”?——基于项目类型与用户规模的实战指南
人工智能·后端
欧阳子遥2 小时前
OpenCV 复杂背景下的轮廓提取
人工智能·opencv·计算机视觉
老鱼说AI2 小时前
CUDA架构与高性能程序设计:多维网格与数据
c++·人工智能·深度学习·神经网络·机器学习·语言模型·cuda
badhope2 小时前
GitHub超有用项目推荐:skill仓库--用技能树打造AI超频引擎
java·开发语言·前端·人工智能·python·重构·github
网安情报局2 小时前
2026网络安全六大确定性趋势
大数据·人工智能·网络安全
syounger2 小时前
当S/4HANA不再是唯一答案:CIO如何重新定义ERP转型路径
人工智能
yhdata2 小时前
聚焦半导体关键部件:磁悬浮无轴泵市场前景明朗,2032年规模逼近15.12亿元
大数据·人工智能