700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 入门机器学习(二十一)--大规模机器学习(Large Scale Machine Learning)

入门机器学习(二十一)--大规模机器学习(Large Scale Machine Learning)

时间:2018-12-08 22:20:14

相关推荐

入门机器学习(二十一)--大规模机器学习(Large Scale Machine Learning)

大规模机器学习(Large Scale Machine Learning)

1. 大型数据集的学习(Learning With Large Datasets)2. 随机梯度下降法(Stochastic Gradient Descent)3. 小批量梯度下降(Mini-Batch Gradient Descent)4. 随机梯度下降收敛(Stochastic Gradient Descent Convergence)5. 在线学习(Online Learning)6. 映射化简和数据并行(Map Reduce and Data Parallelism)

1. 大型数据集的学习(Learning With Large Datasets)

如果我们对比现在的算法和五年前的算法,很可能得出的结论是现在的算法比五年前的算法要优异的多,这是因为现在的数据集越来越大的原因。机器学习算法的结果和训练集的关系之前就有涉及过,下图所示是训练集的大小和算法精确度的关系,可以很明显地看到算法的强度和数据集的大小有很强的正相关关系。

如果我们有一个特别大的数据集怎么办呢?比如我们有一个1000万的数据集,如果用下图所示的线性回归中的梯度下降法,那么对于计算能力的要求是非常高的。

如果我们有一个大的数据集,我们应该先绘制学习曲线来帮助我没能判断是否需要这么多数据:

如果我们的学习曲线是左图所示的,那么数据集越大,算法的运行效果越好;如果我们的学习曲线是如右图所示的,那么1000的数据集和1000万的数据集的结果其实差别不大,我们就没有必要一定要用大的数据集来训练模型了、

2. 随机梯度下降法(Stochastic Gradient Descent)

我们先回顾一下梯度下降法,其算法过程如下所示:

梯度下降的示意图如下所示,方向是沿着下降最快的方向。

但时如果数据量很大,那么利用梯度下降法的计算量将会非常大,下降速度会很慢,所以我们尝试使用随机梯度下降法来代替梯度下降法。在随机梯度下降法中,我们定义代价函数为一个单一训练实例的代价:

随机梯度下降法为:首先对训练集随机“洗牌”,然后:

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

3. 小批量梯度下降(Mini-Batch Gradient Descent)

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

一般来说,b是介于2~100的数(通常是10),这么做的好处在于,我们可以用向量化的方法来循环b个训练实例,如果我们用的线性代数函数库比较好,能够支持平行处理,那么算法的总体表现将不受影响(与随机梯度下降相同)。如果b的值选择合适的话,Mini-Batch的方法的运行速度可能比批量梯度下降和随机梯度下降的速度更快。

4. 随机梯度下降收敛(Stochastic Gradient Descent Convergence)

这一部分我们介绍随机梯度下降算法的调试,以及学习率α\alphaα的选择。在批量梯度下降中,我们可以令代价函数J为迭代次数的函数,绘制图表,根据图表来判断梯度下降是否收敛。但是,在大规模的训练集的情况下,这是不现实的因为计算代价很大。

在随机梯度下降中,我们每一次更新θ\thetaθ之前都计算一次代价,然后每x次迭代后,求出这x次对训练实例计算代价的平均值,然后绘制这些平均值与x次迭代的次数之间的函数图表。

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

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

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

5. 在线学习(Online Learning)

这一部分讨论的一种新的大规模机器学习机制,称为在线机器学习。在很多大型网站上,都部署了很多在线学习机制算法,从大流量的用户数据中进行学习和模型训练。下面就举个例子来说明什么是在线学习:

假设有一个快递公司网站,用户可以访问网站然后选择快递的寄件地址和收件地址,网站会给出相应的快递运输的价格,用户有时会接受这个价格,这就是正样本,有时会拒绝这个价格然后走点,这是一个负样本,所以我们希望有一个学习算法能帮助我们根据这些样本来优化快递的服务价格。也就是说,对于每一个用户,网站希望能在不将数据存储到数据库中便顺利地进行算法学习,每增加一个用户,我们就根据这个样本来更新我们的模型,然后更新完毕,这个样本就被抛弃了,并不会存储起来,这就是在线学习机制。

假设我们正在经营一家快递公司,每当一个用户询问从A到B的快递费用时,我们给用户一个报价,该用户可能选择接受(y=1)或者拒绝(y=0)。现在我们希望构建一个模型,来预测用户接受报价使用我们的物流服务的可能性。因此报价是我们的一个特征,其他特征为距离,起始地点,目标地点以及特定的用户数据。模型的输出是:p(y=1)p(y=1)p(y=1)

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

从算法中可以看出,在线学习是对每一个新的数据进行学习,一旦学习完毕,就可以丢弃该数据,不需要存储它了。这种方式的好处在于,我们的算法可以很好的适应用户的倾向性,算法可以针对用户的当前行为不断地更新模型以适应该用户。这就是在线学习机制,我们所使用的这个算法与随机梯度下降算法非常类似,位移的区别是,我们不会使用一个固定的数据集,我们要做的是获取一个用户样本,从那个样本中学习,然后丢弃那个样本并继续下去,而且如果你对某一种应用有连续的数据流,在线学习算法非常适用。当然,在线学习的一个优点就是,如果你有一个变化的用户群,又或者你在尝试预测的事情在缓慢变化,就想你的用户品味在缓慢变化,这个在线学习算法可以慢慢地调试你所学习到的假设,将调节更新到最新的用户行为。

6. 映射化简和数据并行(Map Reduce and Data Parallelism)

映射化简和数据并行对于大规模数据机器学习而言是非常重要的概念。如果我们用批量梯度下降算法来对大规模数据进行求解,我们需要对整个训练集进行循环,计算偏导数和代价再求和,计算代价非常大。如果我们能够将我们的数据集分配给多台计算机,让每一台计算机处理数据集的一个子集,然后我们将计算的结果汇总在求和。这样的方法叫做映射简化。具体而言,如果任何机器学习算法能够表达为,对训练集的函数求和,那么就可以将这个任务分配给多个计算机,已达到加速处理的目的。

例如我们有400个训练实例,我们可以将批量梯度下降的求和任务分配给4台计算机进行处理:

很多高级的线性代数函数库已经能够利用多核CPU的多个核心来进行并行地处理矩阵运算,这也是算法的向量化实现如此重要的原因。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。