机器学习公开课笔记(10):大规模机器学习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习公开课笔记(10):大规模机器学习相关的知识,希望对你有一定的参考价值。
批梯度下降 (Batch Gradient Descent)
以线性回归为例,用梯度下降算法进行参数更新的公式为$$\theta_j=\theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$$可以看到每次参数更新一次,都需要将整个训练集扫描一遍,所以称为批梯度下降,这种更新方式对于参数集很大的集合(例如m=100,000,000)运行速度十分慢,为了加快算法运行速度,提出了随机梯度下降。
随机梯度下降 (Stochastic Gradient Descent)
每次仅用一个example来更新参数$\theta$,仍以线性回归为例,随机梯度下降算法为
1. 随机重排列整个训练集(shuffle)
2. 重复下列过程多次(数据集较大时可以重复1~10次)
for i = 1, ..., m {
$\theta_j=\theta_j-\alpha(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$
}
小批梯度下降 (Mini-Batch Gradient Descent)
介于批梯度下降和随机梯度下降之间,批梯度处理利用全部m个example进行参数更新;随机梯度下降只用1个example进行参数更新;而Mini梯度下降使用b(1<b<m)个example进行参数更新。仍以线性回归为例,加入我们有m=1000个example,我们可以用每b=10个example进行参数更新,例如:
Repeat {
for i = 1, 11, 21, ..., 991 {
$\theta_j=\theta_j-\alpha\frac{1}{10}\sum\limits_{k=i}^{i+9}(h_\theta(x^{(k)})-y^{(k)})x_j^{(k)}$
}
}
算法收敛性
批梯度处理能够保证算法收敛到最小值(如果选择的学习速率$\alpha$合适的话),可以plot代价函数$J(\theta)$随迭代次数的曲线,如果曲线是总是下降的,则能够收敛,反之需要调整学习速率。
随机梯度下降并不能保证算法收敛到最小值,最终结果可能是在最小值附近来回游走,为了观察其收敛特性,可以plot每100(1000)次迭代时100个example代价函数函数$\text{cost}(\theta,(x^{(i)}, y^{(i)}))$的平均值,如果是下降趋势,则可以收敛,否则可能需要调整增大或者减小平均的example数(将100改为1000或者10等),减小或者增大学习速率。
在线学习 (Online Learning)
之前的算法都是有一个固定的训练集来训练模型,当模型训练好后对未来的example进行分类、回归等。在线学习则不同,它对每个新来的example进行模型参数更新,因此不需要固定的训练集,参数更新的方式则是采用随机梯度下降。在线学习的优势是模型参数可以随用户的偏好自适应的进行调整,以logistic回归为例,在线学习方式如下:
Repeat forever {
1. 获取当前example (x, y)
2. 使用(x,y)进行参数更新:$\theta_j=\theta_j-\alpha(h_\theta(x)-y)x_j$
}
MapReduce和数据并行化
这部分内容Andrew Ng讲得不多,可以认为仅仅讲了多个机器的求和问题,比如如何求解1+2+3+...+1000?Map过程:四个机器分别计算1+2+...+250,251+252+...+500, 501+502...+750,751+752+...+1000,然后Reduce过程:将四个机器求和的结果sum1,sum2,sum3,sum4汇总到一台机器上,计算sum1+sum2+sum3+sum4。
以上是关于机器学习公开课笔记(10):大规模机器学习的主要内容,如果未能解决你的问题,请参考以下文章
斯坦福公开课-机器学习2.监督学习应用-梯度下降(吴恩达 Andrew Ng)
线性回归梯度下降 - Andrew Ng机器学习公开课笔记1.1