一句话定义:随机梯度下降(Stochastic Gradient Descent, SGD)是一种优化方法——每次只随机抽一小批数据,估个大概的梯度就立刻更新参数。它流行的原因不只是"快",更因为"估得不准"这件事本身带来了好处。
原理
训练模型,就是在参数空间里找一组让损失(loss)最小的取值。最直白的做法是批量梯度下降:把全部数据跑一遍,算出精确梯度,再走一步。数据量大时,算一次要走很久。
SGD 改用小批量(mini-batch,比如几十条样本):用这一批算出的梯度当作全量梯度的近似,立刻更新一次,然后换下一批。
打个比方:下山。批量梯度下降是站在山顶摊开精密地图,算准最陡方向再迈一步——稳,但每迈一步都要重新勘测全山。SGD 是蒙着眼凭脚下感觉走:每一步方向都偏一点,但走得飞快。而关键恰恰在于"偏"。
噪声为什么是好事
用一小批样本估梯度,等于在真实梯度上叠了一层随机噪声。损失函数的"地形"里,极小值大致分两类:又窄又深的尖锐极小值,和宽阔平缓的平坦极小值。
- 落在尖锐深坑里:坑壁陡,噪声轻轻一推就把参数顶出坑外,于是继续往外走——尖锐解留不住它。
- 落在平坦谷地里:梯度小、谷底宽,噪声即使推出去一点,梯度又会温和地拉回来,参数待得稳。
所以 SGD 会系统性地偏向平坦极小值。而平坦解通常泛化更好:换一批测试数据,损失不会突然暴涨;尖锐解则把训练数据抠得太死,数据稍有偏移就露馅。
注意,噪声不是乱走:下降方向仍由梯度主导,噪声是叠加其上的扰动,相当于"有方向的探索"。
和相邻概念的区别
| 方法 | 每次用多少数据 | 梯度特点 | 典型表现 |
|---|---|---|---|
| 批量梯度下降 | 全部 | 精确、无噪声 | 稳定但慢,容易停在尖锐解 |
| 小批量 SGD | 一小批 | 有噪声 | 快,偏好平坦解,泛化常更好 |
| 加动量 SGD | 一小批 | 噪声 + 惯性 | 沿一致方向加速,抑制来回震荡 |
| Adam 等自适应方法 | 一小批 | 噪声 + 逐参数步长 | 收敛快、调参省心 |
动量(Momentum)是在 SGD 之上加"惯性";Adam 这类方法则是在小批量梯度估计的基础上再自动调步长——底层都是那批带噪声的样本。
实际意义
对从业者:批量大小(batch size)不只是显存和速度的旋钮。批量越小,梯度噪声越大,正则化味道越浓;批量开得很大,训练可能"太安静",容易滑向尖锐解,通常要配合调大学习率等手段。学习率先大后小地衰减,对应的正是"先靠噪声大胆探索,再安静收敛"。
对普通人:这套逻辑可以迁移——用带噪声的小步快跑,代替等一个完美方案。快速试错、容忍偏差,反而更容易避开那种看起来最优、一碰就碎的选择。具体实现和默认参数,以各框架官方文档为准。
