首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >每个AI炼丹师都该读的梯度下降综述

每个AI炼丹师都该读的梯度下降综述

作者头像
DrugIntel
发布2026-04-13 17:49:30
发布2026-04-13 17:49:30
40
举报

从 SGD 到 Adam,一文读懂神经网络优化算法的前世今生

文献来源An Overview of Gradient Descent Optimization Algorithms 作者:Sebastian Ruder(NUI Galway / Aylien Ltd.) arXiv:1609.04747v2 · 2017 年 6 月 推荐指数:⭐⭐⭐⭐⭐


导读

如果你正在训练神经网络,一定打开过 PyTorch 或 TensorFlow 的文档,看到密密麻麻的优化器选项——SGD、Adam、RMSprop、Adagrad……

大多数人会直接复制别人的代码,默默用上 Adam,却不知道为什么。

Sebastian Ruder 的这篇综述正是为此而写。它系统梳理了梯度下降的三种变体、五大核心挑战、八种主流优化算法、分布式训练策略,以及若干重要的训练技巧,是深度学习从业者不可不读的经典文献。


一、梯度下降的三种变体

梯度下降的本质是:沿目标函数 关于参数 的负梯度方向更新参数,以最小化损失:

其中 为学习率。根据每次更新所使用的数据量,分为三种变体:

1.1 批量梯度下降(Batch Gradient Descent)

每次更新使用全部训练数据计算梯度:

优点

缺点

收敛稳定,凸函数可达全局最小

数据量大时计算极慢

梯度估计无噪声

无法在线学习(不支持新样本动态更新)

内存占用大,大数据集不可行

1.2 随机梯度下降(Stochastic Gradient Descent, SGD)

每次更新仅使用单个样本

优点

缺点

更新频繁,速度快

梯度方差大,损失函数震荡剧烈

支持在线学习

难以精确收敛到最小值

高方差有助于跳出局部最小

需要逐步衰减学习率

1.3 小批量梯度下降(Mini-batch Gradient Descent)⭐ 实践首选

折中方案,每次使用 个样本组成的小批量更新:

  • 常用批量大小:50~256,视任务而定
  • 工程优势:充分利用现代硬件的矩阵运算并行性(GPU/TPU)
  • 收敛特性:兼具批量GD的稳定性与SGD的速度
  • 注意:实践中"SGD"一词通常默认指小批量版本

💡 Mini-batch GD 是当前神经网络训练的事实标准,后续算法均在此基础上改进。


二、训练中的五大核心挑战

2.1 学习率难以选择

  • • 学习率过小 → 收敛极慢
  • • 学习率过大 → 在最小值附近震荡,甚至发散
  • • 固定学习率无法适应训练动态(初期需要大步,后期需要精细调整)

2.2 学习率调度的局限

预设退火策略(如按固定 epoch 衰减)需要人工设计,无法自适应数据特征,在新任务上迁移性差。

2.3 各参数梯度尺度差异

当特征稀疏、不同参数的重要性差异显著时,统一学习率会导致:

  • • 高频特征:更新过度,震荡
  • • 低频特征:更新不足,欠拟合

2.4 鞍点问题(Saddle Points)

Dauphin 等人的研究表明,高维非凸优化中,真正的障碍不是局部最小值,而是鞍点——在某些维度梯度为正(上坡),在另一些维度为负(下坡)。鞍点附近梯度趋近于零,SGD 极难逃脱。

2.5 梯度消失与病态曲率

深层网络中,梯度在反向传播过程中可能指数级衰减(梯度消失)或爆炸,同时 Hessian 矩阵的病态条件数会导致不同方向的收敛速度差异悬殊。


三、八大主流优化算法详解

3.1 Momentum(动量法)

动机:SGD 在"沟壑"(ravines,一个维度曲率远大于另一个维度的区域)中会横向震荡、纵向缓慢前进。动量法通过引入"惯性"加速收敛。

更新规则

直觉类比:像一个滚下山坡的球,不断积累动量,在正确方向加速,在震荡方向互相抵消。

关键参数:动量系数 通常设为 0.9

效果

  • • 在梯度方向一致的维度上加速更新
  • • 在梯度方向频繁变换的维度上抑制震荡
  • • 显著减少达到最小值所需的迭代次数

3.2 Nesterov Accelerated Gradient(NAG)

动机:动量法"盲目"地沿累积速度方向冲,可能冲过最小值后才反应。NAG 引入"前瞻"机制,在预估的下一步位置处计算梯度。

更新规则

与 Momentum 的关键区别

Momentum

