一. 大数据集梯度下降
如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果。我们应该怎样应对一个有100万条记录的训练集?
以线性回归模型为例,每一次梯度下降迭代,我们都需要计算训练集的误差的平方和,如果我们的学习算法需要有20次迭代,这便已经是非常大的计算代价。
首先应该做的事是去检查一个这么大规模的训练集是否真的必要,也许我们只用1000个训练集也能获得较好的效果,我们可以绘制学习曲线来帮助判断。
二. 先进的算法
1. 批量梯度下降法(Batch gradient descent)
拥有了大数据,就意味着,我们的算法模型中得面临一个很大的 m 值。回顾到我们的批量梯度下降法:
重复直到收敛:
可以看到,每更新一个参数 ,我们都不得不遍历一遍样本集,在 m 很大时,该算法就显得比较低效。但是,批量梯度下降法能找到全局最优解:
每一步都需要计算所有样本,计算量很多,虽然每一步都是再往最优值的方向前进。
2. 随机梯度下降法(Stochastic gradient descent)
针对大数据集,又引入了随机梯度下降法,该算法的执行过程为:
先随机排列样本。
然后重复直到收敛:
相较于批量梯度下降法,随机梯度下降法每次更新 只会用当前遍历的样本。虽然外层循环仍需要遍历所有样本,但是,往往我们能在样本尚未遍历完时就已经收敛,因此,面临大数据集时,随机梯度下降法性能卓越。
迂回,徘徊地向最小值前进,但是每一个样本走一步,计算量较小。
上图反映了随机梯度下降法找寻最优解的过程,相较于批量梯度下降法,随机梯度下降法的曲线就显得不是那么平滑,而是很曲折了,其也倾向于找到局部最优解而不是全局最优解。因此,我们通常需要绘制调试曲线来监控随机梯度的工作过程是否正确。例如,假定误差定义为 ,则每完成 1000 次迭代,即遍历了 1000 个样本,我们求取平均误差并进行绘制,得到误差随迭代次数的变化曲线:
另外,遇到下面的曲线也不用担心,其并不意味着我们的学习率出了问题,有可能是我们的平均间隔取的太小0
如果,我们每进行 5000 次迭代才进行绘制,那么曲线将更加平滑:
如果我们面临明显上升态势的曲线,就要考虑降低学习率 了:
学习率 还可以随着迭代次数进行优化
随着迭代次数的增多,我们的下降步调就会放缓,避免出现抖动:
随机梯度下降法工作前,需要先随机化乱序数据集,是的遍历样本的过程更加分散。
3. Mini 批量梯度下降法(Mini-batch gradient descent)
Mini 批量梯度下降法是批量梯度下降法和随机梯度下降法的折中,通过参数 b 指明了每次迭代时,用于更新 的样本数。假定 b=10,m=1000 ,Mini 批量梯度下降法的工作过程如下:
重复直到收敛:
三个总结:
批量梯度下降:每一步都使用所有的m个样本
随机梯度下降:每一步仅使用一个样本
小批量梯度下降:每一步使用自己设定的b个样本
4. 在线学习
用户登录了某提供货运服务的网站,输入了货运的发件地址和收件地址,该网站给出了货运报价,用户决定是购买该服务( y=1 )或者是放弃购买该服务( y=0 )。
特征向量 x 包括了收发地址,报价信息,我们想要学习 来最优化报价:
重复直到收敛:
获得关于该用户的样本 (x,y),使用该样本更新 :
这就是在线学习(Online learning),与前面章节提到的机器学习过程不同,在线学习并不需要一个固定的样本集进行学习,而是不断接收样本,不断通过接收到的样本进行学习。因此,在线学习的前提是:我们面临着流动的数据。
5. MapReduce
前面,我们提到了 Mini 批量梯度下降法,假定 b=400,m=400,000,000 ,我们对 的优化就为:
假定我们有 4 个机器(Machine),我们首先通过 Map (映射) 过程来并行计算式中的求和项,每个机器被分配到 100 个样本进行计算:
最后,通过 Reduce(规约)操作进行求和:
我们可以使用多台机器进行 MapReduce,此时,Map 任务被分配到多个机器完成:
也可以使用单机多核心进行 MapReduce,此时,Map 任务被分配到多个 CPU 核心完成: