1. 大型数据集的学习
在低方差的模型情况下增加数据集的规模可以帮助获得更好的结果。当数据集很大,是个多达100 万条记录的训练集时的应对方法。如果采用之前学习的批量梯度下降,每一次梯度下降迭代,都需要计算训练集的误差的平方和,计算代价非常大。
面对大规模训练集时,首先应该做的事是:绘制学习曲线来帮助判断去检查这么大规模的训练集是否真的必要。必须要大规模的数据时候,批量梯度下降方法不再适应,需要使用其他的方法。
2. 梯度下降
(1)随机梯度下降
随机梯度下降法每次更新 θj 只会用当前遍历的样本。迭代过程中不像批量梯度下降直接下降到最优,还是曲折波动的。
上图反映了相较于批量梯度下降法,随机梯度下降法的曲线就显得不是那么平滑,而是很曲折了,其也倾向于找到局部最优解而不是全局最优解。因此,需要绘制调试曲线来监控随机梯度的工作过程是否正确。一般每完成 多次(1000)迭代,求取平均误差并进行绘制,得到误差随迭代次数的变化曲线。
遇到曲线波动,无明显下降的时候,并不意味着学习率出了问题,有可能是平均间隔取的太小,当发现明显上升态势的曲线,就需要减小学习率。
另外,学习率 α 还可以随着迭代次数进行优化: α = c o n s t a n t 1 i t e r a t i o n N u m b e r + c o n s t a n t 2 α=\frac {constant1}{iterationNumber+constant2} α=iterationNumber+constant2constant1这样,随着迭代次数的增多,我们的下降步调就会放缓,避免出现抖动
随机梯度下降法工作前,需要先乱序数据集,是的遍历样本的过程更加分散
迭代:
f o r i = 1 , . . . , m : for\quad i=1,...,m: fori=1,...,m:
θ j = θ j − α ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) j , f o r j = 0 , . . . , n \quad \quad \quadθ_j=θj−α(hθ(x(i))−y(i))x(i)j, \quad for \quad j=0,...,n θj=θj−α(hθ(x(i))−y(i))x(i)j,forj=0,...,n
(2)mini-batch
Mini 批量梯度下降法是批量梯度下降法和随机梯度下降法的折中,通过参数 b 指明了每次迭代时,用于更新 θ 的样本数。假定 b=10,m=1000 ,Mini 批量梯度下降法的工作过程如下:
f o r i = 1 , 11 , 21 , . . . 991 : for \quad i=1,11,21,...991: fori=1,11,21,...991:
θ j = θ j − α 1 10 ∑ k = i i + 9 ( h θ ( x Z ( i ) ) − y ( i ) ) x j ( i ) , f o r j = 0 , . . . , n \quad \quad \quadθ_j=θ_j−α\frac{1}{10}\sum_{k=i}^{i+9}(h_θ(xZ^{(i)})−y^{(i)})x^{(i)}_j,for \quad j=0,...,n θj=θj−α101∑k=ii+9(hθ(xZ(i))−y(i))