机器学习公开课笔记(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。

posted @ 2016-01-26 16:12  python27  阅读(1950)  评论(0编辑  收藏  举报