十七、大规模机器学习
17.1 大型数据集的学习
大型数据集的学习带来的是计算问题;
本章学习如何处理上亿级别的大型数据集;
17.2 随机梯度下降法
本节问题:
- 随机梯度对比于普通梯度下降法,改进在哪?
批量梯度下降:
~~~~~~
默认的是(批量)梯度下降法,Batch Gradient Descent:即每次都要考虑一批(所有)的训练样本这才完成迭代的一步,所以,它的计算复杂度太高;
随机梯度下降:
代价函数为当前样本上的表现;
对每个样本都遍历,遍历时调整θ使图像在该样本处拟合得好一点,cost代价低一点;
每次只关注一个训练样本 ;遍历过程中,虽然很曲折,但也是朝着全局最优前进(偶尔会有例外,因为是随机的 ),它可能在最小值周围徘徊;
也可能不止一次遍历所有样本,但次数不会超过10次;
17.3 随机梯度下降收敛
本节问题:
- 随机梯度下降过程中如何调整参数:学习率α等等,确保正确收敛;
先更新θ前,我们必然会得到当前样本点的cost值;
用若干样本的cost平均值来判断是否收敛;
随着算法进行,迭代次数(遍历的样本数增加),iterationNumber增加,α越来越小;
小的α能让算法更接近最小值;
17.4 小批量梯度下降
Mini-batch,小型的梯度下降;
假设一次处理的小批量为10个样本:
夹在批量梯度下降和随机梯度下降中间,下降路线曲折度没有随机梯度的曲折,计算速度也比批量梯度的快(有时候比随机梯度下降还要好);
缺点就是:要根据小批量样本数的个数B,来确定组数;
17.5 在线学习
从用户身上的数据流上学习;
如果你有源源不断地数据(大量用户涌入网站),那么你就不需要多次使用一个数据了,也没必要标号了,用完就丢;
对不同的用户群体分配不同的方案,杀熟;
比如我有100台手机,当用户搜索1080P时,我要选择性的根据用户群体的不同,列出10台最适合该用户的手机,以最大化可能性促使他购买;;以10步梯度下降法来更新参数;
17.6 映射化简和数据并行
本节问题:
- 了解MapReduce的原理;
- 为什么MapReduce过时了;
比如400个样本的批量梯度下降法,分割成4组,每组100样本,由四台机器并行完成,然后汇总到中心服务器,速度提升四倍(由于网络通信等外部因素,不会刚好提升四倍);
把MapReduce看成一台机器的多核并行,而不是多台机器并行,这样就不用担心网络延迟了,通信传输也需要时间;