简要回答
梯度下降每次按损失对参数的梯度反方向走一小步;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 的权重衰减实现有坑,规范做法是用 AdamW 把 weight decay 与梯度解耦。
追问
追问 1:为什么深度学习很少用 BGD?
全量 BGD 每步需遍历整个训练集,大模型/大数据上每轮更新成本极高;且全量梯度平滑,难以逃离浅鞍点、不利于泛化。实践用 mini-batch SGD 在噪声梯度下反而有助跳出局部最优,配合学习率调度与 AdamW 等优化器效率更高。
追问 2:Adam 在什么场景不如 SGD?
部分 CV 任务(ResNet、检测)在充分调参后 SGD+Momentum 泛化略优;极小 batch 或需精确复现论文 baseline 时 SGD 更可控。Adam 自适应学习率有时在训练末期震荡,可切换 SGD fine-tune。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
📖 术语表
📰 AI 资讯