资讯

随机梯度下降 SGD 是什么?每次只看一小批数据就更新一步

2026-11-053 分钟阅读百科
TL;DR随机梯度下降(SGD)是每次只用一个样本或一小批样本估计梯度并更新参数的优化算法,比用全部数据计算梯度的批量梯度下降快得多、适合大规模数据,其噪声还有助于跳出不好的局部区域,常配合动量使用,Adam 等自适应优化器都是在它基础上发展而来。

随机梯度下降(Stochastic Gradient Descent,SGD)是机器学习中最基础、最常用的优化算法之一。它的核心特点是:每次更新模型参数时,不使用全部的训练数据,而是只随机地选取一个样本或一小批样本来计算梯度。这让它在处理海量数据时比传统的梯度下降快得多,几乎所有深度神经网络的训练都基于它或它的改进版本。

从梯度下降说起

训练机器学习模型的过程,就是不断调整参数,让损失函数变得越来越小。梯度下降是完成这件事的基本方法:可以把损失函数想象成一片起伏的山地,我们的目标是找到最低的山谷。梯度指出了当前位置坡度最陡、往上升得最快的方向,那么沿着梯度的反方向走一小步,损失就会下降。不断地重复这个过程,就能一步步走向谷底。每一步走多远,由学习率来控制。

传统的梯度下降,也叫批量梯度下降,在每一步都要用全部的训练数据来计算梯度,这样算出的方向最准确。但当训练数据有几百万甚至几十亿个样本时,每走一步都要把所有数据过一遍,计算量极其巨大,训练会非常缓慢,而且全部数据可能根本无法一次放进内存。

随机梯度下降怎么做

随机梯度下降的想法很简单:既然用全部数据计算梯度太慢,那就只用一部分数据来“估计”梯度。最原始的随机梯度下降每次只随机地选一个样本,用它计算的梯度来更新参数。由于只看了一个样本,这个梯度的方向不一定准确,会有很大的随机波动,就像一个人蒙着眼睛下山,每一步只根据脚下的一小块地面判断方向,走出来的路线是歪歪扭扭的;但总体上,它仍然是朝着山下的方向前进的,而且每一步都非常快。

在实际中最常用的是“小批量随机梯度下降”:每次随机地选取一小批样本,比如 32 个、256 个或者更多,用它们的平均梯度来更新参数。这样既保留了速度快的优点,又让梯度的估计更加稳定,还能充分利用 GPU 并行计算的能力。如今人们说的随机梯度下降,通常指的就是这种小批量的方式。

随机性的意外好处

随机梯度下降的梯度估计带有噪声,这看起来是个缺点,但在训练深度神经网络时,它反而带来了好处。深度网络的损失函数非常复杂,有很多局部的低谷和平坦的区域。批量梯度下降可能会陷在某个不太好的地方出不来;而随机梯度下降的噪声让它有机会“跳”出这些地方,继续寻找更好的解。研究还发现,随机梯度下降倾向于找到损失曲面上比较平坦宽阔的低谷,这样的解往往在新数据上泛化得更好。

历史和改进

随机梯度下降的思想可以追溯到 1951 年赫伯特·罗宾斯和萨顿·门罗提出的随机逼近方法。为了让它更快、更稳定,人们提出了很多改进:学习率调度,在训练过程中逐渐减小学习率,开始时大步前进,接近目标时小步微调;动量法,像一个滚下山坡的球一样积累之前的速度,减少来回的震荡、加快在平缓方向上的前进;以及能够为每个参数自动调整学习率的自适应方法,比如 AdaGrad、RMSProp,以及 2014 年提出的 Adam。Adam 及其改进版本 AdamW 是如今训练大语言模型最常用的优化器,而带动量的随机梯度下降在图像识别等任务上也仍然被广泛使用。