大规模机器学习
数据集完整性检验
对于大规模的数据,如果直接将其用于机器学习,每一次迭代的计算代价都非常大,所以我们需要事先检验训练集的完整性
简单单说就是随机选取其中的部分数据,做出学习曲线,来帮助我们判断
如果是如左图所示的高方差情况,那说明增加训练集数据是对拟合模型有帮助的
如果如右图所示,两条曲线已经接近贴合在一起,那我们不认为增加数据集的数量对模型拟合有帮助
随机梯度下降算法
定义代价函数为对单一的训练例子的代价:
算法解释
先将训练集随机打乱,然后对训练集中的每个用例重复梯度下降的操作
通常情况下这个大循环,即遍历整个训练集的次数为1-10次
算法优劣
优点:相对于批量梯度下降来说,大大提升了运算速度
缺点:并不会直接走向全局全局最优解,而是以一种迂回曲折的路线靠近,而且最终的走向只是靠经最优值,而不会站在最优值那个电上,不过在应用层面来说也足够了
判断收敛
不再像批量梯度下降一样,每次的代价函数针对整个训练集
而是在每次训练下一个样例之前,先算出它的单个代价函数
然后一般是每1000个取一次均值做出图像
理想的情况如图一,红线是选择了更小的学习速率α
图二的红线是每5000次取一次均值,所以更加平滑
图三蓝线的毛刺太多,红线每5000次取均值更加平滑,也能看出下降趋势
图四曲线上升说明函数发散了,需要选择更小的学习速率α
关于α的选择
因为我们最终的值实在最优值附近徘徊,所以如果我们能做到,当参数逼近最优值时,降低学习速率,可能结果更逼近最优值
iterationNumber是已经训练过的样例数量
这样的缺点是还需要花时间调整两个参数的值
Mini-Batch 梯度下降
小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算常数次b训练实例,便更新一次参数θ
b的范围在2-100之间,一般取10
如果向量化做得够好的话,该算法的速度比批量梯度优化和随机梯度优化更快
在线学习机制
这个和随机梯度下降也非常的类似
对于不断进入的数据流,对单个数据进行学习,一旦对一个数据的学习完成了,我们便可以丢弃该数据,不需要再存储它了。
这种方式的好处在于,我们的算法可以很好的适应用户的倾向性,算法可以针对用户的当前行为不断地更新模型以适应该用户。
映射化简
Map Reduce
简单来说如果代价函数和偏导可以写成求和项的形式,那我们可以将数据集分成n份,分别发给不同的计算机,最后再在中心服务器上将其汇总,这样可以节约大量时间
另外,运用多核CPU的不同内核也可以在一台计算机上实现该操作