优化器与学习率调度:AdamW 的统治

03-训练与微调 进阶 约 20 分钟 #AdamW#优化器#学习率调度#权重衰减 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),优化器对比建议对照 Loshchilov & Hutter 2019 与近期优化器文献复核。

一句话定义

Transformer 训练的默认优化器是 AdamW:Adam(一阶/二阶矩自适应步长)+ 解耦权重衰减(正则与自适应步长分离);学习率调度标配"线性 warmup + 余弦衰减到 10% 峰值"——这对组合在无数模型上验证,是最接近"默认即正确"的训练配方。

为什么重要

优化器选错=训练白费:SGD 在 Transformer 上明显劣于 Adam 家族(注意力 softmax 对步长敏感);AdamW 修正了 Adam 与 L2 正则耦合的著名 bug("AdamW 论文"),使权重衰减真正起正则作用。理解 AdamW 的每个部件(矩估计/偏差修正/解耦衰减),是读一切训练配方的前提。

前置知识

kp-007/013(梯度、warmup);梯度下降基本概念。

核心概念

  • Adam 三件套:

- 一阶矩 $m_t=\beta_1m_{t-1}+(1-\beta_1)g_t$(梯度动量,β₁≈0.9); - 二阶矩 $v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2$(梯度平方的滑动平均,β₂≈0.95~0.999)——逐参数自适应步长(梯度常的参数走小步、梯度稀疏猛的走大步); - 偏差修正 $\hat m=m/(1-\beta_1^t)$、$\hat v=v/(1-\beta_2^t)$——初期矩估计偏向零,修正后冷启动更稳(warmup 的优化器侧背景 kp-013)。

  • AdamW 的"W":权重衰减直接乘权重($\theta\leftarrow\theta(1-\eta\lambda)-\eta\hat m/\sqrt{\hat v}$),而非混入梯度做 L2——解耦后衰减强度不再被自适应步长扭曲(Adam+L2 的原 bug:常用参数的 v̂ 大→有效衰减被稀释)。分组纪律:嵌入/注意力权重衰减,LayerNorm/偏置不衰减。
  • 学习率调度:warmup 线性升 → 余弦衰减到峰值的 10%(Llama 配方);新趋势 WSD(Warmup-Stable-Decay:长平台+末段快速衰减——平台期模型可随时"收割"用于继续训练,三阶段训练友好)。
  • 超参典型值(Llama 级):β₂=0.95(大模型常用,比 0.999 更快遗忘旧梯度)、grad clip 1.0、weight decay 0.1、峰值 lr 按 1/√(模型宽度) 缩放(μP 思想 kp-013)。
  • 新优化器挑战者:Adafactor(省内存)、Lion(符号梯度)、Sophia(二阶近似)——尚未撼动 AdamW 的默认地位,但 Shampoo/SoAP 类二阶方法在大规模训练显示出潜力。

原理与机制

为什么 Transformer 需要 Adam 而非 SGD:注意力的 softmax 与嵌入层梯度高度稀疏/异质(不同参数的梯度尺度差数个量级)——SGD 的统一步长无法同时适配;Adam 的逐参数自适应恰好治理这种异质性。CNN 时代 SGD+动量的统治在 Transformer 时代终结——架构决定优化器。

AdamW 解耦修的什么 bug:Adam+L2 时,L2 项也进 m/v 统计——常被激活的参数(v̂ 大)其 L2 惩罚被自适应步长稀释,导致正则失效且强度不可控;AdamW 把衰减从梯度中拿出、直接作用权重——衰减强度与自适应解耦、超参可解释(λ 就是真的 λ)。

余弦衰减为什么流行:后期小学习率精修(kp-010 "接近极值步要小");余弦的前缓后急形状比阶梯衰减平滑、比线性衰减后段更久保持中速——实证全胜的"无聊好选择"。WSD 的兴起动机:衰减只在中末期,中期任何 checkpoint 都是"已衰减"质量——支持持续训练/数据迭代的工作流。

图示

AdamW 更新:
  m ← β₁m+(1−β₁)g ;  v ← β₂v+(1−β₂)g²
  m̂=m/(1−β₁ᵗ) ; v̂=v/(1−β₂ᵗ)      (偏差修正)
  θ ← θ(1−ηλ) − η·m̂/(√v̂+ε)        (解耦衰减!)
调度: 线性warmup → 余弦→10%峰值 | 新趋势 WSD
超参: β₁0.9 β₂0.95 clip1.0 wd0.1 (Llama级配方)
分组: LN/偏置 免衰减 ; 嵌入/矩阵 衰减

直观类比

Adam 像"每个参数配独立油门+刹车":常用参数(梯度大)自动踩轻油门,久不更新的参数给大油门——梯度尺度的贫富差距被拉平。AdamW 的解耦像"把油门与配重分开装":以前配重(正则)会跟着油门失真,现在各自独立可调。

实例或案例

  • Llama 3 配方:AdamW、β₂=0.95、cosine 到 10%、3 阶段衰减(长 15T token 训练)——工业配方即本条参数表。
  • Adam vs SGD 消融:Transformer 上 SGD 收敛显著更差(同调参预算)——"必须 Adam"的实证。
  • WSD 的实践红利:MiniCPM 等用 WSD 支持数据配比迭代(平台期可重启衰减)——调度形状服务训练工作流。

常见误区

  • 误区一:"weight decay=L2 正则(在 Adam 下)"。AdamW 正是为修正这一等价错觉而生——Adam 下两者行为不同,解耦版才是真正的权重衰减。
  • 误区二:"β₂ 用默认 0.999 就好"。大模型训练 0.999 的长记忆会在梯度突变时滞后——0.95 加快遗忘是大规模配方(小模型可回默认)。
  • 误区三:"学习率只调峰值"。调度形状(余弦/WSD/衰减终点比例)与峰值同等重要——配方要成对复制。

与其他知识点的关系

  • kp-013:warmup/裁剪/初始化的稳定性配套。
  • kp-015/028:缩放定律的超参迁移与优化动力学。
  • kp-016:微调时的低 lr 短调度变体。

自测题

  1. AdamW 相比 Adam+L2 修正了什么?

答:权重衰减与自适应步长解耦——衰减直接作用于权重、不再被 v̂ 稀释,正则强度可控可解释。

  1. 为什么大模型把 β₂ 从 0.999 调到 0.95?

答:缩短二阶矩记忆,使梯度分布突变(数据/阶段切换)时自适应步长快速跟进,避免滞后步长失控。

  1. WSD 调度的工程红利是什么?

答:稳定平台期的 checkpoint 具有"接近衰减后"的质量——支持持续训练、数据迭代与随时收割。

延伸阅读

  • Loshchilov & Hutter. *Decoupled Weight Decay Regularization*(ICLR 2019,AdamW 原文)。
  • Hu 等, *MiniCPM*(WSD 调度的工业实践)。
  • Karpathy《Let's build GPT》与 nanoGPT 代码(AdamW 配方的最小实现)。