第 17 章 大规模机器学习
这一章讨论当训练集非常大时,如何更高效地训练模型。重点包括随机梯度下降、小批量梯度下降、在线学习和数据并行。
17.1 大型数据集的学习
大数据不一定总是有用。训练大规模模型前,应该先判断模型是否处于高方差状态。
如果模型高偏差,增加更多数据通常帮助有限。
如果模型高方差,增加数据可能显著改善泛化能力。
17.2 随机梯度下降法
批量梯度下降每次更新都要遍历所有训练样本。当 m 很大时,单次更新就很慢。
随机梯度下降每次只用一个训练样本更新参数。
流程:
- 随机打乱训练集。
- 依次取一个样本。
- 用这个样本计算梯度并更新参数。
- 重复多轮。
随机梯度下降不会像批量梯度下降那样平滑下降,而是在最小值附近波动。
17.3 小批量梯度下降
小批量梯度下降介于批量梯度下降和随机梯度下降之间。
每次使用 b 个样本更新参数。
text
b = 10
b = 100小批量方法可以利用向量化计算,通常比单样本随机梯度下降更高效。
17.4 随机梯度下降收敛
监控随机梯度下降时,可以每隔一段时间计算最近若干样本的平均代价。
如果代价整体下降,说明学习率可能合适。
如果代价震荡很大或上升,可能需要减小学习率。
有时可以让学习率随迭代逐渐减小,使算法后期更稳定。
17.5 在线学习
在线学习适合数据流持续到来的场景。
例如网站不断有用户访问,每来一个样本,就用它更新一次模型,然后可以丢弃该样本。
在线学习适合:
- 数据量很大。
- 数据分布随时间变化。
- 系统需要持续适应新用户行为。
17.6 映射化简和数据并行
当数据和计算量很大时,可以把任务分给多台机器或多个处理核心。
MapReduce 的思想:
- 把数据分成多个子集。
- 每个机器计算一部分结果。
- 汇总所有机器的结果。
很多机器学习算法中的求和运算都可以并行化,例如批量梯度下降中对所有样本的梯度求和。