打开任何一个大语言模型的训练代码——GPT-3、LLaMA、BERT、Mistral——你会发现一个惊人的共性:它们清一色使用AdamW优化器。不是经典的随机梯度下降(SGD),不是带动量的SGD,而是AdamW。

这并非巧合。在计算机视觉领域,SGD至今仍是许多模型的首选;但在自然语言处理和Transformer架构上,Adam及其变体几乎统治了整个领域。这种分化背后,隐藏着深刻的数学原理和工程考量。

一个优化器要解决什么问题

在深入比较之前,我们需要理解优化器在训练神经网络时面临的核心挑战。

神经网络的训练本质上是一个高维优化问题。假设一个拥有70亿参数的模型,我们需要在70亿维的空间中找到一个点,使得损失函数最小化。问题在于,这个损失函数的"地形"极其复杂——有的方向陡峭,有的方向平缓;有的区域梯度稳定,有的区域梯度剧烈波动。

传统的SGD采用最朴素的策略:计算当前梯度,沿着梯度的反方向走一步。

$$\theta_{t+1} = \theta_t - \eta \cdot g_t$$

其中 $\theta$ 是参数,$\eta$ 是学习率,$g_t$ 是当前梯度。这个公式简洁优雅,但存在一个致命缺陷:所有参数共用同一个学习率。

想象你在山地中寻找最低点。有些方向坡度很大,走一小步就够;有些方向坡度很缓,需要大步前进。SGD却强迫你在所有方向上使用相同的步长——要么在某些方向走得太急而越过山谷,要么在某些方向走得太慢而停滞不前。

这就是为什么SGD需要精心的学习率调度:先用较大的学习率快速下降,再逐渐减小以精调位置。但即便如此,单一学习率的局限依然存在。

Adam的核心洞察:每个参数都有自己的节奏

2014年,Diederik Kingma和Jimmy Ba提出了Adam优化器,名字来自"Adaptive Moment Estimation"(自适应矩估计)。其核心思想简单而深刻:为每个参数维护一个独立的学习率。

Adam的做法是同时追踪两个"记忆":

一阶矩估计——梯度的移动平均:

$$m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t$$

这相当于"记住"过去的梯度方向。如果过去几步的梯度都指向同一个方向,说明这条路值得继续走下去;如果梯度方向来回摇摆,说明应该谨慎行事。

二阶矩估计——梯度平方的移动平均:

$$v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2$$

这衡量的是梯度的"波动程度"。如果某个参数的梯度经常剧烈变化,说明这个方向很"颠簸",应该走小步;如果梯度一直很稳定,说明这个方向很"平坦",可以大步前进。

最终的参数更新公式:

$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t$$

其中 $\hat{m}_t$ 和 $\hat{v}_t$ 是偏差校正后的估计值。注意分母中的 $\sqrt{\hat{v}_t}$:它为每个参数提供了一个自适应的"步长调节因子"。梯度波动大的参数,分母大,步长小;梯度稳定的参数,分母小,步长大。

这正是我们需要的:不同参数按照自己的"节奏"前进。

Adam优化器结合动量和RMSProp

图片来源: Built In - Adam Optimization Algorithm

偏差校正:为什么不能直接用原始的矩估计

Adam论文中有一个容易被忽视的细节:偏差校正。由于 $m_0$ 和 $v_0$ 初始化为0,在训练初期,移动平均会严重偏向0,导致估计有偏。

论文给出了校正公式:

$$\hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t}$$

这个校正很重要。在训练初期($t$ 很小),$1-\beta^t$ 接近0,会将原始估计放大,补偿初始化偏差;随着 $t$ 增大,校正因子趋近于1,估计逐渐无偏。

从Adam到AdamW:一个小改动带来的巨大差异

Adam在实践中表现出色,但研究者们发现了一个微妙的问题:Adam中的权重衰减实现与SGD不等价。

L2正则化 ≠ 权重衰减

在SGD中,我们通常通过在损失函数中添加L2正则项来实现权重衰减:

$$L_{reg} = L + \frac{\lambda}{2}\|\theta\|^2$$

此时梯度变为:

$$g_t = \nabla L + \lambda \theta$$

参数更新:

$$\theta_{t+1} = \theta_t - \eta(\nabla L + \lambda\theta) = (1-\eta\lambda)\theta_t - \eta\nabla L$$

这等价于先对参数进行衰减,再沿梯度方向更新。衰减系数 $(1-\eta\lambda)$ 同时受到学习率 $\eta$ 和正则化系数 $\lambda$ 的影响。

但在Adam中,情况变得复杂。由于自适应学习率的存在,L2正则项会被"扭曲":

$$\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t}+\epsilon}(\nabla L + \lambda\theta)$$

