SGD(随机梯度下降)
SGD小批量一点点更新
亦作、亦称:随机梯度下降 · Stochastic Gradient Descent
随机梯度下降(SGD)是深度学习中最基础、也最重要的参数优化方法,通过每次仅用一个样本或小批量数据估计梯度来迭代更新模型权重。它的随机性不仅大幅降低了每步的计算成本,还在实践中帮助模型跳出局部极小值,成为现代神经网络训练的核心驱动力。
概述
SGD 是梯度下降的随机化变体,以「每次只看一小批数据」换取更高的更新频率和更低的内存压力。
- 核心公式:θ ← θ − η · ∇L(θ; x_i, y_i),其中 η 为学习率,梯度仅在一个或一批样本上计算
- 批量大小:从单样本(纯随机 SGD)到数百条(Mini-batch SGD),实践中最常用 Mini-batch 形式
- 随机性的双面性:梯度估计含噪声,既会让损失曲线抖动,也有助于逃离平坦区和尖锐极小值
- 计算效率:对比全量梯度下降(GD),每步计算量大幅减少,适合超大规模数据集
- 基础地位:Adam、AdamW 等现代优化器均以 SGD 为理论基础,理解 SGD 是读懂优化器文献的前提
工作原理
SGD 每轮训练将数据集随机打乱,按批次依次计算损失与梯度并更新参数。
- 前向传播:用当前参数对小批量数据计算预测值与损失
- 反向传播:通过链式法则将损失对每个参数求偏导,得到梯度向量
- 参数更新:沿梯度反方向按学习率幅度更新参数,即「向损失曲面最陡方向往下走一步」
- Epoch 循环:遍历完整数据集一次称为一个 Epoch,SGD 在每个 Epoch 内完成多次参数更新
- 学习率调度:固定学习率通常效果欠佳,实践中常搭配余弦退火、线性 Warmup 等策略动态调整
类型与变体
在基础 SGD 之上发展出多种改进变体,用于解决收敛速度慢或梯度震荡问题。
- SGD + Momentum:引入动量项(Polyak,1964 年提出重球法)积累历史梯度方向,减少震荡、加速收敛
- Nesterov Momentum(NAG):先用动量「向前看一步」再计算梯度,在凸函数上可达最优收敛率
- AdaGrad:为每个参数独立累积历史梯度平方,自适应调整学习率,适合稀疏特征
- RMSProp:用指数移动平均代替 AdaGrad 的全量累积,防止学习率过快衰减至零
- Adam / AdamW:结合 Momentum 与 RMSProp 思想,目前最主流的优化器;AdamW 额外将 Weight Decay 从梯度更新中解耦,实现更规范的正则化
应用场景
SGD 及其变体几乎贯穿所有深度学习训练任务。
- 大规模语言模型预训练:GPT、LLaMA 等采用 AdamW(SGD 的进化形式)在数万亿 Token 上训练
- 计算机视觉:ResNet、ViT 等图像模型的原始论文大量使用带 Momentum 的 SGD,泛化性能往往优于 Adam
- 微调(Fine-tuning):SFT、RLHF 等对齐阶段均依赖 SGD 系优化器调整预训练权重
- 在线学习:单样本 SGD 可在数据流中实时更新模型,适用于推荐系统等动态场景
- 联邦学习:各客户端本地执行 SGD 更新后上传梯度或模型差值,同时保护数据隐私
与相邻概念的区别
SGD 与多个相近术语常被混淆,以下对比厘清边界。
- SGD vs 梯度下降(GD):GD 每步用全量数据计算精确梯度,更新稳定但计算量大;SGD 用小批量估计,快但有噪声
- SGD vs Adam:SGD 学习率固定(需手动调度),Adam 为每个参数自适应调整学习率;视觉任务 SGD 有时泛化更好,NLP 任务 Adam 系更主流
- SGD vs 二阶优化(如 L-BFGS):二阶方法利用曲率信息收敛更快,但计算 Hessian 代价极高,难以扩展到亿级参数模型
- Mini-batch SGD vs 纯随机 SGD:「纯随机」指每次单样本,「Mini-batch」指每次若干样本;现代深度学习几乎专指 Mini-batch 形式
- SGD vs 学习率调度器:调度器不是优化器本身,而是控制 SGD/Adam 学习率随训练进程动态变化的策略模块
局限与常见误区
理解 SGD 的局限有助于在实际训练中做出更合理的选择。
- 超参数敏感:学习率、Momentum 系数、批量大小需仔细调优,选错会导致发散或收敛极慢
- 各向异性问题:不同参数梯度尺度差异大时,统一学习率难以同时适配,Adam 的自适应机制正是为此而生
- 鞍点停滞:高维非凸损失面中梯度可能在鞍点附近接近零,随机性只能部分缓解这一问题
- 误区:SGD 已过时:带 Momentum + Warmup + 余弦调度的 SGD 在图像分类等任务中仍与 Adam 持平甚至更优
- 误区:批量越大越好:过大批量降低了随机性,可能导致泛化性能下降(「泛化鸿沟」现象)
发展脉络
从统计学的随机逼近理论到现代大模型训练,SGD 经历了七十余年的演化。
- 1951:Robbins & Monro 提出随机逼近算法,奠定 SGD 数学基础
- 1964:Polyak 提出重球动量法(Heavy-ball method),为 SGD+Momentum 提供理论支撑
- 1983:Nesterov 提出加速梯度法,NAG 随后被引入深度学习优化器
- 1986:Rumelhart、Hinton、Williams 将反向传播与梯度下降结合,推动神经网络实用化
- 1998:LeCun 等人在 LeNet-5 论文中系统使用 Mini-batch SGD,验证其在图像任务的有效性
- 2011:Duchi 等人提出 AdaGrad,开启自适应学习率优化器时代
- 2012:AlexNet 用带 Momentum 的 SGD 大幅刷新 ImageNet 记录,引爆深度学习热潮
- 2014/2015:Kingma & Ba 提出 Adam,成为最广泛使用的 SGD 变体
- 2017 年起:大规模 Transformer 训练使 AdamW 成为 LLM 标配优化器
常见误解
日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。
- 「小批量一点点更新」
- 「深度学习优化器的祖宗」
- 「用噪声梯度训练模型」
相关术语
和本术语关联紧密的其他词条,便于串联理解。
🎯 考点练习
含该术语的高频面试题,含标准答案与追问。
- 初级概念高频查看详解 →
梯度下降的原理是什么?SGD 和 Adam 有什么区别?
沿损失梯度反方向更新参数;SGD 用 mini-batch 估计梯度,Adam 自适应学习率,收敛更快更稳。
- 中级概念查看详解 →
在线学习与增量学习是什么?适用什么场景?
数据流式到达、模型逐步更新,无需重训全量;需应对灾难性遗忘、概念漂移与稳定性-可塑性权衡。
- 中级概念高频查看详解 →
Batch Size 的大小对训练有什么影响?BGD/SGD/MBGD 如何选?
大 batch 梯度准、训练稳、并行快但泛化可能差且占显存;小 batch 噪声大有正则效果但慢;MBGD 是主流折中。
- 中级概念查看详解 →
梯度累积(Gradient Accumulation)如何模拟大 batch?
把一个大 batch 拆成多个小 batch,分别前向反向累加梯度,累够再统一 step,等效大 batch 而省显存。
延伸阅读
从知识库精选 3 篇文章,帮助深入理解该术语。
外部参考
维基百科:查看「SGD」词条本页内容为本站原创撰写;维基百科链接仅作延伸参考。
