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-5AdamW
CV分类1e-3 ~ 1e-2SGD/Adam
大模型预训练1e-4 ~ 1e-3AdamW
----