大规模机器学习
大规模是指训练集数据很多,比如有1亿组数据。
大数据
有一句话叫做“最后胜利的人不是因为他有好的算法,而是他用有大量数据”,因为随着数据量的增加,机器学习算法的准确度都会变得很高。
批量梯度下降
先看梯度下降方程,以线性回归为例:
这种方式称之为批量梯度下降,一个 $\theta_j$ 都需要遍历所有数据,如果m = 100,000,000 ,梯度下降会变得很慢。
随机梯度下降
随机不是指随机的选取一些数据来进行梯度下降。
随机下降的Cost Function,只计算一组数据,而不是全部数据:
而在进行梯度下降时,遍历所有数据 $x^{(i)}$ 计算 $\theta$:
幸运的是,通常并不需要遍历全部数据或是遍历一次即可得到比较理想的 $\theta$ 值。
其实这种方式是在逐渐适应遇见的$x^{(i)}$,所以并不能保证$\theta$ 是一直下降的,如果把每次计算的cost画在坐标系中,它会是摆动的:
而且最后会在最优值附加徘徊,但得不到最优值。
最小批量梯度下降
获随即下降的启发,我们可以梯度下降时取 $b$ 组数据而不是一个数据,这样可以获得比随机下降更加快的速度,它的过程如下:
在线学习
在线学习是指使用源源不断获得的数据进行学习。比如你正在经营一个网上商店,那么你可以持续获得用户操作记录,所以训练集的大小是不固定的,而是每天增长的。随机梯度下降很适合这个场景。
映射约减和并行计算
映射约减又叫Map-reduce。假设你现在有5台机器,有4亿的数据量,那么可以把数据拆成四等分,分给4台机器运算,计算结果交个第5台机器,由它来进行汇总。
这个道理也适用于多核cpu:
现在这种方法集成到了一些框架中,例如Hadoop