核心要点

  • Adam 把 L2 正则当成梯度的一部分(λθ 加进梯度),会一起进入一阶/二阶矩估计,被自适应学习率缩放扭曲

  • AdamW权重衰减从梯度里解耦出来,更新时直接对参数减去 lr·λ·θ,与梯度自适应分离

  • 后果:Adam 中梯度大的参数实际被衰减得更弱,正则强度依赖梯度历史;AdamW 让衰减对所有参数一致、更正确

  • 实践:AdamW 泛化更好、超参更易调,是 BERT/GPT 等现代 Transformer 的默认优化器

标准回答

问题根源

Adam 中常把 L2 正则实现为「在梯度里加上 λθ」。但 Adam 会用一阶矩 m 和二阶矩 v 对梯度做自适应缩放,于是 λθ 这一项也被 v 缩放——梯度历史大的参数,正则项被除得更小,相当于衰减更弱。结果是 L2 正则与权重衰减在 Adam 里不再等价,正则强度被自适应机制扭曲。

AdamW 的修正

AdamW(Decoupled Weight Decay)把权重衰减从梯度中解耦:自适应更新照常只作用于真实梯度,权重衰减则在参数更新时单独施加——直接对参数减去 lr·λ·θ。这样衰减对每个参数一致且可控,恢复了「权重衰减」的本意。

实践意义

AdamW 通常带来更好的泛化和更稳定的超参,是现代 Transformer 训练的事实标准。注意 weight decay 与 learning rate 此时应分别调节。

常见误区

⚠️ 常见踩坑

认为 L2 正则和权重衰减永远等价——只在 SGD 下等价,在 Adam 这类自适应优化器下两者不同,正是 AdamW 要解决的问题。

追问

追问 1为什么 SGD 下 L2 正则等价于权重衰减?

SGD 更新为 θ ← θ - lr·g。若把 L2 项 λθ 加进梯度,更新变成 θ ← θ - lr·(g + λθ) = θ - lr·g - lr·λθ,后一项恰好就是权重衰减。因为没有自适应缩放,加进梯度和单独衰减完全等价。Adam 因为有逐参数的二阶矩缩放,破坏了这个等价关系。

追问 2AdamW 中哪些参数通常不做 weight decay?

通常对 biasLayerNorm/BatchNorm 的 gain 和 bias 等一维参数不施加权重衰减,只对权重矩阵衰减。因为对归一化层的缩放/平移参数衰减会干扰其正常的尺度调节,且这些参数量少、不易过拟合。实现上一般按参数 shape 或名字分组配置。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。