Batch\Stochastic\Mini-Batch 梯度下降法

梯度下降法存在一些变体, 本文讨论三种,即vanilla(batch),stochastic 和 mini-batch。不同之处在于,我们使用多少数据来计算目标函数的梯度。

1. 批量梯度下降法(Vanilla\Batch Gradient Descent)

Vanilla指的是某一事物标准,通常或者未修改的版本。所以批量梯度下降法就是基本的梯度下降法,即在整个数据集上对每个参数求目标函数的偏导数。

优点:
当目标函数为凸函数,批量梯度下降法必然会在全局最小值处收敛(否则可能会在局部极小值处收敛)
缺点:
每次更新我们都需要在整个数据集上求出所有的偏导数,因此批量梯度下降法的速度比较慢,甚至对于较大的、内存无法容纳的数据集,该方法甚至无法被使用。同时不能“在线”更新模型,也就是不能在运行时加入新的样本进行运算。

2. 随机梯度下降法(Stochastic Gradient Descent)

随机梯度下降法的每次更新,是仅选取数据集的一个样本求梯度。即如下公式。
θ j : = θ j + α ( y ( i ) − h θ ( x 0 ( i ) , x 1 ( i ) . . . , x n ( i ) ) ) x j i \theta_j:=\theta_j+\alpha(y_{(i)}-h_{\theta}(x^{(i)}_0,x^{(i)}_1... ,x^{(i)}_n))x^{i}_j θj:=θj+α(y(i)hθ(x0(i),x1(i)...,xn(i)))xji
优点:
由于每次仅仅采用一个样本来迭代,训练速度很快。同时也能够进行“在线”学习。

缺点:
由于仅仅使用一个样本决定梯度方向,导致解很可能不是最优。对于收敛速度来说,由于随机梯度下降法一次迭代一个样本,导致迭代方向变化很大,不能很快的收敛到局部最优解。

3. 小批量梯度下降法(Mini-Batch Gradient Descent)

小批量梯度下降法集合了上述两种方法的优势,每次更新中,对m个样本构成的一组数据,进行梯度的计算。m远小于整个数据集的总量。
Loop for m times{
θ j : = θ j + α ( y ( i ) − h θ ( x ( i ) ) ) x j i \theta_j:=\theta_j+\alpha(y_{(i)}-h_{\theta}(x^{(i)}))x^{i}_j θj:=θj+α(y(i)hθ(x(i)))xji
}
优点:
降低了更新参数的方差,使得收敛过程更为稳定。能够利用最新的深度学习程序库中高度优化的矩阵运算器,能够高效地求出每小批数据的梯度。小批量梯度下降法,通常是我们训练神经网络的首选算法。

缺点:
需要去寻找合适的批量大小。

参考:
http://ruder.io/optimizing-gradient-descent/

你可能感兴趣的:(机器学习,算法,机器学习)