核心要点

  • 梯度下降沿损失对参数的梯度反方向更新:θ ← θ − η·∇L,η 为学习率

  • 学习率太大会震荡/发散,太小则收敛慢、易卡浅处;常配合 warmup 与衰减调度。

  • SGD 用 mini-batch 估梯度,噪声大但快;Momentum 累积历史梯度抑制震荡、加速。

  • Adam 结合 Momentum 与 RMSprop,为每个参数维护自适应学习率,是深度学习默认起点。

简要回答

梯度下降每次按损失对参数的梯度反方向走一小步;SGD 用随机 mini-batch 估梯度,噪声大但快;Adam 为每个参数维护自适应学习率,适合深度学习默认优化器。

标准回答

基本原理

梯度指向损失上升最快的方向,沿其反方向更新参数就能下降:θ ← θ − η·∇L(θ),η 是学习率。

三类方法

  • 批量梯度下降(BGD):每步用全量数据算梯度,方向准、稳定,但每步成本高、大数据不可行。
  • 随机梯度下降(SGD):每步用一个 mini-batch 估梯度,更新快、噪声有助于跳出浅局部最优,但收敛轨迹震荡。
  • Adam:在 SGD 基础上叠加动量(一阶矩)与 RMSprop(二阶矩),为每个参数自适应调学习率,收敛快、对学习率不敏感,是默认起点。

学习率与调度

学习率过大会震荡甚至发散,过小则训练缓慢。实践常用 warmup(前期缓启)+ cosine/step decay(后期降速)来兼顾稳定与收敛。

常见误区

⚠️ 常见踩坑

别把「SGD」说成「每次只用一个样本」——现代 SGD 几乎都是 mini-batch。另一个误区是认为 Adam 永远优于 SGD:在 CV 分类等任务上充分调参的 SGD+Momentum 泛化常更好,且 Adam 的权重衰减实现有坑,规范做法是用 AdamWweight decay 与梯度解耦。

追问

追问 1为什么深度学习很少用 BGD?

全量 BGD 每步需遍历整个训练集,大模型/大数据上每轮更新成本极高;且全量梯度平滑,难以逃离浅鞍点、不利于泛化。实践用 mini-batch SGD 在噪声梯度下反而有助跳出局部最优,配合学习率调度与 AdamW 等优化器效率更高。

追问 2Adam 在什么场景不如 SGD?

部分 CV 任务(ResNet、检测)在充分调参后 SGD+Momentum 泛化略优;极小 batch 或需精确复现论文 baseline 时 SGD 更可控。Adam 自适应学习率有时在训练末期震荡,可切换 SGD fine-tune。

追问 3梯度消失/爆炸如何影响优化?

消失时深层几乎学不到信号,RNN/深 MLP 难训练;爆炸时权重 NaN、训练崩溃。对策:ReLU/GELU、残差连接LayerNorm、梯度裁剪、合适初始化(Xavier/He)与归一化层。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。