Adam优化器
Adam(Adaptive Moment Estimation)结合了动量和自适应学习率的优点,是深度学习中最常用的优化器。理解Adam对于有效训练神经网络至关重要。
学习难度:进阶·阅读时间:约10分钟
Adam概述
历史背景
2015年,Kingma和Ba提出了Adam优化器:
- 结合了AdaGrad和RMSprop的思想
- 引入动量机制
- 快速成为深度学习的默认选择
核心思想
Adam同时维护两个动量:
- 一阶矩(均值):梯度的滑动平均
- 二阶矩(方差):梯度平方的滑动平均
算法原理
更新公式
m[t] = β₁ × m[t-1] + (1 - β₁) × g[t]
v[t] = β₂ × v[t-1] + (1 - β₂) × g[t]²
m̂[t] = m[t] / (1 - β₁^t)
v̂[t] = v[t] / (1 - β₂^t)
θ[t] = θ[t-1] - η × m̂[t] / (√v̂[t] + ε)
组成部分
动量项(m_t)
梯度的指数滑动平均,提供惯性,加速收敛。
自适应学习率(v_t)
梯度平方的滑动平均,自动调整每个参数的学习率。
偏差修正
修正初始阶段的估计偏差,使早期训练更稳定。
超参数
默认参数
| 参数 | 默认值 | 作用 |
|---|---|---|
| η(学习率) | 0.001 | 控制更新步长 |
| β₁ | 0.9 | 一阶矩衰减率 |
| β₂ | 0.999 | 二阶矩衰减率 |
| ε | 10⁻⁸ | 数值稳定性 |
参数调整建议
- 通常只调整学习率η
- β₁和β₂很少需要调整
- 大模型训练可能需要更小的学习率
优势与局限
优势
- ✅ 对不同参数自适应学习率
- ✅ 收敛快,所需调参少
- ✅ 适合稀疏梯度问题
- ✅ 内存效率高(只需存储两个动量)
局限性
- ❌ 可能收敛到次优解
- ❌ 泛化性能有时不如SGD
- ❌ 权重衰减实现有问题(AdamW可解决)
AdamW
权重衰减问题
原始Adam的L2正则化实现不正确:
- L2正则化被加入梯度后,又被自适应缩放
- 导致正则化效果减弱
AdamW的修正
将权重衰减与梯度更新分离:
θ[t] = θ[t-1] - η × (m̂[t] / (√v̂[t] + ε) + λ × θ[t-1])
其中λ是权重衰减系数。
推荐使用
现代大模型训练(BERT、GPT等)普遍使用AdamW而非原始Adam。
最佳实践
何时选择Adam
- 快速原型开发
- 处理稀疏数据
- 深度网络训练
- 自然语言处理任务
何时考虑其他优化器
- 计算机视觉任务:SGD+Momentum可能更好
- 追求最佳泛化性能
- 内存受限场景
常见设置
| 任务类型 | 学习率 | 优化器 |
|---|---|---|
| NLP微调 | 1e-5 ~ 5e-5 | AdamW |
| CV分类 | 1e-3 ~ 1e-2 | SGD/Adam |
| 大模型预训练 | 1e-4 ~ 1e-3 | AdamW |