机器学习数学基础 120 章

随机梯度、小批量与在线学习

层级:A|必学

1. 全量梯度为何不总可行

经验风险

F(θ)=1ni=1ni(θ)F(\theta)=\frac1n\sum_{i=1}^{n}\ell_i(\theta)

的完整梯度要遍历全部数据。数据很大或持续到达时,每次更新都全量计算成本高。随机梯度用一个样本或小批量估计完整梯度,以更频繁、带噪声的更新换取吞吐和可扩展性。

2. SGD 与 mini-batch

单样本 SGD:

θt+1=θtηtit(θt).\theta_{t+1} =\theta_t-\eta_t\nabla\ell_{i_t}(\theta_t).

小批量 BtB_t

gt=1BtiBti(θt),g_t=\frac1{|B_t|}\sum_{i\in B_t} \nabla\ell_i(\theta_t), θt+1=θtηtgt.\theta_{t+1}=\theta_t-\eta_tg_t.

现代语境中的 “SGD” 通常实际指 mini-batch SGD。

3. 无偏性

若样本索引均匀抽取:

E[gtθt]=F(θt).\mathbb E[g_t\mid\theta_t]=\nabla F(\theta_t).

单次方向可能与全量梯度差很大甚至让损失上升,但平均方向正确。无偏不是必要条件,也不保证低方差;某些采样、裁剪和自适应方法会引入可控偏差。

4. 批量大小与方差

在独立近似下,batch 平均梯度方差大致随 1/B1/B 降低;标准差随 1/B1/\sqrt B。但有限数据无放回抽样、样本相关和硬件并行会改变细节。

  • 小 batch:更新频繁、噪声大、内存少;
  • 大 batch:梯度稳定、硬件吞吐好,但每个 epoch 更新次数少;
  • 超大 batch:边际方差收益下降,可能需要学习率调整并影响泛化。

选择应以时间到目标指标、显存和可复现性衡量,不只看每步速度。

5. epoch、step 与 batch

  • batch size BB:一次更新用多少样本;
  • step/iteration:一次参数更新;
  • epoch:大致完整遍历训练集一次;
  • 每 epoch 步数通常约 n/B\lceil n/B\rceil

比较学习率计划时必须知道按 step 还是 epoch 计数。最后一个不足 batch 可能被保留或丢弃。

6. 为什么要打乱数据

若数据按类别、时间或来源排序,连续 batch 可能偏差极大,导致周期震荡和错误 batch normalization 统计。每个 epoch 随机打乱可让 batch 更像总体样本。

但时间序列或在线因果任务不能随意打乱未来到过去;应使用符合部署过程的切分与顺序。

7. 有放回与无放回采样

理论常假设每步独立有放回抽样,分析简单;工程常每 epoch 随机排列、无放回遍历,覆盖均匀且通常表现好。两者梯度依赖结构不同,但无需为了理论形式放弃合理实现。

8. 学习率衰减条件

经典随机逼近中常见条件:

tηt=,tηt2<.\sum_t\eta_t=\infty, \qquad \sum_t\eta_t^2<\infty.

第一条避免总移动量有限而过早停,第二条让噪声累计可控,例如 ηt1/t\eta_t\propto1/t。深度学习有限时长训练常用不同经验计划,不必机械遵循渐近条件。

9. 在线学习

数据流逐个到达,模型即时预测、接收反馈并更新。关注:

  • 每步计算与内存;
  • 概念漂移;
  • 延迟反馈;
  • regret(相对最佳固定决策的累计损失差);
  • 数据顺序与非独立性。

在线学习不等于简单地 batch size=1;它还有时间与反馈协议。

10. 梯度累积

显存不足时,可对 KK 个微批计算梯度并累积,再更新一次,近似大 batch。若每个微批损失取平均,应除以 KK 或正确缩放,否则梯度大 KK 倍。

含 batch normalization、dropout 和优化器 step 相关状态时,微批累积与真正大 batch 不完全相同。

11. 数据并行

多个设备各算本地 batch 梯度,再 all-reduce 求和/平均。要确认:

  • 全局 batch size;
  • 梯度是和还是平均;
  • 学习率按全局 batch 调整;
  • 随机种子与采样器避免重复数据;
  • batch normalization 是本地还是同步。

12. 方差缩减方法

凸有限和问题中,SVRG、SAGA、SAG 等利用历史或周期性全量梯度构造低方差估计,可加速高精度收敛。深度学习中更常用动量、大 batch、控制变量和数据采样策略。

13. 非独立样本与加权

同一用户的多条记录、群组数据或过采样会破坏“每条观测同等独立”的直觉。损失权重和 batch 构造应反映评估单位与抽样机制,否则高活跃用户可能支配训练。

易错点

  1. 随机梯度单步不保证下降。
  2. batch 梯度求和与平均会改变学习率等价尺度。
  3. 训练数据打乱不能破坏时间因果结构。
  4. 梯度累积与真正大 batch 在状态层下不完全等价。
  5. epoch 在流式或动态数据集中可能没有固定含义。

常见问答

Q1:batch 越大梯度越准确,为什么不无限增大?

方差收益递减、内存与通信成本增加、更新次数减少,还可能改变优化轨迹与泛化。应优化端到端时间和最终指标。

Q2:SGD 噪声是好还是坏?

它降低单步精度但提高计算效率,并可能帮助离开某些尖锐区域;过大噪声会妨碍收敛。需要学习率和 batch 平衡。

Q3:类别不平衡应在 batch 内强制均衡吗?

可作为策略,但会改变训练分布,概率输出可能需校准。也可用损失权重、分层采样或任务指标驱动的目标。

练习

  1. 10000 样本、batch 128,每 epoch 约多少 step?
  2. 独立梯度方差为 σ2\sigma^2,batch 平均的理想方差约多少?
  3. 为什么每步 SGD 损失可能上升?
  4. 微批累积 4 次且每次损失已取平均,怎样保持等价大 batch 平均梯度?
  5. 为什么时间序列不能普通随机切分?

答案与提示

  1. 10000/128=79\lceil10000/128\rceil=79
  2. σ2/B\sigma^2/B
  3. 它是带噪估计,只在条件期望上等于全梯度。
  4. 每个微批损失再除以 4,或累计后梯度除以 4。
  5. 会让未来信息进入训练、破坏部署顺序并产生泄漏。