1246 字
6 分钟
Adam 优化算法详解:从原理到现代实践
引言
在深度学习模型训练中,优化器直接决定了收敛速度、训练稳定性和最终泛化性能。
传统的随机梯度下降(SGD)及其带动量变体虽然理论性质良好,但在高维非凸问题中常面临以下挑战:
- 收敛速度慢
- 对学习率极其敏感
- 容易陷入鞍点或平坦区域
- 不同参数的梯度尺度差异巨大
Adam(2014 年提出)通过融合 动量法 与 RMSProp 的核心思想,实现了每个参数独立的自适应学习率,极大地降低了超参数调试难度,成为过去十年深度学习事实上的“默认优化器”。
即使到了 2026 年,Adam 及其改进版本(尤其是 AdamW)仍然是训练大语言模型(LLM)、扩散模型、视觉Transformer 等大型架构的主流选择。
1. Adam 的核心思想
Adam 为每个参数维护两个指数移动平均量:
- 一阶矩估计(动量项):梯度的指数衰减平均,类似于 Momentum 的速度累积
- 二阶矩估计(均方项):梯度平方的指数衰减平均,用于自适应缩放步长,类似 RMSProp
通过这两者的结合 + 偏差校正 + 数值稳定技巧,Adam 实现了高效、稳定的参数更新。
2. 完整数学推导(LaTeX 版)
给定参数 ,在第 步的梯度为 ,Adam 的更新规则如下:
2.1 动量(一阶矩)与均方(二阶矩)估计
2.2 偏差校正(非常重要)
由于 ,训练早期估计值会严重偏向 0,因此需要校正:
2.3 参数更新
常用默认超参数(几乎已成为行业标准):
- (学习率)= 0.001(或 1e-3 ~ 3e-4 范围)
- = 0.9
- = 0.999
- = 1e-8(防止除零)
3. PyTorch 中的标准实现方式(2026 常用写法)
import torchimport torch.optim as optim
model = MyModel(...) # 你的模型optimizer = optim.Adam( model.parameters(), lr=1e-3, # 常见初始值 betas=(0.9, 0.999), eps=1e-8, weight_decay=0 # 注意:原版 Adam 的 weight_decay 实现有缺陷)
# 现代更推荐使用 AdamW(见第5节)# optimizer = optim.AdamW(model.parameters(), lr=3e-4, weight_decay=0.01)
# 典型训练一步optimizer.zero_grad()loss = compute_loss(model, batch)loss.backward()optimizer.step()4. Adam 的主要优势(至今仍然成立)
- 快速收敛:尤其在训练早期表现优异
- 对学习率不敏感:默认参数在绝大多数任务上都能较好工作
- 参数尺度无关:天然适应梯度大小差异极大的参数(如 Embedding 层 vs. 输出层)
- 内存开销适中:仅需为每个参数保存 m 和 v 两个动量(相比 AdaGrad 等更节省)
5. Adam 的已知局限与现代解决方案(2025–2026 视角)
| 问题 | 表现 | 主流解决方案(2026 年常用) |
|---|---|---|
| 原版 Adam 的 weight decay 实现不正确(与 SGD 的 L2 正则不等价) | 泛化能力偏弱,尤其在大模型中 | 几乎全部切换为 AdamW(解耦权重衰减) |
| 在某些 CV 任务中最终精度不如精心调参的 SGD+momentum | 测试集精度低 1–3% | 后期 warm-up → linear decay + 切换 SGD,或直接全程 AdamW |
| 二阶矩累积过大 → 后期学习率过小,提前“卡住” | 曲线出现平台期 | 使用 cosine decay with warm-up 或尝试 Adan / Lion 等新优化器 |
| 对超大 batch size 适应性一般 | 不稳定 | 结合 LAMB / LARS 或直接使用 AdamW + gradient clipping |
2026 年工业界共识:
- 小型实验 / 快速迭代 → Adam 或 AdamW
- 中大型模型(>100M 参数)、LLM、扩散模型 → AdamW(几乎成为标配)
- 追求极致精度(尤其是图像分类)→ 可尝试 SGD + momentum + cosine schedule 或 Lion / Sophia 等极新兴优化器
6. 推荐进阶变体(2026 年仍活跃)
- AdamW(最重要!):解耦权重衰减,目前绝大多数论文和工业代码的默认选择
- AdamWR / RAdam:改进偏差校正与方差整流,早期更稳定
- Adam8bit / 8-bit Adam:大幅降低显存占用,适合消费级显卡训练大模型
- Lion(2023–2025 流行):sign 操作代替自适应步长,显存更省、速度更快
- Adan:在部分任务上表现出比 AdamW 更强的鲁棒性
总结与建议
Adam 系列优化器降低了深度学习训练的门槛,让研究者和工程师能更专注于模型结构而非超参数调试。
2026 年实用建议排序(从稳妥到进阶):
- 先用
optim.AdamW(lr=1e-3 ~ 3e-4, weight_decay=0.01~0.1) - 配合 linear warm-up + cosine decay 学习率调度
- 必要时开启 gradient clipping(norm=1.0)
- 如果追求极致性能或显存极度受限,再尝试 Lion / Adan / Sophia 等新玩家
希望本文能帮助你更好地理解并驾驭 Adam 家族优化器。
Adam 优化算法详解:从原理到现代实践
https://sw.rscclub.website/posts/rgznzadamyhsf/