本文目录导读:

这是一个关于 AdamW 优化器 的详细解读。
AdamW 是目前深度学习中(尤其是在 Transformer 架构和 LLM 训练中)最主流、最推荐的优化器之一,你可以把它理解为 Adam 的修正版,主要解决了 Adam 在使用 L2 正则化(权重衰减)时的一个根本性错误。
核心问题:Adam 的 L2 正则化是错误的
在理解 AdamW 之前,需要先知道传统 Adam 在实现“权重衰减”时存在的问题。
- L2 正则化 vs. 权重衰减:在标准 SGD(随机梯度下降)中,L2 正则化(在损失函数中加入权重平方项)与权重衰减是等价的,它们都会让权重在每次更新时乘以一个略小于 1 的系数。
- Adam 的问题:Adam 的自适应学习率机制(即参数除以梯度二阶矩的平方根)改变了 L2 正则化的数学表达。
- 在 Adam 中,L2 正则化项带来的梯度也是自适应调整的。
- 这意味着,对于更新幅度小的参数,正则化效果反而被放大;对于更新幅度大的参数,正则化效果被缩小。
- Adam 中的 L2 正则化不等同于真正的权重衰减,且效果不稳定,容易导致模型泛化性能下降。
AdamW 的解决方案
AdamW 将权重衰减从梯度更新中剥离出来,在参数更新后直接对参数进行衰减,不经过自适应学习率的调整。
数学公式对比:
-
Adam(错误方式):
g = ∇L(w) + λ*w(正则化项和损失梯度混合)m = β1*m + (1-β1)*gv = β2*v + (1-β2)*g²w = w - α * m / (√v + ε) -
AdamW(正确方式):
g = ∇L(w)(仅计算损失梯度)m = β1*m + (1-β1)*gv = β2*v + (1-β2)*g²w = w - α * (m / (√v + ε))(先进行 Adam 自适应更新)w = w - α * λ * w(再进行独立的权重衰减)
关键变化:权重衰减项 λ*w 没有被放入 g 中,因此不会被 m 和 v 缩放,它是一个独立、固定比例的参数缩小步骤。
为什么 AdamW 效果更好?
- 更好的泛化能力:恢复了权重衰减的物理意义——无论参数更新幅度大小,都按相同比例进行衰减,这使得训练出来的模型在测试集上表现更好,正则化效果更可控。
- 超参数解耦:学习率
α和权重衰减系数λ互不影响,你可以独立调整λ来控制正则化强度,而不用担心它被自适应学习率机制扭曲。 - 与 SGD+Momentum 对齐:在对超参数(尤其是
λ)进行调参时,AdamW 的最佳λ值与 SGD 类似的动量优化器的值更接近,方便经验迁移。
核心配置参数与建议
当你使用 PyTorch/TensorFlow 等框架时,通常通过 torch.optim.AdamW 或 tf.keras.optimizers.AdamW 调用。
lr(学习率):推荐使用较 Adam 更低的值,常见范围:1e-4到5e-5。betas:默认(0.9, 0.999),一阶矩和二阶矩的衰减率,一般无需改动。eps:默认1e-8,防止除零,一般无需改动。weight_decay(权重衰减系数):AdamW 最重要的超参数。- 对于小模型(如简单的 CNN/MLP):建议尝试
1e-4到1e-3。 - 对于大模型(如 Transformer、LLM、ViT):建议尝试
01到1,很多现代 LLM 使用1或更高。 - 注意:在 AdamW 中,这个参数通常需要比在 Adam 中大一个数量级(例如从
1e-5提升到01)。
- 对于小模型(如简单的 CNN/MLP):建议尝试
常见误区澄清
| 误区 | 澄清 |
|---|---|
| “AdamW Adam 加了一个新功能” | 不是,它是一个修复,它纠正了原版 Adam 在 L2 正则化实现上的数学错误。 |
| “权重衰减值可以沿用 Adam 的经验” | 不行,在 AdamW 中,weight_decay 不经过梯度缩放,所以通常需要设为原来 Adam 的 10~100 倍。 |
| “AdamW 只是因为解耦了才有效” | 不完全是,主要原因是解耦后权重衰减不再受自适应梯度影响,从而保持了正则化的数学一致性。 |
何时用 AdamW?
| 场景 | 推荐优化器 | 原因 |
|---|---|---|
| 预训练大型模型(BERT/GPT/Llama/ViT) | AdamW | 超参数稳定,泛化性能好,行业标准。 |
| 需要强正则化的任务(小数据集、容易过拟合) | AdamW | 可独立调节 weight_decay,效果优于 Adam 的 L2 正则化。 |
| 快速原型、简单模型(小 CNN) | Adam / SGD(带动量) | 差异不明显,Adam 代码更少。 |
| 计算机视觉(特别是 Vision Transformer) | AdamW | Silcock 等人已证明其在 ViT 上显著优于 Adam。 |
| 大语言模型(LLM) | AdamW | 几乎所有的 GPT 系列、Llama、PaLM 都使用 AdamW(或变体)。 |
AdamW = Adam 的解耦纠正版,它通过手动分离权重衰减步骤,恢复了正则化的效果,是当前训练 Transformer 和大规模模型事实上的标准优化器。