这里的衰减系数变成了 $\frac{\eta\lambda}{\sqrt{\hat{v}_t}+\epsilon}$,它不再是常数,而是依赖于梯度历史 $\hat{v}_t$。对于那些梯度波动大的参数,分母大,实际衰减效果反而变弱了——这与权重衰减的初衷相悖。

AdamW的修正:解耦权重衰减

2019年,Ilya Loshchilov和Frank Hutter在ICLR上发表了论文《Decoupled Weight Decay Regularization》,提出了AdamW。核心修改非常简单:将权重衰减与梯度更新解耦。

AdamW的更新公式:

$$\theta_{t+1} = \theta_t - \eta\left(\frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon} + \lambda\theta_t\right)$$

权重衰减项 $\lambda\theta_t$ 不再经过自适应学习率的调整,而是直接作用于参数。这保证了所有参数都受到相同程度的正则化,与SGD的行为一致。

论文中的实验结果令人印象深刻:在图像分类任务上,AdamW使Adam的泛化性能显著提升,能够与SGD+momentum竞争。更重要的是,解耦后学习率和权重衰减成为独立的超参数,调参变得更加简单。

为什么Transformer特别需要Adam

到此为止,我们讨论的是Adam的一般优势。但为什么Transformer架构对Adam的依赖如此之深?2024年发表在NeurIPS上的一篇论文《Why Transformers Need Adam: A Hessian Perspective》给出了深入的答案。

重尾类别不平衡

语言模型的训练面临一个独特挑战:词汇表中不同token的出现频率差异极大。在典型的语料库中,少数高频词占据了大部分出现次数,而大量低频词只出现寥寥几次。

2024年的一篇论文《Heavy-Tailed Class Imbalance and Why Adam Outperforms Gradient Descent on Language Models》揭示了这个问题的数学本质。研究者发现,在重尾分布下,不同类别的Hessian矩阵特征值差异巨大:

$$\lambda_{max}(\nabla^2_{w_k} L) \propto \pi_k$$

其中 $\pi_k$ 是第 $k$ 类的出现频率。高频类的Hessian最大特征值远大于低频类。

这意味着什么?对于高频词,损失曲面在这些方向上非常"陡峭";对于低频词,损失曲面则相对"平缓"。如果使用统一的学频率,SGD会陷入两难:

  • 学习率太大:在低频词方向上发散
  • 学习率太小:在高频词方向上收敛极慢

Adam的自适应机制完美解决了这个问题:它自动为陡峭方向分配小步长,为平缓方向分配大步长。

梯度异质性

另一篇2023年的论文《Toward Understanding Why Adam Converges Faster Than SGD for Transformers》提出了"方向锐度"(directional sharpness)的概念。

研究者发现,Transformer的梯度具有高度的异质性:不同参数的梯度方向和幅度差异极大。在这种场景下,SGD的单一学习率会导致某些方向更新过激,某些方向更新不足。

Adam通过追踪每个参数的梯度历史,能够:

  1. 识别哪些方向需要谨慎(高方差梯度)
  2. 识别哪些方向可以大步前进(稳定梯度)
  3. 自动平衡不同方向的更新幅度

为什么计算机视觉偏好SGD

有趣的是,计算机视觉领域至今仍广泛使用SGD+momentum。原因在于图像数据的特性与文本有本质区别:

  1. 数据分布:图像数据经过数据增强后,各类别的样本数量相对均衡
  2. 梯度特性:卷积网络的梯度相对均匀,异质性不如Transformer明显
  3. 泛化优势:大量研究表明,SGD倾向于找到"平坦极小值"(flat minima),泛化性能更好

平坦极小值的概念很直观:如果损失函数在某个极小值附近很平坦,即使测试数据有轻微偏移,损失也不会剧烈变化;而陡峭极小值对数据扰动非常敏感。

Adam由于自适应特性,更容易"冲进"陡峭的谷底;SGD的噪声则有助于逃离这些尖锐区域,停留在更平坦的位置。这解释了为什么Adam训练快但有时泛化差,SGD训练慢但泛化好。

AdamW的代价:内存开销

既然AdamW这么好,为什么不是所有任务都用它?一个直接的原因是内存开销。

内存计算

Adam需要为每个参数维护两个状态向量:一阶矩 $m$ 和二阶矩 $v$。这两个向量通常以FP32精度存储,以确保数值稳定性。

对于一个有 $N$ 个参数的模型:

  • 参数本身:$N \times 4$ 字节(FP32)或 $N \times 2$ 字节(FP16)
  • 一阶矩:$N \times 4$ 字节
  • 二阶矩:$N \times 4$ 字节
  • 梯度:$N \times 4$ 字节

以70亿参数的模型为例:

  • 参数(FP16):14 GB
  • Adam状态:$7 \times 10^9 \times 4 \times 2 = 56$ GB
  • 梯度:28 GB
  • 总计:约98 GB

