随机梯度下降
普通的梯度下降法公式如下:
θj=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)这种算法又被称为批量梯度下降法,在这种算法下,每完成一次梯度下降都需要对所有的样本进行求和,如果样本数据过大,则会使得计算机负载过大,运算速度减慢。当面对大规模的样本数据时,此种算法显然不再适用,因此,提出一种新的梯度下降算法:随机梯度下降。
随机梯度下降算法:
首先定义每一个训练样本的成本如下:cost(θ,(x(i),y(i)))=21(hθ(x(i))−y(i))2
整个样本数据组的成本函数如下:Jtrain(θ)=m1i=1∑mcost(θ,(x(i),y(i)))
随机梯度下降算法计算过程如下:
1.随机排列所有样本数据
2.Repeat
{
for i=1,…,m
{
θj=θj−α(hθ(x(i))−y(i))xj(i) }
}
第二步中Repeat的次数可以根据具体样本数据的多少选择1-10中任一个数,样本数据量大时通常选一次。
值得注意的是这种算法每次的迭代优化过程只考虑一个样本数据,每次更新的参数可能使得成本函数达到局部最小值而非全局最小值,但经过大量的迭代后,该算法仍然可以收敛于全局最小值附近。通常在算法收敛至全局最小值附近的区域时,我们就可以认为我们的计算结果已经达到了最优。
小批量梯度下降算法
批量梯度下降算法:在每次迭代中考虑所有样本数据。
随机梯度下降算法:在每次迭代中考虑一个样本数据。
小批量梯度下降算法:在每次迭代中考虑b个样本数据(1<b<m)。
b为小批量梯度下降算法的规模,每次计算b个数据,通常取b在2-100之间。该算法计算过程如下:
Repeat
{
for i=1,…,m
{
θj=θj−αb1k=i∑i+b−1(hθ(x(k))−y(k))xj(k) }
}
这种算法较随机梯度下降算法每次迭代时考虑的样本数据更多,优化收敛的效果也更好。
随机梯度算法的调试
如果我们想要观察某个算法在迭代过程中是否收敛,最好的方法是绘制学习曲线,观察代价函数的值随着迭代次数的增加如何变化。在随机梯度下降算法中,我们重新定义了该算法的代价函数为:Jtrain(θ)=m1i=1∑mcost(θ,(x(i),y(i)))由上式可知,每次计算代价函数时都需要对所有的样本成本函数进行求和取平均,这显然并不是一个高效的方法。因此,我们提出了一个新的方法来对随机梯度算法进行调试。
在随机梯度下降中,我们在每一次更新 ???? 之前都计算一次代价,然后每????次迭代后,求出这????次对训练实例计算代价的平均值,然后绘制这些平均值与????次迭代的次数之间的函数图表。
可能的情况如下所示: