Skip to content

第 17 章 大规模机器学习

这一章讨论当训练集非常大时,如何更高效地训练模型。重点包括随机梯度下降、小批量梯度下降、在线学习和数据并行。

17.1 大型数据集的学习

大数据不一定总是有用。训练大规模模型前,应该先判断模型是否处于高方差状态。

如果模型高偏差,增加更多数据通常帮助有限。

如果模型高方差,增加数据可能显著改善泛化能力。

17.2 随机梯度下降法

批量梯度下降每次更新都要遍历所有训练样本。当 m 很大时,单次更新就很慢。

随机梯度下降每次只用一个训练样本更新参数。

流程:

  1. 随机打乱训练集。
  2. 依次取一个样本。
  3. 用这个样本计算梯度并更新参数。
  4. 重复多轮。

随机梯度下降不会像批量梯度下降那样平滑下降,而是在最小值附近波动。

17.3 小批量梯度下降

小批量梯度下降介于批量梯度下降和随机梯度下降之间。

每次使用 b 个样本更新参数。

text
b = 10
b = 100

小批量方法可以利用向量化计算,通常比单样本随机梯度下降更高效。

17.4 随机梯度下降收敛

监控随机梯度下降时,可以每隔一段时间计算最近若干样本的平均代价。

如果代价整体下降,说明学习率可能合适。

如果代价震荡很大或上升,可能需要减小学习率。

有时可以让学习率随迭代逐渐减小,使算法后期更稳定。

17.5 在线学习

在线学习适合数据流持续到来的场景。

例如网站不断有用户访问,每来一个样本,就用它更新一次模型,然后可以丢弃该样本。

在线学习适合:

  • 数据量很大。
  • 数据分布随时间变化。
  • 系统需要持续适应新用户行为。

17.6 映射化简和数据并行

当数据和计算量很大时,可以把任务分给多台机器或多个处理核心。

MapReduce 的思想:

  1. 把数据分成多个子集。
  2. 每个机器计算一部分结果。
  3. 汇总所有机器的结果。

很多机器学习算法中的求和运算都可以并行化,例如批量梯度下降中对所有样本的梯度求和。

Powered by VitePress