5.4.1 机器学习系统上限分析

在大型机器学习的应用中,通常需要通过几个步骤才能进行最终的预测,一般先通过上限分析知道哪一部分最值得花时间和精力去改善,上限分析是从管道开始的部分,逐级手工提供 100%正确的输出结果,然后看应用的整体效果提升了多少,找出瓶颈。

5.2.2 大规模数据机器学习

通过学习曲线诊断,确定合适大小的训练集

假若应对一个有 100 万条记录的训练集,以线性回归模型为例,每一次梯度下降迭代,都需要计算训练集的误差的平方和,计算代价非常大。</br>
通过绘制学习曲线判定大规模的训练集是否必要,也许只用 1000记录也能获得较好的效果。

采用随机梯度下降法,加快训练速度

Stochastic Gradient Descent—随机梯度下降法

适用场景:

若一定需要一个大规模的训练集,可以尝试使用随机梯度下降法来代替批量梯度下降法。定义单一训练实例的代价函数为:

算法描述:

首先将训练集数据打乱,然后运行随机梯度下降算法,在每一次计算训练实例之后便更新参数 \(θ\),最后根据数据集的大小一般循环执行1-10次。

算法特点:

  • 优点:梯度下降速度快。不需要首先将所有的训练集求和,在每一次计算之后便更新参数\(θ\)。
  • 缺点:可能无法找到最小值点。不是每一步都是朝着”正确”的方向迈出的。因此算法虽然会逐渐走向全局最小值的位置,但是可能无法找到个最小值的那一点,而是在最小值点附近徘徊。
    随机梯度下降过程图

随机梯度下降收敛:

  • 绘制 \(cost(θ,(x^{(i}) , y^{(i)}))\) 曲线判断算法是否收敛:每次对最后 1000 个或多个样本,计算出它们的代价函数平均值;观察曲线,保证正常运转和收敛,也可用它来调整学习速率 \(η\) 的大小。
  • 学习率 \(η\) 随着迭代次数的增加而减小:随着不断地靠近全局最小值,通过减小学习率,迫使算法收敛而非在最小值附近徘徊,但对 \(η\) 进行调整所耗费的计算通常不值得。
    随机梯度下降收敛

采用小批量梯度下降方法,加快训练速度

小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算常数 \(b (bϵ[2,100])\)次训练实例,便更新一次参数 \(θ\).

可以用向量化的方式来循环b个训练实例,如果用的线性代数函数库比较好,能够支持平行处理。梯度下降的速度有时比随机梯度下降还要快。

采用在线学习法

与随机梯度下降算法有些类似,对单一的实例进行学习,而非对一个提前定义的训练集进行循环。一旦对一个数据的学习完成了,便可以丢弃该数据,不需要再存储它了。
算法可以很好的适应用户的倾向性,可以针对用户的当前行为不断地更新模型以适应该用户。
若有一个变化的用户群,又或者在尝试预测的事情,在缓慢变化,就像用户的品味在缓慢变化,可以慢慢地调试所学习到的假设, 将其调节更新到最新的用户行为。

采用分布式并行计算方法

用批量梯度下降算法来求解大规模数据集的最优解,需要对整个训练集进行循环,计算偏导数和代价,再求和,计算代价非常大。可通过在集群或多核CPU上应用Map-reduce,实现并行计算。
分布式数据集划分示例

Map-reduce概念:

  • Map函数将数据分割并映射成不同的区块,分配给计算机机群处理达到分布式运算的效果。
  • Reduce 函数将结果汇整,从而输出开发者需要的结果。

大规模数据集中Map-reduce应用:

  • 将数据集分配给多台计算机,让每一台计算机处理一个数据集子集,然后将结果汇总再求和。
  • 很多高级的线性代数函数库已经能够利用多核 CPU 的多个核心来并行地处理矩阵运算。

集群
多核