学习大数据集
一、随机梯度下降
首先来看批量梯度下降:
然后对所有样本同时进行更新参数(注意求和的标记),
对于随机梯度下降定义:
过程:
1、随机打乱数据集
2、遍历每个样本1…m,分别对每个样本进行参数更新
(后面部分是每个样本cost对 Θ \Theta Θ的偏导,不是总体训练误差的偏导)
【注意】这里和批量梯度下降不同,这里是对每个样本进行更新,而不是所有样本同时更新。就避免爆内存。也就是用第一个样本进行参数更新,然后再利用第二个样本去更新参数,使得 Θ \Theta Θ一直在拟合每一个样本,从而达到拟合全部样本的目的。
因此在迭代过程中,批量梯度下降是始终朝着最优解的方向去的;而随机梯度下降,由于是拟合每一个样本,因此会出现:拟合第一个样本时,朝着最优解方向去;拟合第二个样本时,又反方向了;第三个时,又好了…这样随机迂回的,但是总体趋势还是朝着最优解方向去的。
可以发现随机梯度下降比批量梯度下降更快(当训练集很大很大时),因为一般来说只需对整个训练集遍历一次就差不多可以到达全局最小,如果不够就再遍历一次;但是对于批量梯度下降,每次更新参数都要所有样本一起,因此数量一大就很慢。
二、mini-batch梯度下降
批量梯度下降:每次更新参数需要所有样本
随机梯度下降:每次更新参数只需一个样本
mini-batch梯度下降:每个更新需要b个参数,b就是mini-batch大小。
例如,b=10,那么,
可以发现,更新参数需要有几个样本,式子里就有求和以及平均。
同样的,我们可以知道mini-batch会比批量梯度下降更快(因为每次只需要b个样本就可以更新参数)。而对于随机梯度下降,mini-batch会更好的原因是向量化。有向量化的存在,可以使b个样本同时运行,而速度和一个样本是一样的,但是总体遍历次数减少了(批量梯度下降不太能用向量化,因为样本数量太多太多时,向量维度没有这么大)。
三、随机梯度下降收敛 + 选择合适的学习率
批量梯度下降检查收敛:
1、计算 J t r a i n ( Θ ) J_{train}(\Theta) Jtrain