对于大规模数据的机器学习,有两种处理办法:一是随机梯度下降,二是减少映射(MapReduce)。
1.随机梯度下降
1.1随机梯度下降针对每个样本,更新一次参数。基本步骤是先随机打乱样本数据,然后再从头开始,一个样本一个样本训练参数。
1.2批量梯度下降:是对所有样本进行一次遍历,然后再更新一次参数。每次更新参数,都需要读入所有的数据,开销比较大。
1.3Mini-batch梯度下降:选取b个样本,进行运算,更新一次参数。每b个数据更新一次,不用遍历所有数据。并且可以的话,可以通过向量化来实现并行运算,加快速度。效果不错。但是需要确定参数b,会有时间开销。b一般在2~100之间。
2.随机梯度下降的收敛问题:
一般情况下,我们会绘制训练集上的代价函数,看他是不是一直下降的。在随机下降的方法里,我们会对每个进行计算cost函数,然后每1000g个cost函数我们进行一个平均值计算,然后绘制一个cost平均值-迭代次数的曲线,如果是下降的,则是好的。如果是反复抖动或者上升的,我们需要调整我们的学习速率(变小)或者修改特征。
一般情况下,为常数。但是我们也可以定义一个=常数1/(常数2+迭代次数).如此一来,随着迭代次数的增加,会逐渐缩小。但是确定常数1、2需要耗费时间。
3.MapReduce
MapReduce的思想就是通过并行的办法提高效率。比如,把一个训练集分成可以并行运算的几部分,分别运算之后再整合。只要运算可以写成一系列求和的形式,就可以使用MapReduce提升效率。
3.在线学习
在线学习不存储数据集,使用过一个数据样本之后就会直接丢掉,因为他有连续的数据流。