1、随机梯度下降法(stochastic gradient descent)
1.1 算法流程
在应用批量梯度下降法(batch gradient descent)时,每次迭代都需要对训练集所有数据进行遍历。在应用大规模数据时,这种计算方法非常耗时。随机梯度下降法每次都最优化一个训练样本,因此可以提高迭代效率。单样本损失函数为:
1)对所有训练样本进行“洗牌”(随机打乱),并初始化参数θ。
2)遍历m个样本(i=1,2,3...,m):对每一个样本i,利用梯度下降最优化该样本i的损失函数,进行一次迭代。
3)是否满足收敛条件,如果不满足,返回2),否则,结束迭代。
与批量梯度下降法相比,随机梯度下降法每次迭代不一定保证向最优化的方向进行,而是会经过多次迭代后,徘徊在最优点附近。
1.2 随机梯度下降收敛
判断随机梯度下降法是否收敛,可以通过计算每k次(比如k=1000)迭代单个样本损失函数的平均值的变化来判断。通常这些平均值与迭代次数之间的关系图如下:
如果曲线震荡幅度大,可以增加k值(比如由1000增加至2000),这时曲线会平滑一些;如果曲线最后不能接近收敛,甚至发散,这时需要减小学习率α。
此外,还可以调正α随着迭代次数增加而减小,比如 α=C1/(T+C2),其中C1,C2为常数,T为迭代次数。但是由于这个方法需要确定C1、C2,因此使模型调式更加复杂。
2、小批量梯度下降法(mini-batch gradient descent)
小批量梯度下降法介于随机梯度下降法与批量梯度下降法之间,思想是每次迭代时最优化b个训练样本。算法流程为:
1)选择每次训练的小批量样本数b
3、在线学习
当存在由于用户流产生的源源不断的数据流时,为了适应变化的数据流,采用类似随机梯度下降的方法,每次优化当前的数据以更新参数,然后丢弃该数据,使用最新的数据再次优化,不停的迭代。
在线学习不需要保存所有数据到数据库中,而且可以针对用户的当前的行为不断改变模型以适应用户。
4、映射化简和数据并行
如果任何学习算法能够表达为,对训练集的函数的求和,那么便能将这个任务分配给多台计算机(或同一台计算机的不同CPU核心),这多台计算机计算结果再发送到中央计算机进行数据汇总,从而可以加速数据处理。这就是mapreduce思想。
例如,我们有400个数据,分发给四台计算机分别执行计算任务,然后将结果汇总到中央计算机进行求和、更新参数。