吴恩达机器学习 Machine Learning Week_10学习笔记

随机梯度下降

普通的梯度下降法公式如下:
θj=θjα1mi=1m(hθ(x(i))y(i))xj(i)\theta_j=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}这种算法又被称为批量梯度下降法,在这种算法下,每完成一次梯度下降都需要对所有的样本进行求和,如果样本数据过大,则会使得计算机负载过大,运算速度减慢。当面对大规模的样本数据时,此种算法显然不再适用,因此,提出一种新的梯度下降算法:随机梯度下降

随机梯度下降算法:
首先定义每一个训练样本的成本如下:cost(θ,(x(i),y(i)))=12(hθ(x(i))y(i))2cost(\theta,(x^{(i)},y^{(i)}))=\frac{1}{2}(h_{\theta}(x^{(i)})-y^{(i)})^2
整个样本数据组的成本函数如下:Jtrain(θ)=1mi=1mcost(θ,(x(i),y(i)))J_{train}(\theta)=\frac{1}{m}\sum_{i=1}^{m}cost(\theta,(x^{(i)},y^{(i)}))
随机梯度下降算法计算过程如下:
1.随机排列所有样本数据
2.Repeat
{
  \space\space  \space\spacefor i=1,…,m
  \space\space  \space\space{
θj=θjα(hθ(x(i))y(i))xj(i)\theta_j=\theta_j-\alpha(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}  \space\space  \space\space}
}
第二步中Repeat的次数可以根据具体样本数据的多少选择1-10中任一个数,样本数据量大时通常选一次。
值得注意的是这种算法每次的迭代优化过程只考虑一个样本数据,每次更新的参数可能使得成本函数达到局部最小值而非全局最小值,但经过大量的迭代后,该算法仍然可以收敛于全局最小值附近。通常在算法收敛至全局最小值附近的区域时,我们就可以认为我们的计算结果已经达到了最优。

小批量梯度下降算法

批量梯度下降算法:在每次迭代中考虑所有样本数据。
随机梯度下降算法:在每次迭代中考虑一个样本数据。
小批量梯度下降算法:在每次迭代中考虑b个样本数据(1<b<m)。
b为小批量梯度下降算法的规模,每次计算b个数据,通常取b在2-100之间。该算法计算过程如下:
Repeat
{
  \space\space  \space\spacefor i=1,…,m
  \space\space  \space\space{
θj=θjα1bk=ii+b1(hθ(x(k))y(k))xj(k)\theta_j=\theta_j-\alpha\frac{1}{b}\sum_{k=i}^{i+b-1}(h_{\theta}(x^{(k)})-y^{(k)})x_j^{(k)}  \space\space  \space\space}
}
这种算法较随机梯度下降算法每次迭代时考虑的样本数据更多,优化收敛的效果也更好。

随机梯度算法的调试

如果我们想要观察某个算法在迭代过程中是否收敛,最好的方法是绘制学习曲线,观察代价函数的值随着迭代次数的增加如何变化。在随机梯度下降算法中,我们重新定义了该算法的代价函数为:Jtrain(θ)=1mi=1mcost(θ,(x(i),y(i)))J_{train}(\theta)=\frac{1}{m}\sum_{i=1}^{m}cost(\theta,(x^{(i)},y^{(i)}))由上式可知,每次计算代价函数时都需要对所有的样本成本函数进行求和取平均,这显然并不是一个高效的方法。因此,我们提出了一个新的方法来对随机梯度算法进行调试。
在随机梯度下降中,我们在每一次更新 ???? 之前都计算一次代价,然后每????次迭代后,求出这????次对训练实例计算代价的平均值,然后绘制这些平均值与????次迭代的次数之间的函数图表。
可能的情况如下所示:
吴恩达机器学习 Machine Learning Week_10学习笔记