学习笔记-Large scale machine learning

来源:互联网 发布:熊猫智能采集软件 编辑:程序博客网 时间:2024/05/01 12:28

终于来到了倒数第二周,这章的主要内容是怎样应对超大样本量的机器学习项目,例如训练集有500万个样本。
之前我们曾提到,有时候样本量的多少决定了一个模型的好坏,当样本量达到一定数量级时,应用不同算法获得的结果差不多。有句名言“最后获胜的人往往是那些拥有最多数据量的人,而不是那些拥有最好算法的人”
这里写图片描述
当然不断增多训练样本量不总是有效,我们需要有评价标准告诉我们在何种情况下,增大样本量会带来益处。对于下面的左图情况,增加样本量还会带来好处;但是右图的情况告诉我们再增加样本量也不会有帮助了,你或者可以考虑增加特征变量了。
这里写图片描述

1. Stochastic gradient descent

Stochastic gradient descent是梯度下降的一种特殊形式。
以我们之前学习过的应用在线性回归中梯度下降算法为例,在每一轮更新参数时,计算每个参数的梯度过程中,都需要有一个求和步骤,如下图红框所示。对于超大级别的训练集,单这一次求和就要花费巨量的时间和资源;考虑到需要迭代很多步,这样会导致计算过程消耗巨大。
这里写图片描述
我们把上面这种每次迭代用到了所有训练集的梯度下降算法称为Batch gradient descent;与之相对的是Stochastic gradient descent方法,每次迭代过程只用一个训练样本,总共迭代m(总训练样本量)次。
这里写图片描述
每次应用Stochastic gradient descent方法时,首先需要随机打乱训练集样本的顺序,然后重复10次1到m的迭代过程。
需要说明的是,由于Stochastic gradient descent每次迭代只用一个样本,因此对整个训练集而言,并不总是在朝着梯度下降的方向走,整个梯度下降路线可以说是在逶迤前行,并且终点常只是落在局部最小值附近。

这里写图片描述

2. Mini-batch gradient descent

Stochastic gradient descent在每次迭代过程中只使用一个训练样本,与之相对的Mini-batch gradient descent在每次迭代过程中只使用一小批(如b个)训练样本,因此总共需要迭代m/b次。
这里写图片描述

如果在mini-batch gradient descent 的计算过程中,合理地使用矩阵运算,其运行总用时将大大小于Stochastic gradient descent。并且mini-batch 的梯度下降过程也将不会像Stochastic 那样过于波折。
这里写图片描述

3. Stochastic gradient descent convergence

在运行梯度下降算法的计算过程中,常需要确保损失函数是收敛的。
对于batch gradient descent算法来说,可以通过绘制损失值与迭代次数的图形,判断是否收敛;
而对于Stochastic gradient descent算法来说,可以以1000次为间隔,绘制最近1000个样本的平均损失值。
这里写图片描述
通过图形直观地判断训练过程中的损失函数是否收敛。
这里写图片描述

为了应对训练过程的后期损失函数无法快速收敛的情况,可以设置学习速率逐渐变小。这样就能够避免训练后期波动过大的情况。
这里写图片描述

4. Online learning

在线学习适合那些模型需要随时根据实际情况不断变化的情景。
这里写图片描述
例如:商品搜索
这里写图片描述

5. Map-reduce and data parallelism

在大型的机器学习项目中,还需要考虑怎样分派计算任务和并行计算。
例如需要分别计算400个样本的预测值与目标值的差异,则可以将每100个样本的计算任务分配一台电脑,共分配4台电脑。这样可以大大减少运行总耗时。
这里写图片描述
对于多核计算机,也可以将任务分配到不同核上,实现并行计算。
这里写图片描述

注:如无特殊说明,以上所有图片均截选自吴恩达在Coursera开设的机器学习课程的课件ppt.

阅读全文
0 0