Weight decay:每步把过大权重拉向零

权重衰减(weight decay) 在每次参数更新时,额外把权重乘向零:(\theta\leftarrow\theta-\eta\lambda\theta)(再叠上梯度项)。它惩罚的是 (W) 的大小,不是激活通路。Loshchilov & Hutter(2019)的 AdamW 把这项从自适应分母里解耦出来,成为 LLM 训练默认优化器。

段末注释:解耦指衰减项不除以 Adam 的 (\sqrt{\hat{v}}),剂量 (\lambda) 不随二阶矩忽大忽小。后文 (\lambda) 即 weight decay 系数。

系列导读5050.大模型-算法要点-0


1. 作用

层面 weight decay 在干什么
正则 抑制个别权重极大,改善泛化
与 Dropout 分工 Dropout 随机掐激活;decay 压参数模长。可叠加
数值 长期训练避免权重无界爬升

数据近单遍的大模型预训练仍普遍保留 (\lambda>0)(LLaMA 0.1),与「Dropout 收到 0」并不矛盾。


2. 功能 / 机制

AdamW(社区默认,torch.optim.AdamW):

[
\theta\leftarrow\theta-\eta\left(\frac{\hat{m}}{\sqrt{\hat{v}}+\epsilon}+\lambda\theta\right)
]

(\hat{m},\hat{v}) 为 Adam 的偏差修正一/二阶矩。(\lambda\theta) 走进 (\sqrt{\hat{v}})。

旧式「Adam + 损失里加 (\frac{\lambda}{2}|W|^2)」在自适应学习率下不等于上述解耦衰减,调 (\lambda) 会对不齐论文。

图 1 AdamW 修剪过大的 \(W\);不是 Dropout 那种随机休眠

谁衰减、谁排除(常见做法):

参数 是否 decay
线性层 / Attention 的 (W)
bias、LayerNorm / RMSNorm 的 (\gamma,\beta)
Embedding(视实现) 有的排除,有的纳入;跟底座脚本

推理不再施加 (\lambda):衰减已经写进当前权重。


3. 默认经验值

场景 (\lambda) 备注
PyTorch AdamW 默认 0.01 偏小,大模型预训练常加大
BERT 0.01 论文 L2 weight decay 0.01
LLaMA / 多数 Decoder 预训练 0.1 与 (\beta_2=0.95)、clip 1.0 一组
全量微调 0.01~0.1 先抄底座,再按过拟合加减
LoRA 0 或很小 适配器参数少;有的脚本仍 0.01

(\lambda) 过大:欠拟合、loss 降不动。过小:权重肥、验证先好后坏。不要和学习率绑死成「(\lambda) 必须等于 (\eta)」。


4. 整体应用

  • 架构:不占层;是优化器超参。
  • 训练:写在 AdamW(weight_decay=...);用 param group 排除 norm/bias。
  • 推理:无对应开关。导出权重即最终 (\theta)。

HuggingFace Trainer:weight_decay。DeepSpeed / PyTorch 同样字段。


5. 使用案例

BERT:Adam,decay 0.01,warmup 10k。
LLaMA:AdamW (\beta=(0.9,0.95)),decay 0.1,cosine,warmup 2000,grad clip 1.0。
ProteinMPNN:官方 Adam,未把 decay 写成一等公民;小模型 + Dropout 0.1 已够用。
LoRA:多数例子 weight_decay=0.0 或 0.01,先保证能拟合再加。


6. 易混对照

名称 差在哪
L2 加在 loss 里 与 Adam 耦合,≠ AdamW
Dropout 随机掩码激活;推理默认关
梯度裁剪 限制 (\
学习率 (\eta) 步长;(\lambda) 是衰减比例

参考

  • Loshchilov & Hutter, Decoupled Weight Decay Regularization(AdamW), ICLR 2019.
  • 实现:torch.optim.AdamW;HuggingFace weight_decay
-------------本文结束感谢您的阅读-------------