文章

22 Adam 优化算法(Adam Optimization Algorithm)

22 Adam 优化算法(Adam Optimization Algorithm)

✅ 简介

  在深度学习的发展历程中,许多研究人员提出了新的优化算法,但大多数仅在特定问题上表现良好,缺乏泛化能力。因此,社区对新优化算法持谨慎态度。

  而 Adam(Adaptive Moment Estimation) 是少数被广泛验证、适用于多种神经网络架构的有效优化算法之一。它结合了:

  • 动量法(Momentum)
  • RMSProp

  从而实现了快速且稳定的训练效果。

🔍 推荐理由:Adam 被广泛使用,性能稳定,是训练神经网络时的首选优化器之一。


🧠 Adam 算法原理

  Adam 是一种自适应学习率的优化算法,其核心思想是:

同时计算梯度的一阶矩(均值)和二阶矩(未中心化的方差),并利用这两个估计来动态调整每个参数的学习率。


🔁 算法流程(伪代码 + 公式)

初始化

1
2
3
4
Vdw = 0      # 动量项(一阶矩)
Sdw = 0      # RMSProp 项(二阶矩)
Vdb = 0
Sdb = 0

第 T 次迭代步骤

  1. 计算当前 mini-batch 的梯度

    \[dw, db \leftarrow \frac{\partial J}{\partial w}, \frac{\partial J}{\partial b}\]
  2. 更新动量项(一阶矩估计)——类似 Momentum

    \[v_{dw} = \beta_1 v_{dw} + (1 - \beta_1) dw\] \[v_{db} = \beta_1 v_{db} + (1 - \beta_1) db\]
  3. 更新 RMSProp 项(二阶矩估计)

    \[s_{dw} = \beta_2 s_{dw} + (1 - \beta_2) dw^2\] \[s_{db} = \beta_2 s_{db} + (1 - \beta_2) db^2\]

    ⚠️ 注意:dw² 表示逐元素平方(element-wise squaring)

  4. 偏差校正(Bias Correction)
    由于初始时刻 vs 都为 0,导致前几轮估计有偏,需进行校正:

    \[v_{dw}^{\text{corrected}} = \frac{v_{dw}}{1 - \beta_1^T}\] \[v_{db}^{\text{corrected}} = \frac{v_{db}}{1 - \beta_1^T}\] \[s_{dw}^{\text{corrected}} = \frac{s_{dw}}{1 - \beta_2^T}\] \[s_{db}^{\text{corrected}} = \frac{s_{db}}{1 - \beta_2^T}\]
  5. 参数更新

    \[w := w - \alpha \cdot \frac{v_{dw}^{\text{corrected}}}{\sqrt{s_{dw}^{\text{corrected}}} + \epsilon}\] \[b := b - \alpha \cdot \frac{v_{db}^{\text{corrected}}}{\sqrt{s_{db}^{\text{corrected}}} + \epsilon}\]

🛠️ 超参数设置建议

超参数建议值说明
$\alpha$需调参(如 $10^{-3}$ ~ $10^{-1}$)学习率,最关键超参数
$\beta_1$0.9一阶矩衰减率(动量系数)
$\beta_2$0.999二阶矩衰减率(RMSProp 系数)
$\epsilon$$10^{-8}$小常数,防止除零

✅ 实践建议:

  • $\beta_1$、$\beta_2$、$\epsilon$ 通常使用默认值。
  • 只需调整 $\alpha$ 即可获得良好效果。
  • 很少有人手动调节 $\beta_1$、$\beta_2$ 或 $\epsilon$。

📚 名称来源:Adam = Adaptive Moment Estimation

  • 第一阶矩(First Moment) :由 $\beta_1$ 计算,表示梯度的指数加权平均 → 近似均值。
  • 第二阶矩(Second Moment) :由 $\beta_2$ 计算,表示梯度平方的指数加权平均 → 近似方差。

  因此:

\[\text{Adam} = \text{Adaptive Moment Estimation}\]

💡 注:虽然名字叫 Adam,但与研究者 Adam Coates 无关(只是巧合)。


🔄 总结对比表

方法是否包含动量是否自适应学习率是否需要调参多
SGD✅(需调 α)
Momentum
RMSProp
Adam❌(基本用默认)

✅ Adam = Momentum + RMSProp 的融合体,兼具两者优点。


📌 关键优势

  1. 收敛快:结合动量加速方向,同时抑制震荡。
  2. 鲁棒性强:适用于不同架构的神经网络。
  3. 超参数少:只需调一个学习率即可。
  4. 无需手动归一化:自动调整各参数的学习速率。

✅ 附加知识扩展

为什么需要偏差校正?

  • 初始阶段:$v_{dw} = 0$,但真实梯度不为零 → 估计偏低。
  • 经过若干步后,随着 $T$ 增大,$\beta_1^T \to 0$,校正因子趋于 1。
  • 校正使早期更新更准确。

何时不用 Adam?

  • 如果你追求极致性能(如训练超大规模模型),可以考虑 AdamWLionAdaFactor 等变种。
  • 对于简单线性模型,SGD 有时更优。

🧾 最终总结(一句话)

Adam 是一种结合动量和自适应学习率的高效优化算法,通过估计梯度的一阶和二阶矩实现快速收敛,是现代深度学习中最常用、最可靠的优化器之一。


  ✅ 推荐你在实践中优先尝试 Adam,配合合理的学习率调度(后续视频将讲“学习率衰减”),可显著提升训练效率。

本文由作者按照 CC BY 4.0 进行授权