AdamW优化器

介绍

AdamW是Loshchilov和Hutter于2019年提出的解耦权重衰减的Adam变体,核心改进是将权重衰减与梯度计算分离,直接作用于参数更新,解决了Adam中 L2正则化效果不稳定的问题,提升了正则有效性与模型泛化能力。以下从核心原理、算法步骤、关键特性、实现示例等方面详细说明。

关键特性对比

特性 Adam AdamW
权重衰减方式 融入梯度计算 独立参数更新
正则稳定性 受梯度缩放影响,不稳定 直接作用参数,稳定
泛化能力 较弱 更强(尤其大数据/复杂模型)
超参数敏感性 高(权重衰减效果波动) 低(衰减效果可预期)
适用场景 快速收敛优先 正则化与泛化优先(如微调预训练模型)

超参数设置建议

  • 学习率(lr):默认 1e⁻³,微调时常用 5e⁻⁵~2e⁻⁴。
  • 权重衰减(weight_decay):默认 1e⁻²,视觉/语言任务常用 1e⁻⁴~1e⁻²,需根据模型大小调整。
  • betas:默认 (0.9, 0.999),一般无需修改;噪声大的数据可适当降低β₁。
  • eps:默认 1e⁻⁸,防止除零,保持默认即可。

PyTorch实现示例

import torch
import torch.nn as nn
from torch.optim import AdamW

# 定义模型
model = nn.Linear(10, 2)
# 初始化优化器
optimizer = AdamW(
    model.parameters(),
    lr=1e-3,
    betas=(0.9, 0.999),
    eps=1e-8,
    weight_decay=1e-2  # 权重衰减系数
)
# 训练循环
criterion = nn.CrossEntropyLoss()
for inputs, labels in dataloader:
    optimizer.zero_grad()
    outputs = model(inputs)
    loss = criterion(outputs, labels)
    loss.backward()
    optimizer.step()

代码中,weight_decay 直接指定解耦的权重衰减强度,无需手动在损失中添加L2正则。


适用场景与优势

  1. 预训练模型微调:权重衰减的稳定作用能有效防止过拟合,提升下游任务性能。
  2. 复杂模型训练:如Transformer、大语言模型等,AdamW的正则化更可靠,泛化能力更强。
  3. 数据有限场景:通过精准权重衰减抑制参数冗余,减少过拟合风险。

常见变体

AMSGrad(改进二阶矩更新,增强收敛稳定性)、AdamW with warm-up(学习率预热,缓解训练初期震荡)。

注意事项

权重衰减仅适用于权重参数,偏置(bias)与层归一化(LayerNorm)参数通常不衰减;学习率与权重衰减需协同调优,避免衰减过强导致欠拟合。


原文出处:/show_1GW2hHFVe4hP.html