大规模机器学习
大规模机器学习指的是训练样本数量非常大的情况。
随机梯度下降
我们在用梯度下降求解代价函数的最小值时我们每一次迭代都要让所有数据都参与一次运算,因此我们也将其叫做批梯度下降(batch gradient desent),这样带来的运算量将会非常大
为了解决这个问题,我们可以采用随机梯度下降(stochastic)算法,每次θ更新只将一个数据纳入样本计算,这样相当于每次更新迭代只针对某一个数据进行优化,但是对于整体代价函数不见得每次都朝最小值处衍进,而是一个曲折下降的过程,但是最终可以收敛到最小值附近
另外还有处在批梯度下降和随机梯度下降之间的方法叫做迷你批梯度下降(mini-batch gradient descent),它每次采用b个数据来更新θ,这样使得算法收敛可以更加迅速
收敛性
我们可以通过以下的方式检查随机梯度下降算法的收敛性,例如我们每一千个循环计算上一千个数据的代价函数
可以有以下结果,下图三的情况很可能是取点间隔太近了,如果我们每隔5000个数据计算一次代价函数,可能就很很好看到代价函数下降的过程了。而如果代价函数一直是上升的,代表我们的学习速率太大了
为了让算法收敛速度更快,我们还可以根据算法迭代的次数来自动调整学习速率
在线学习
当我们有源源不断的数据时我们可以让算法在线学习新数据的特征,我们每来一个新的数据后用随机梯度下降算法来减小代价函数,之后把这个数据抛弃,等待下一个数据的到来。这样的好处是能够让算法随时学习数据特征的改变
以下是另外一个例子
Map-reduce
除了随机梯度下降算法,我们还可以采用map-reduce技术来加快算法的收敛,map-reduce说到底就是并行计算,把本来一次需要计算的数据(例如400个)分配到四台机器上,这样理论上算法就能加快四倍
另外一些高级优化也能通过map-reduce加速
除了将计算放到多台机器上,我们还可以放到多个CPU核心上来实现并行计算