机器学习数学基础 120 章

动量、自适应学习率与学习率计划

层级:B|按需

1. 为什么在梯度之外保存状态

普通 SGD 只看当前位置梯度,在细长谷地会横向震荡,随机梯度还含噪声。动量积累历史方向,让持续一致的方向加速、来回变号的方向抵消;自适应方法再按坐标历史尺度调整步幅。

2. Heavy-ball 动量

一种常见写法:

vt=βvt1+gt,v_t=\beta v_{t-1}+g_t, θt+1=θtηvt,\theta_{t+1}=\theta_t-\eta v_t,

0β<10\le\beta<1。也有把 (1β)(1-\beta) 乘在梯度上的指数移动平均写法;两者的有效学习率尺度不同,比较公式与代码必须看约定。

展开:

vt=gt+βgt1+β2gt2+.v_t=g_t+\beta g_{t-1}+\beta^2g_{t-2}+\cdots.

越旧梯度权重指数衰减。β=0.9\beta=0.9 的有效记忆尺度约为 1/(1β)=101/(1-\beta)=10 步。

3. 动量直觉

在谷地陡峭横向,梯度符号交替,历史贡献抵消;沿谷底缓慢方向,梯度符号持续,速度累积。它不是物理模拟的精确需要,但“惯性”类比有助理解。

动量会越过极小点,参数可能震荡;合适阻尼与学习率让振幅衰减。学习率太大时动量也会放大发散。

4. Nesterov 动量

Nesterov 方法在“向前看”的位置计算梯度。一种形式:

vt=βvt1ηf(θt+βvt1),v_t=\beta v_{t-1}-\eta \nabla f(\theta_t+\beta v_{t-1}), θt+1=θt+vt.\theta_{t+1}=\theta_t+v_t.

直觉是先按惯性预估位置,再用那里的梯度修正。不同框架实现参数化不同,不要只凭名称复制超参数。

5. AdaGrad

逐坐标累积平方梯度:

st=st1+gtgt,s_t=s_{t-1}+g_t\odot g_t, θt+1=θtηgtst+ϵ.\theta_{t+1} =\theta_t-\eta\frac{g_t}{\sqrt{s_t}+\epsilon}.

频繁出现大梯度的坐标步长逐渐变小,稀疏特征可获得较大相对更新。缺点是 sts_t 单调增大,学习率可能过早衰减到几乎零。

6. RMSProp

用平方梯度指数移动平均代替累积和:

st=ρst1+(1ρ)gt2,s_t=\rho s_{t-1}+(1-\rho)g_t^2, θt+1=θtηgtst+ϵ.\theta_{t+1}= \theta_t-\eta\frac{g_t}{\sqrt{s_t}+\epsilon}.

它能忘记很久以前的尺度,更适合非平稳深度训练。

7. Adam

结合一阶与二阶矩移动平均:

mt=β1mt1+(1β1)gt,m_t=\beta_1m_{t-1}+(1-\beta_1)g_t, vt=β2vt1+(1β2)gt2.v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2.

初始为零会偏小,做偏差修正:

m^t=mt1β1t,v^t=vt1β2t.\hat m_t=\frac{m_t}{1-\beta_1^t}, \qquad \hat v_t=\frac{v_t}{1-\beta_2^t}.

更新:

θt+1=θtetam^tv^t+ϵ.\theta_{t+1}=\theta_t-eta \frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon}.

vtv_t 不是梯度方差,而是未中心化二阶矩估计。

8. AdamW 与权重衰减

在普通 SGD 中,把 L2 正则梯度 λθ\lambda\theta 加入梯度与每步乘 (1ηλ)(1-\eta\lambda) 等价。自适应预条件下两者不再等价,因为正则梯度也被逐坐标缩放。

AdamW 使用解耦权重衰减:

θ(1ηλ)θηm^v^+ϵ.\theta\leftarrow(1-\eta\lambda)\theta -\eta\frac{\hat m}{\sqrt{\hat v}+\epsilon}.

实践中常优于把 L2 项直接加入 Adam 梯度。偏置与归一化尺度通常不做权重衰减,但需按任务验证。

9. 学习率计划

Warmup

前若干步从小值升至目标学习率,缓解初始化早期梯度/统计不稳定,尤其用于大 batch 与 Transformer。

分段衰减

到预设里程碑乘 γ<1\gamma<1,简单可控,但需知道合理训练时长。

余弦退火

ηt=ηmin+12(ηmaxηmin)(1+cosπtT).\eta_t=\eta_{min} +\frac12(\eta_{max}-\eta_{min}) \left(1+\cos\frac{\pi t}{T}\right).

平滑从最大降到最小。可配合 warm restart,但重启是否有利取决于任务。

One-cycle

学习率先升后降,常与动量反向变化。它是有限预算策略而非一般收敛定理。

10. 如何公平比较优化器

至少统一:

  • 模型与初始化;
  • 数据顺序与增强随机性;
  • batch size 与总训练预算;
  • 正则化定义;
  • 学习率搜索范围与计划;
  • 评估最佳/最终 checkpoint 的规则。

用 Adam 默认参数对比精调 SGD,或只比较相同步数而忽略每步成本,都可能误导。

11. 调参顺序

实用顺序:

  1. 确认损失、梯度与数据 pipeline 正确;
  2. 找不发散且进展快的学习率数量级;
  3. 决定 batch 与总步数;
  4. 调权重衰减/正则化;
  5. 再细调动量、β\beta、warmup 和衰减终点。

学习率通常比 Adam 的微小 β\beta 变化更关键。

易错点

  1. 不同文献的动量递推缩放约定不同。
  2. Adam 的二阶状态不是 Hessian,也不是中心方差。
  3. L2 正则与权重衰减在自适应优化器中不等价。
  4. ϵ\epsilon 既防除零,也可能影响低梯度坐标的有效步长。
  5. 优化器更快降低训练损失不保证泛化更好。

常见问答

Q1:Adam 是否总比 SGD 好?

不。Adam 常更易快速训练、对尺度鲁棒;精调的 SGD+动量在某些视觉/泛化任务表现更好。需按时间预算与验证指标选择。

Q2:为什么 bias correction 只在 Adam 初期重要?

βt\beta^ttt 增大趋零,分母 1βt1-\beta^t 趋 1;初始零状态的偏差逐渐消失。

Q3:学习率计划按 epoch 还是 step?

二者都可,但分布式与 batch 改变会改变每 epoch 的 step 数。可复现实验必须明确单位。

练习

  1. 展开动量 vtv_t 的历史梯度权重。
  2. β=0.99\beta=0.99 的粗略记忆尺度是多少?
  3. AdaGrad 为什么可能停止过早?
  4. 解释 AdamW 与把 λθ\lambda\theta 加入 Adam 梯度的差别。
  5. 写出余弦计划在 t=0t=0t=Tt=T 的学习率。

答案与提示

  1. gt+βgt1+β2gt2+g_t+\beta g_{t-1}+\beta^2g_{t-2}+\cdots(对应本章未乘 1β1-\beta 的形式)。
  2. 约 100 步。
  3. 平方梯度累积只增不减,分母持续增大,有效步长趋零。
  4. 前者独立缩放参数,后者的正则项会被逐坐标预条件器缩放。
  5. ηmax\eta_{max}ηmin\eta_{min}