NAG

梯度计算位置

当前参数

预估位置

前瞻能力

收敛速度

更快

效果:防止走过头(overshooting),对 RNN 等序列模型性能提升显著。


3.3 Adagrad

动机:解决"统一学习率无法适应稀疏特征"问题——对频繁更新的参数降低学习率,对稀疏参数提高学习率。

更新规则(逐参数):

其中 是对角矩阵, 为历史梯度平方累加, 为数值稳定项。

优点

  • • 自动适应每个参数的学习率,无需手动调整
  • • 对稀疏梯度(NLP、推荐系统)效果极佳
  • • 在 Google 大规模神经网络(YouTube 猫咪识别)、GloVe 词向量训练中验证有效

致命缺陷: 单调递增,分母不断累积增大,导致学习率单调递减直至趋于 0,模型停止学习


3.4 Adadelta

动机:修复 Adagrad 的学习率消失问题,同时消除手动设置学习率的需要。

核心思想:用梯度平方的指数加权移动平均替代全量累加:

参数更新向量

其中 ,分子的 通过参数更新的指数移动平均估计。

最大亮点:更新规则中完全消除了手动设置的学习率,单位也与参数量纲一致。


3.5 RMSprop

来源:Geoff Hinton 在 Coursera 课程(Lecture 6e)中提出,与 Adadelta 独立同期发展。

更新规则(与 Adadelta 第一步等价):

推荐默认值:,

与 Adadelta 的区别:RMSprop 保留了手动学习率,Adadelta 用参数更新的 RMS 替代了分子中的 ,两者在其他方面基本等价。


3.6 Adam(Adaptive Moment Estimation)⭐ 当前最主流

动机:在 RMSprop 的基础上,同时引入动量机制,并对偏差进行校正。

更新规则

第一步:计算梯度的一阶矩(均值)和二阶矩(方差)的指数移动平均:

(动量项)

(梯度平方项)

第二步:偏差校正(初始阶段 偏向 0,需要校正):

第三步:参数更新:

推荐默认值:,,,

为何 Adam 最主流

  • • 结合了 Momentum(加速收敛)和 RMSprop(自适应学习率)的优点
  • • 偏差校正在训练初期尤为关键
  • • 几乎不需要调参,默认值在大多数场景下表现优异
  • • 梯度变稀疏时(训练后期)的表现优于 RMSprop

3.7 AdaMax

原理:将 Adam 中基于 范数的梯度缩放推广到 范数:

特点: 范数数值更稳定,无需对 做偏差校正。推荐默认值:,,。


3.8 Nadam(Nesterov-accelerated Adam)

原理:将 NAG 的"前瞻动量"引入 Adam,用当前动量估计 替代前一步估计 :

效果:综合了 Adam 的自适应学习率和 NAG 的前瞻性动量,收敛速度通常优于 Adam。


四、算法行为可视化对比

文章提供了两组可视化对比,直观展现各算法的优劣:

4.1 在 Beale 函数损失曲面上的路径

  • Adagrad、Adadelta、RMSprop:立即朝正确方向移动,快速收敛
  • Momentum、NAG:初期偏向惯性方向"走弯路",但 NAG 因前瞻性能更快纠正方向

4.2 在鞍点处的表现

  • SGD:几乎无法自主逃脱鞍点
  • Momentum、NAG:最终能逃脱,但速度慢
  • Adagrad、RMSprop、Adadelta:迅速沿负曲率方向下降,有效逃离鞍点

结论:自适应学习率方法(Adagrad 系列、Adam)对鞍点问题的鲁棒性远优于纯动量方法。


五、优化器选择指南

场景

推荐算法

理由

通用深度学习(首选)

Adam

综合最优,几乎无需调参

稀疏特征(NLP/推荐)

Adagrad / Adam

自适应处理不同频次的梯度

追求泛化极限

SGD + Momentum + 退火

最终泛化性能有时优于自适应方法

无需手调学习率

Adadelta

更新规则中无 η

训练 RNN

Nadam / NAG

前瞻动量效果显著

嵌入稀疏梯度

Adagrad / AdaMax

处理高维稀疏梯度更稳定

⚠️ 重要补充:近年大量论文(尤其是图像分类领域的 SOTA 工作)仍使用带动量的 SGD + 学习率退火,因为其在充分训练后泛化能力往往优于 Adam。实践中建议两者都试。


六、并行与分布式 SGD 策略

方法

机构

核心思想

适用场景

Hogwild!

CMU

无锁并行 SGD,允许 CPU 无锁读写共享内存

