机器学习(二十三)- Large Scale Machine Learning

来源:互联网 发布:淘宝男士羽绒服加厚 编辑:程序博客网 时间:2024/05/17 22:52

Gradient Descent with Large Datasets

我们之前也有提到过,对于机器学习任务来说,有时候数据量的大小会很大程度上决定我们模型的好坏。这里需要提及的是,假设我们现在有1亿的数据量,为了节约时间,我们最好先使用其中很少的数据(如1000条)进行模型检测,画出learning curve,来判断我们模型是否存在high bias的问题。如果我们的模型呈现出左下图,那么说明增大数据量是有意义的。
这里写图片描述

Batch Gradient Descent

批量梯度下降就是我们之前所有运用梯度下降的时候所运用的梯度下降算法,所谓批量就是我们每次梯度更新都要遍历我们训练集的所有数据,然后选出一个最优的梯度方向,这样就能保证我们每次的参数更新都是朝着一个局部最优解去的。但是当数据量增大,批量梯度下降算法将会非常缓慢,想象一下我有300,000,000的数据,每更新一小步就要遍历300,000,000。显然这就太耗时了。于是引入下面新的梯度下降算法。
这里写图片描述

Stochastic Gradient Descent

随机梯度下降随着数据量的增大将大大快于批量梯度下降算法。对于随机梯度下降算法,首先我们需要随机shuffle我们的训练集,保证相邻训练数据的非相关性和随机性。然后再进行梯度下降,所谓随机就是每次参数更新我们只使用一个数据,好了,这下你也知道它为什么快了,批量梯度花费300,000,000次计算走了一小步,而随机梯度已经走了300,000,000步了(理想情况),虽然每一次梯度下降的方向我们是没法保证朝着最优解去的,但是随着次数的增大,它会缓慢地向最优解移动,并最终在最优解附近徘徊(虽然它不会像批量梯度一样严格收敛于一点,但是最终在最优解附近徘徊已经非常接近最优解了,是可以达到实际要求的),如下图右。最终综合起来比较,在面临大数据上,随机梯度下降算法是要优于批量梯度的。最后提一点,随机梯度下降算法其实是个两层的循环,最外层的循环一般选取1-10。
这里写图片描述

Mini-Batch Gradient Descent

接下来,我们再讲解一种梯度下降变体,在实际应用中,它可能比随机梯度下降还要快速,也就是mini-batch梯度下降,其实它的核心思想就是将批量梯度和随机梯度结合起来,批量梯度每次参数更新使用所有训练集的数据,随机梯度每次使用一个数据,那么批量梯度自然是折中,每次使用 b 个数据。Andrew Ng提出一般 b 我们选取2-100。那么它更快的原因是什么呢,是向量化,在实际算法中,我们往往采用向量化的方式表示,这样大大提高并行运算的速度,而且优化了每次参数更新的方向。而批量梯度不能采用向量化计算是因为数据量维度过于庞大,同样会导致计算的缓慢。但mini-batch的劣势在于,它又引入了一个参数 b ,于是我们需要设定一个参数。同样地,我们使用验证集来取一个最优参数。
这里写图片描述

Stochastic Gradient Descent Convergence

对于梯度下降来说,我们是需要验证我们的算法是否,那么验证的方法就是画出目标函数对于迭代次数的折线图,如果一路下降达到收敛说明算法是正确的。那么对于批量下降来说,如果数据量巨大,每迭代完一次就需要计算一次目标函数,这个计算量是很大的。而对于随机梯度来说,在每次参数更新之前,我们计算接下来要使用的样本的代价函数值,然后每1000次迭代,我们提取这1000次的代价函数值求平均作为我们的参考依据。
这里写图片描述
对于随机梯度下降算法来说,代价函数对于迭代次数的折线图会呈现锯齿状,所取平均的次数越多,曲线会越平滑,我们需要看的是整体趋势,整体呈现下降趋势且慢慢收敛说明算法生效。
这里写图片描述

最后讲解一下对于随机梯度下降来说,学习率的选取。由于随机梯度下降最终会收敛在最优解的附近,并在最优解附近反复徘徊,但是不会停止于最优解,为了解决这个问题,我们可以随着迭代次数调小我们的学习率,这样最终它就会停止于最优解的位置。
这里写图片描述

阅读全文
0 0