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

来源:互联网 发布:淘宝天机怎么加入 编辑:程序博客网 时间:2024/05/02 22:46

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

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

以线性回归为例,损失函数为这里写图片描述

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

BGD算法表示为
这里写图片描述
或者表示为
这里写图片描述
这里写图片描述
其中X(m*n)为训练样本矩阵,α为学习速率,m为样本数,y(m*1)为样本结果标签向量,Theta(n*1)为参数向量

其中损失函数 J 对Theta的导数为
这里写图片描述

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

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

BGD大体执行过程
这里写图片描述

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

SGD在大规模训练集上会更高效
SGD的损失函数也与BGD有所不同
这里写图片描述

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

SGD算法大体分两步
这里写图片描述

SGD算法大体执行过程
这里写图片描述

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

小批量梯度下降算法(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
参考链接

1 0
原创粉丝点击