训练与优化 / 优化器 原理笔记入门 3 分钟阅读 查看源文件 ↗

SGD 与 Momentum#

TL;DR#

本页内容7 个部分

1. 背景与问题#

训练集给出很多样本,但每更新一次参数就计算全量梯度,成本会随数据量增长。随机梯度下降(Stochastic Gradient Descent,SGD)改用一小批样本估计梯度,让训练可以在有限计算下持续更新。

问题随之变成:一次小批量梯度应该怎样作用于参数?相邻批次的方向来回摆动时,能否把此前的信息也用起来?

2. 目标与定义#

设参数为 θ\theta,单样本损失为 ℓ(θ;x,y)\ell(\theta;x,y)。希望降低数据分布上的平均损失:

L(θ)=E(x,y)∼Pdata[ℓ(θ;x,y)].\mathcal L(\theta)=\mathbb E_{(x,y)\sim P_{\mathrm{data}}}[\ell(\theta;x,y)].

第 tt 步在当前参数 θt−1\theta_{t-1} 上,对含 BB 个样本的 batch 求平均梯度:

gt=1B∑i=1B∇θℓ(θt−1;xi,yi).g_t=\frac1B\sum_{i=1}^B\nabla_\theta\ell(\theta_{t-1};x_i,y_i).

独立、同分布采样且可交换期望与求导时,E[gt∣θt−1]=∇L(θt−1)\mathbb E[g_t\mid\theta_{t-1}]=\nabla\mathcal L(\theta_{t-1})。这里区分总体梯度和单批估计;一次估计可能偏离总体方向。

3. 方法与推导#

3.1 为什么沿负梯度更新#

先看确定的梯度 g=∇L(θ)g=\nabla\mathcal L(\theta)。在足够小的邻域内,一阶展开给出:

L(θ−ηg)≈L(θ)−η⟨∇L(θ),g⟩=L(θ)−η∥g∥22.\mathcal L(\theta-\eta g)\approx\mathcal L(\theta)-\eta\langle\nabla\mathcal L(\theta),g\rangle=\mathcal L(\theta)-\eta\|g\|_2^2.

η>0\eta>0 是学习率。把完整梯度换成 batch 估计,得到 SGD 更新 θt=θt−1−ηgt\theta_t=\theta_{t-1}-\eta g_t。负号负责降低局部损失,学习率控制全局步幅;随机估计与高阶项使单步下降不再有无条件保证。[1]

3.2 Momentum 怎样累积方向#

为减少相邻 batch 的来回摆动,引入动量状态 utu_t,从 u0=0u_0=0 开始:

ut=βut−1+gt,θt=θt−1−ηut,0≤β<1.u_t=\beta u_{t-1}+g_t,\qquad\theta_t=\theta_{t-1}-\eta u_t,\qquad0\le\beta<1.

展开递推,ut=∑k=1tβt−kgku_t=\sum_{k=1}^t\beta^{t-k}g_k。同向梯度累积,反向梯度部分抵消;越久以前的贡献越小。这里采用不含 (1−β)(1-\beta) 的约定;若改写为指数移动平均,需要同步换算学习率。[1]

4. 计算过程#

固定输入优化器的两步梯度 g1=2,g2=−1g_1=2,g_2=-1,从 θ0=2\theta_0=2 出发,取 η=0.1\eta=0.1、β=0.9\beta=0.9。这组输入用于比较更新规则,不表示不同优化器在真实训练中会产生相同梯度轨迹。

步数 当前梯度 普通 SGD 的参数 动量状态 带动量的参数
1 2 2−0.1×2=1.82-0.1\times2=1.8 u1=2u_1=2 1.8
2 −1 1.8+0.1=1.91.8+0.1=1.9 u2=0.9×2−1=0.8u_2=0.9\times2-1=0.8 1.8−0.08=1.721.8-0.08=1.72

第二步当前梯度已为负,普通 SGD 转向增加参数;动量仍为正,参数继续减小。这既展示了方向平滑,也展示了滞后。

5. 比较与边界#

Momentum 增加一份参数大小的历史状态,缓和方向摆动,但没有消除不同坐标的尺度差异。相同设置下,把整段梯度乘 c>0c>0,SGD 与上述动量更新也放大 cc 倍;逐坐标归一化由 Adam进一步处理。

陡峭方向可能限制可用步长,学习率仍需选择。上述局部展开也不等于非凸训练的收敛证明。

参考资料#

  1. Deep Learning,Chapter 8(2016). §8.3:小批量 SGD、Momentum 与更新约定。

延伸阅读#

  • Muon 原理:对整张动量矩阵做谱变换,与逐坐标缩放有什么区别?
  • 学习率调度:学习率为什么随训练阶段变化?
  • AdamW:为什么 Adam 中的 L2 惩罚与权重衰减需要区分?

相关阅读路线

完成一次训练更新 ↗理解优化器 ↗