为什么LLaMA、Stable Diffusion这些大模型都爱用AdamW?从论文到实战的深度解读
为什么LLaMA和Stable Diffusion都选择AdamW?深度解析优化器进化之路
在训练一个包含数十亿参数的大模型时,优化器的选择往往决定了整个项目的成败。2023年开源社区最耀眼的两个明星——Meta的LLaMA系列和Stability AI的Stable Diffusion,都不约而同地在官方实现中采用了AdamW优化器。这绝非偶然,而是深度学习优化器演进历程中的一个必然选择。
1. 从Adam到AdamW:优化器的关键进化
1.1 Adam优化器的核心机制
Adam(Adaptive Moment Estimation)自2014年提出以来,迅速成为深度学习领域的默认优化器。它巧妙融合了两种经典思想:
- 动量(Momentum):通过梯度的一阶矩估计(移动平均)保持参数更新的惯性
- RMSProp:通过梯度的二阶矩估计(平方的移动平均)实现参数自适应的学习率
# Adam的典型实现伪代码
m = beta1 * m + (1 - beta1) * grad # 一阶动量
v = beta2 * v + (1 - beta2) * grad**2 # 二阶动量
m_hat = m / (1 - beta1**t) # 偏差修正
v_hat = v / (1 - beta2**t)
param -= lr * m_hat / (sqrt(v_hat) + eps)
这种设计使得Adam具备以下优势:
- 自动适应不同参数的特性
- 对初始学习率选择相对鲁棒
- 在稀疏梯度场景表现优异
1.2 Adam的致命缺陷:权重衰减的误用
然而在实践中,研究者们逐渐发现Adam存在一个关键问题——它对L2正则化(权重衰减)的处理方式存在理论缺陷。传统SGD中,权重衰减直接作用于参数:
θ = θ - η*(∇L + λθ)
但在Adam中,权重衰减项会被自适应学习率机制二次调整,导致:
| 优化器 | 权重衰减效果 | 实际表现 |
|---|---|---|
| SGD | 直接作用于参数 | 稳定可靠 |
| Adam | 被自适应学习率缩放 | 过弱或过强 |
这种耦合会导致模型要么欠正则化(过拟合),要么学习受阻(欠拟合),在大模型训练中尤为明显。
2. AdamW的革命性设计
2.1 解耦的核心思想
2017年ICLR论文《Decoupled Weight Decay Regularization》提出了AdamW优化器,其核心创新在于:
"将权重衰减从梯度更新中完全解耦,使其独立于自适应学习率机制"
这种设计带来了三个关键改进:
- 真正的L2正则化效果
- 更稳定的训练动态
- 更好的泛化性能
2.2 数学形式的精妙差异
对比Adam和AdamW的更新公式:
# Adam更新(耦合权重衰减)
param -= lr * (m_hat/(sqrt(v_hat)+eps) + wd*param)
# AdamW更新(解耦权重衰减)
param -= lr * m_hat/(sqrt(v_hat)+eps)
param -= lr * wd * param # 独立操作
虽然看似微小,但这种解耦在大规模训练中会产生显著差异:
- 权重衰减不再受自适应学习率影响
- 正则化强度在不同参数层间保持一致
- 超参数(尤其是wd)变得更容易调节
3. 大模型为何偏爱AdamW
3.1 LLaMA的训练实践
Meta在训练LLaMA-2时特别强调了优化器选择:
- 使用AdamW而非原始Adam
- 设置β1=0.9,β2=0.95
- 权重衰减固定为0.1
- 学习率预热2000步
这种配置下,模型展现出:
- 更稳定的训练损失曲线
- 更少的梯度爆炸/消失现象
- 更好的最终zero-shot性能
3.2 Stable Diffusion的优化需求
扩散模型的训练面临独特挑战:
- 时间步间的梯度差异极大
- 需要平衡生成质量和多样性
- 长时训练容易过拟合
AdamW通过以下方式应对这些挑战:
- 自适应学习率处理不同时间步的梯度变化
- 精确的权重衰减控制模型复杂度
- 解耦设计避免训练后期震荡
4. 实战中的AdamW调参技巧
4.1 超参数设置指南
基于主流大模型实践,推荐配置:
| 参数 | 推荐值 | 调整建议 |
|---|---|---|
| β1 | 0.9 | 通常固定 |
| β2 | 0.95-0.999 | 越大越稳定 |
| 权重衰减 | 0.01-0.1 | 大模型用较小值 |
| 学习率 | 1e-5-1e-4 | 配合预热策略 |
| ε | 1e-8 | 除非梯度特别小 |
4.2 实际训练中的注意事项
- 学习率预热:大模型前1-2%的训练步骤应采用线性/余弦预热
- 梯度裁剪:即使使用AdamW,仍建议设置梯度范数阈值(如1.0)
- 权重衰减排除:对LayerNorm/bias参数应禁用权重衰减
- 混合精度:配合AMP使用时需监控梯度缩放情况
# 典型AdamW实现示例(PyTorch)
optimizer = AdamW(
model.parameters(),
lr=5e-5,
betas=(0.9, 0.999),
weight_decay=0.01,
eps=1e-8
)
scheduler = get_linear_schedule_with_warmup(
optimizer,
num_warmup_steps=2000,
num_training_steps=100000
)
5. 超越AdamW:优化器的未来方向
虽然AdamW目前是大模型训练的事实标准,但研究社区仍在探索更优方案:
- Lion优化器:Google提出的符号动量方法,在部分任务上表现更好
- Sophia:引入曲率信息的二阶优化方法
- Adan:通过嵌套动量加速收敛
不过在实际项目中,当面对数十亿参数的大模型训练时,AdamW依然是那个最稳妥的选择——它可能不是每个指标上的最优解,但几乎永远不会成为系统中最薄弱的环节。
更多推荐



所有评论(0)