数据稀疏场景

Downpour SGD

Google

异步多副本训练,通过参数服务器同步

大规模分布式

Delay-tolerant SGD

Google

AdaGrad 扩展,适应通信延迟

异步分布式

TensorFlow

Google

计算图按设备切分,Send/Receive 通信

通用分布式框架

EASGD

NYU

弹性力链接各工作节点,增加参数空间探索

异步 SGD 改进


七、进阶训练技巧

7.1 数据打乱与课程学习

  • 每 epoch 打乱数据:避免样本顺序引入偏差,是 SGD 的基本实践
  • 课程学习(Curriculum Learning):对于复杂任务,按难度从易到难呈现样本,可显著改善收敛,在 LSTM 程序评估任务中被验证有效

7.2 批归一化(Batch Normalization)

随着训练进行,每层的输入分布发生漂移(内部协变量偏移)。Batch Norm 在每个 mini-batch 上重新归一化激活值,并将该操作纳入模型结构参与反向传播。

效果

  • • 允许使用更大的学习率
  • • 对参数初始化的敏感性降低
  • • 具有正则化效果,可减少甚至替代 Dropout

7.3 早停(Early Stopping)

"Early stopping is a beautiful free lunch." —— Geoff Hinton

监控验证集误差,在其不再下降时提前停止训练。是防止过拟合最简单有效的方法之一。

7.4 梯度噪声注入

在每步梯度更新中添加高斯噪声:

方差按调度衰减:

作用:帮助深层、复杂网络逃离鞍点和较差的局部极小值,提升对糟糕初始化的鲁棒性。


八、算法横向对比总结

算法

自适应学习率

动量

偏差校正

需调学习率

适合稀疏

SGD

Momentum

NAG

✅前瞻

Adagrad

可默认

Adadelta

❌无需

RMSprop

Adam

可默认

AdaMax

✅∞范数

部分

可默认

Nadam

✅前瞻

可默认


九、延伸阅读与参考

本文引用的核心文献:

  • Adam:Kingma & Ba, Adam: A Method for Stochastic Optimization, ICLR 2015
  • Adagrad:Duchi et al., Adaptive Subgradient Methods, JMLR 2011
  • Adadelta:Zeiler, ADADELTA: An Adaptive Learning Rate Method, arXiv 2012
  • Batch Normalization:Ioffe & Szegedy, arXiv 2015
  • Nadam:Dozat, Incorporating Nesterov Momentum into Adam, ICLR Workshop 2016
  • Hogwild!:Niu et al., NIPS 2011
  • Curriculum Learning:Bengio et al., ICML 2009

结语

这篇综述的价值在于帮助你理解每种算法解决了什么问题、引入了什么新问题、在什么条件下会失效。真正掌握优化算法的工程师,能在训练出现问题时——无论是收敛过慢、震荡发散还是过拟合——迅速定位根因并针对性调整策略。

理解算法,而非依赖算法。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DrugIntel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 从 SGD 到 Adam,一文读懂神经网络优化算法的前世今生
  • 导读
  • 一、梯度下降的三种变体
    • 1.1 批量梯度下降(Batch Gradient Descent)
    • 1.2 随机梯度下降(Stochastic Gradient Descent, SGD)
    • 1.3 小批量梯度下降(Mini-batch Gradient Descent)⭐ 实践首选
  • 二、训练中的五大核心挑战
    • 2.1 学习率难以选择
    • 2.2 学习率调度的局限
    • 2.3 各参数梯度尺度差异
    • 2.4 鞍点问题(Saddle Points)
    • 2.5 梯度消失与病态曲率
  • 三、八大主流优化算法详解
    • 3.1 Momentum(动量法)
    • 3.2 Nesterov Accelerated Gradient(NAG)
    • 3.3 Adagrad
    • 3.4 Adadelta
    • 3.5 RMSprop
    • 3.6 Adam(Adaptive Moment Estimation)⭐ 当前最主流
    • 3.7 AdaMax
    • 3.8 Nadam(Nesterov-accelerated Adam)
  • 四、算法行为可视化对比
    • 4.1 在 Beale 函数损失曲面上的路径
    • 4.2 在鞍点处的表现
  • 五、优化器选择指南
  • 六、并行与分布式 SGD 策略
  • 七、进阶训练技巧
    • 7.1 数据打乱与课程学习
    • 7.2 批归一化(Batch Normalization)
    • 7.3 早停(Early Stopping)
    • 7.4 梯度噪声注入
  • 八、算法横向对比总结
  • 九、延伸阅读与参考
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档