机器学习15 大规模机器学习

17 大规模机器学习

内容:
17.1 大型数据集学习
17.2 随机梯度下降法
17.3 小批量梯度下降
17.4 随机梯度下降收敛
17.5 在线学习
17.6 映射化简和数据并行

17.1 大型数据集学习

如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果。我们应怎样应对一个有 100 万条记录的训练集?
以线性回归模型为例,每一次梯度下降迭代,我们都需要计算训练集的误差的平方和,如果我们的学习算法需要有 20 次迭代,这便已经是非常大的计算代价。

首先应该做的事是去检查一个这么大规模的训练集是否真的必要,也许我们只用 1000个训练集也能获得较好的效果,我们可以绘制学习曲线来帮助判断。

17.2 随机梯度下降法

  1. 引入原因
    当训练及规模很大时,梯度下降将会运行的很慢,每次都遍历整个数据集,收敛要遍历好多次。
  2. 随机梯度下降法原理

    定义代价函数为一个单一训练实例的代价

过程:
首先对训练集随机洗牌,然后:


随机梯度下降算法在每一次计算之后便更新参数 ,而不需要首先将所有的训练集求和,在梯度下降算法还没有完成一次迭代时,随机梯度下降算法便已经走出了很远。但是这样的算法存在的问题是,不是每一步都是朝着”正确”的方向迈出的。因此算法虽然会逐渐走向全局最小值的位置,但是可能无法站到那个最小值的那一点,而是在最小值点附近徘徊。

17.3 小批量梯度下降

小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算常数次训练实例,便更新一次参数 。


通常我们会令 在 2-100 之间。这样做的好处在于,我们可以用向量化的方式来循环 个训练实例,如果我们用的线性代数函数库比较好,能够支持平行处理,那么算法的总体表现将不受影响(与随机梯度下降相同)。

17.4 随机梯度下降收敛

**介绍随机梯度下降算法的调试,以及学习率 的选取。 **
在批量梯度下降中,我们可以令代价函数为迭代次数的函数,绘制图表,根据图表来判断梯度下降是否收敛。但是,在大规模的训练集的情况下,这是不现实的,因为计算代价太大了。
在随机梯度下降中,我们在每一次更新 之前都计算一次代价,然后每次迭代后,求出这次对训练实例计算代价的平均值,然后绘制这些平均值与次迭代的次数之间的函数图表。



当我们绘制这样的图表时,可能会得到一个颠簸不平但是不会明显减少的函数图像(如上面左下图中蓝线所示)。我们可以增加来使得函数更加平缓,也许便能看出下降的趋势了(如上面左下图中红线所示);或者可能函数图表仍然是颠簸不平且不下降的(如洋红色线所示),那么我们的模型本身可能存在一些错误。
如果我们得到的曲线如上面右下方所示,不断地上升,那么我们可能会需要选择一个较小的学习率。

我们也可以令学习率随着迭代次数的增加而减小,例如令:

随着我们不断地靠近全局最小值,通过减小学习率,我们迫使算法收敛而非在最小值附近徘徊。 但是通常我们不需要这样做便能有非常好的效果了,对进行调整所耗费的计算通常不值得

17.5 在线学习

  1. 背景
    假使我们正在经营一家物流公司,每当一个用户询问从地点 A 至地点 B 的快递费用时,我们给用户一个报价,该用户可能选择接受( = 1)或不接受( = 0)。
    现在,我们希望构建一个模型,来预测用户接受报价使用我们的物流服务的可能性。因此报价 是我们的一个特征,其他特征为距离,起始地点,目标地点以及特定的用户数据。模型的输出是:( = 1)。
  2. 特点
    连续学习,不会使用一个固定的数据集,通常是获取一个用户样本,从这个样本中学习,然后丢弃样本并继续。
    一个优点就是,如果你有一个变化的用户群,又或者你在尝试预测的事情,在缓慢变化,就像你的用户的品味在缓慢变化
  3. 算法

    在线学习的算法与随机梯度下降算法有些类似,我们对单一的实例进行学习,而非对一个提前定义的训练集进行循环。

你可能感兴趣的:(机器学习15 大规模机器学习)