Coursera机器学习(Andrew Ng)笔记:大规模机器学习

来源:互联网 发布:mac开机进入客人用户 编辑:程序博客网 时间:2024/05/22 11:52

大规模机器学习 Large Scale ML

机器学习初学者,原本是写来自己看的,写的比较随意。难免有错误,还请大家批评指正!对其中不清楚的地方可以留言,我会及时更正修改

当我们的算法在m较小的情况下表现为高方差时,通过增大数据集可以改善性能。该方法在高偏差时显然是行不通的。目前来看,我们得到的数据集很容易达到上亿级别,每次梯度计算都对上亿个数据集进行计算显然是不现实的。因此,我们需要使用下面章节的算法来提高算法的性能。

随机梯度下降 Stochastic Gradient Descent

随机梯度下降与批(batch)梯度下降相比,算法的执行更有效率,更适用于大批量数据。随机梯度下降的思想是,在每一步的迭代中,不考虑全部的样本,只考虑一个训练样本。随机梯度下降的第一步是随机打乱已有的样本数据,算法过程是对m个训练样本进行遍历,按照公式进行更新。如下:
Repeat {
for i:=1,,m{
θj:=θjα(hθ(x(i))y(i))x(i)j
}
}
在进行随机梯度下降的过程中,参数总体上是朝着全局最小值的方向被更新的,看起来它是以某个比较随机迂回的路径在朝全局最小值逼近。实际上,随机梯度下降是在靠近某个全局最小值的附近徘徊,而不是像批量梯度下降那样直接逼近全局最小值并停留在那点。如下图,其中,紫红色的线可以理解为随机梯度下降的过程:
这里写图片描述
另外需要注意的是,在遍历m个样本的外层还有一个循环Repeat项,该层循环执行的次数取决于样本数量的大小,通常1次就够了,最多10次。

小批量梯度下降

小批量梯度下降介于随机梯度下降和批量梯度下降之间,它每次迭代使用b个样本,b的标准取值在2-100之间,典型值为10。算法示例如下(假设b=10,m=1000):
Repeat {
for i:=1,11,21,31,,991{
θj:=θjα110i+9k=i(hθ(x(k))y(k))x(k)j
}
}

收敛判断

在批量梯度下降算法中,我们在每次迭代前计算Jtrain(θ),并画出它的曲线,从而判断其是否收敛。但在随记梯度下降中,我们使用不同的方法,这里的代价函数变成cost(θ,(x(i),y(i)))=12(hθ(x(i))y(i))2,在每次更新θ之前,都计算一次cost(θ,(x(i),y(i))),每进行1000次迭代,我们就把这1000次样本的cost进行平均,再画出相应的曲线。
这里写图片描述
在左上角的图形中,红色线使用了更小的学习速率,虽然考试下降的慢,但最终更趋近于最小值;在右上角的图中,红色线使用了5000个样本点的平均,线变得更加平滑,但显得过于滞后;在左下角的图中,算法看起来并没有下降,说明学习过程出了问题,需要调整参数或特征;右下角的图形,代价结果开始发散,说明要使用更小的学习速率。
如果想让随机梯度算法更接近于全局最小值,可以使用渐变的学习速率,随迭代次数而减小。如让α=const1iternums+const2,这时的下降曲线变成了类似下面的样子。
这里写图片描述

在线学习Online Learning

随着用户访问网站数量的激增,我们可以接连不断的收集用户数据,构造特征x与结果y。在线学习是指,我们运行一个无穷循环,使用每次收集到的(x,y)来更新我们的参数θ,类似于随机梯度下降的形式。

映射约减和数据并行 Map Reduce & Data Parallelism

在计算代价函数时,我们可以把样本平均分成z份,分别交给z台计算机进行计算,最后再将z个结果合并起来,从而实现数据并行。这种情况下,每台机器的计算内容变成i=pq(hθ(x(i))y(i))x(i)j
维度约减是说将所有这些分批后得到的数据再组合进行计算:
Θj:=Θjα1z(temp(1)j+temp(2)j++temp(z)j)
如果学习算法可以表达成这种某些函数的和的形式,就可以进行维度约减,之前学习的线性回归和逻辑回归都很容易进行并行化。
对于神经网络来说,可以在很多机器上分别计算前向和后向传播,最后再在主机上进行合并。

Summary Tips

要想获得一个高效的机器学习系统,其中一个可靠的方法是选择一个低偏差的学习算法,然后使用一个巨大的训练集来训练它

1 0
原创粉丝点击