Stochastic Gradient Descent vs Batch Gradient Descent vs Mini-batch Gradient Descent

梯度下降是最小化风险函数/损失函数的一种经典常见的方法,下面总结下三种梯度下降算法异同。

1、 批量梯度下降算法(Batch gradient descent)

以线性回归为例,损失函数为

BGD算法核心思想为每次迭代用所有的训练样本来更新Theta,这对于训练样本数m很大的情况是很耗时的。

BGD算法表示为

Stochastic Gradient Descent vs Batch Gradient Descent vs Mini-batch Gradient Descent_第1张图片

或者表示为

其中X(m*n)为训练样本矩阵,α为学习速率,m为样本数,y(m*1)为样本结果标签向量,Theta(n*1)为参数向量

其中损失函数 J 对Theta的导数为

Stochastic Gradient Descent vs Batch Gradient Descent vs Mini-batch Gradient Descent_第2张图片

foriter =1:num_iterstheta=theta-alpha/m*X'*(X*theta-y);end

1

2

3

4

5

迭代num_iters次的BGD如上述代码所示

BGD大体执行过程

Stochastic Gradient Descent vs Batch Gradient Descent vs Mini-batch Gradient Descent_第3张图片

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

SGD在大规模训练集上会更高效

SGD的损失函数也与BGD有所不同

Stochastic Gradient Descent vs Batch Gradient Descent vs Mini-batch Gradient Descent_第4张图片

SGD算法在于每次只去拟合一个训练样本,这使得在梯度下降过程中不需去用所有训练样本来更新Theta。BGD每次迭代都会朝着最优解逼近,而SGD由于噪音比BGD多,多以SGD并不是每次迭代都朝着最优解逼近,但大体方向是朝着最优解,SGD大约要遍历1-10次数据次来获取最优解。

SGD算法大体分两步

Stochastic Gradient Descent vs Batch Gradient Descent vs Mini-batch Gradient Descent_第5张图片

SGD算法大体执行过程

Stochastic Gradient Descent vs Batch Gradient Descent vs Mini-batch Gradient Descent_第6张图片

其中学习速率α一般设置为常数,但我们也可以将α随迭代次数而减小,这样更有利于我们函数收敛向最优解

小批量梯度下降算法(Mini-batch Gradient Descent)

MBGD有时候甚至比SGD更高效。

MBGD不像BGD每次用m(所有训练样本数)个examples去训练,也不像SGD每次用一个example。MBGD使用中间值b个examples

经典的b取值大约在2-100

例如 b=10,m=1000

此处MBGD每次只用10个examples来训练。

参考自Andrew NG 在coursera的machine learning week10

参考链接

你可能感兴趣的:(Stochastic Gradient Descent vs Batch Gradient Descent vs Mini-batch Gradient Descent)