这就是为什么大模型训练需要如此多的显存,也是ZeRO等技术专注于优化优化器状态存储的原因。

对比之下,SGD只需要存储一个动量向量:

  • SGD状态:$N \times 4$ 字节 = 28 GB
  • 总内存节省约28 GB

新的替代方案:Lion

2023年,Google Research提出了Lion优化器(EvoLved Sign Momentum),它只维护一个状态向量,比Adam节省50%的内存。

Lion的核心创新是用符号函数替代Adam的二阶矩:

$$\theta_{t+1} = \theta_t - \eta \cdot \text{sign}(\hat{m}_t)$$

这个看似简单的改动,在多项实验中展现出与AdamW相当甚至更好的性能,同时内存占用减半。不过Lion需要不同的超参数配置(学习率通常要小3-10倍),迁移成本较高。

训练大模型的完整优化策略

选择AdamW只是开始。在实际训练大模型时,还需要配合一系列技巧:

学习率Warmup

Transformer训练几乎都需要学习率warmup:在训练开始时使用很小的学习率,逐渐增加到目标值。

2024年的论文《Why Warmup the Learning Rate? Underlying Mechanisms and Improvements》给出了理论解释:warmup的主要作用是让网络在早期阶段"适应"高学习率,将优化引导到损失曲面上更"良态"的区域。

典型配置:

  • Warmup步数:总训练步数的1-10%
  • 起始学习率:目标学习率的1/10到1/100
  • 调度方式:线性增长

梯度裁剪

Adam虽然能自适应调整学习率,但仍可能遇到梯度爆炸问题。梯度裁剪是常用的防护措施:

$$g_t = \min\left(1, \frac{C}{\|g_t\|}\right) g_t$$

其中 $C$ 是裁剪阈值。这确保了每次更新的梯度范数不超过 $C$,防止偶发的梯度尖峰破坏训练稳定性。

权重衰减配置

AdamW的权重衰减系数需要根据模型规模调整。论文《How to set AdamW’s weight decay as you scale model and dataset》建议将AdamW理解为指数移动平均模型,给出了缩放公式:

$$\lambda_{new} = \lambda_{base} \times \frac{B_{new}}{B_{base}} \times \frac{T_{base}}{T_{new}}$$

其中 $B$ 是批次大小,$T$ 是训练步数。

典型配置:

  • 预训练:weight_decay = 0.01 ~ 0.1
  • 微调:weight_decay = 0.01 ~ 0.05
  • 注意:bias和LayerNorm参数通常不应用权重衰减

没有万能的优化器

AdamW在Transformer训练中的统治地位并非偶然。它针对语言模型的独特挑战——重尾分布、梯度异质性、高维稀疏特征——提供了有效的解决方案。解耦权重衰减进一步提升了其泛化能力。

但这种优势伴随着代价:更高的内存开销、可能更差的平坦极小值特性、对warmup等技巧的依赖。在某些场景下(如计算机视觉),SGD+momentum仍然是更优的选择。

优化器的选择,归根结底是一个权衡问题:

优化器 收敛速度 内存占用 泛化性能 调参难度 适用场景
SGD 计算机视觉
SGD+momentum 计算机视觉
Adam NLP, 稀疏数据
AdamW 较好 大模型预训练
Lion 内存受限场景

理解这些权衡,才能在特定任务上做出正确的选择。大模型训练是一个系统工程,优化器只是其中一个环节。与模型架构、数据管道、分布式策略协同配合,才能最终训练出高质量的模型。


参考文献

  1. Kingma, D. P., & Ba, J. (2014). Adam: A Method for Stochastic Optimization. arXiv:1412.6980.
  2. Loshchilov, I., & Hutter, F. (2019). Decoupled Weight Decay Regularization. ICLR 2019.
  3. Chen, X., et al. (2024). Why Transformers Need Adam: A Hessian Perspective. NeurIPS 2024.
  4. Kang, D., et al. (2024). Heavy-Tailed Class Imbalance and Why Adam Outperforms Gradient Descent on Language Models. arXiv:2402.19449.
  5. Kalra, D. S., et al. (2024). Why Warmup the Learning Rate? Underlying Mechanisms and Improvements. arXiv:2406.09405.
  6. Chen, X., et al. (2023). Toward Understanding Why Adam Converges Faster Than SGD for Transformers. arXiv:2306.00204.
  7. Chen, X., & Liang, P. (2023). Symbolic Discovery of Optimization Algorithms. arXiv:2302.06675.
  8. Ruder, S. (2016). An overview of gradient descent optimization algorithms. arXiv:1609.04747.
  9. Keskar, N. S., et al. (2016). On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima. arXiv:1609.04836.
  10. Zhang, J., et al. (2025). How to set AdamW’s weight decay as you scale model and dataset. arXiv:2405.13698.