Batch Gradient Descendent (BGD) & Stochastic Gradient Descendent (SGD)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Batch Gradient Descendent (BGD) & Stochastic Gradient Descendent (SGD)相关的知识,希望对你有一定的参考价值。

SGD, BGD初步描述
					(原文来自:http://blog.csdn.net/lilyth_lilyth/article/details/8973972@熊均达@SJTU 做出解释及说明
								

 

梯度下降(GD)是最小化风险函数、损失函数(注意Risk FunctionCost Function在本文中其实指的一个意思,在不同应用领域里面可能叫法会有所不同。解释:@熊均达@SJTU)的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正。
							

 

下面的h(x)是要拟合的函数,J(θ)损失函数,θ是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(θ)就出来了。其中m是训练集的记录条数,j是参数的个数。

技术分享

技术分享

 

1、批量梯度下降(BGD)的求解思路如下:

1)将J(θ)θ求偏导,得到每个θ对应的的梯度

   技术分享

2)由于是要最小化风险函数(注意这里用了风险函数,其实就是损失函数。解释:@熊均达@SJTU),所以按每个参数θ的梯度负方向,来更新每个θ

技术分享

3)从上面公式可以注意到,它得到的是一个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果m很大,那么可想而知这种方法的迭代速度!!所以,这就引入了另外一种方法,随机梯度下降。

 

2、随机梯度下降(SGD)的求解思路如下:

1)上面的风险函数可以写成如下这种形式,损失函数对应的是训练集中每个样本的粒度(粒度相当于在每个样本点上的损失,因为SGD实际上对相应的Cost Function的偏导做了改动。解释:@熊均达@SJTU,而上面批量梯度下降对应的是所有的训练样本:

技术分享

2)每个样本的损失函数,对θ求偏导得到对应梯度,来更新θ

技术分享

3)随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将θ迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

@熊均达@SJTU附注1:在BGD中,你需要把所有的样本都考虑,求所有样本处的误差的平方和。而对于SGD,技术分享遍历到哪里就是哪里。

@熊均达@SJTU附注2:我现在倾向于在SGD不考虑什么是cost function,只考虑对θ的更新方法做改动。cost function应该在BGD中才存在,因为这个定义是严谨的,所谓cost function就是在所有样本点处的误差的平方和。

 

SGD BGD的深入比较描述(By: @熊均达@SJTU

随机梯度下降和批量梯度下降不同点在于,批量梯度下降每一步更新θ值,都需要遍历全部的训练样本,而随机梯度下降在遇到每个训练样本时,更新θ之后继续处理下一个样本,每个样本只遍历一次,算法的学习时间比批量梯度下降快很多。但是,随机梯度下降可能永远不会收敛到全局最优值,而是在成本函数J(θ)最优值周围附近摇摆。但是在实际问题中,接近最优值的参数值可能已经是足够好的结果了,特别是对于数据量非常大的训练集来说,随机梯度下降是比批量梯度下降更好的选择。

在实际使用梯度下降算法时,将输入变量归一到同一取值范围,能够减少算法的迭代次数。这是因为在小的取值范围内会下降很快,但在大的取值范围内会下降较慢。并且当输入变量取值范围不够均衡时,更容易在最优值周围波动。采用特征缩放(feature scaling)和均值归一化(mean normalization)可以避免这些问题。选择学习率的值,要观察J(θ)值在每次迭代后的变化。已经证明了如果的取值足够小,则J(θ)每次迭代后的值都会减少。如果J(θ)在某次迭代后反而增加了,说明学习率的值应该减小,因为错过了最优值。Andrew Ng推荐的一个经验是每次将减少3倍。

 

批量梯度下降和随机梯度下降对比:

批量梯度下降

随机梯度下降

批量更新算法

在线算法

经验风险

泛化风险

可能陷入局部最优(初值选择敏感)

可能找到全局最优

对步长不敏感

对步长敏感

迭代次数少

迭代次数多

计算量大

计算量不大

 

对于线性回归问题,批量梯度下降和随机梯度下降是如何找到最优解的?

 

全局最优问题和局部最优问题:

最优化问题对的分布是unimodal,即从图形上面看只有一个peak,所以梯度下降最终求得的是全局最优解。然而对于multimodal的问题,因为存在多个peak值,很有可能梯度下降的最终结果是局部最优。对于多个peak的问题,由于随机梯度下降每次更新方向的不确定性,所以SGD有可能使得从局部最优中跳出来而找到全局最优,相反的,这也可能使得SGD从全局最优跳到局部最优,但是对于一般的工程性凸问题,随机梯度下降都呈现了较好的运算复杂度(大概为)和收敛性。

 

最后附上带有大量干货的斯坦福CS229课程主页网址:http://cs229.stanford.edu/materials.html

有兴趣的同学可以自行查阅,其实网上大部分的资料都是根据这些资料翻译的,但是这些更权威。

 

 

参考资料:

  1. https://hal.archives-ouvertes.fr/file/index/docid/359142/filename/ASCONVEXSET.BASIC.IJPAM.1.pdf
  2. http://blog.csdn.net/lilyth_lilyth/article/details/8973972

 

以上是关于Batch Gradient Descendent (BGD) & Stochastic Gradient Descendent (SGD)的主要内容,如果未能解决你的问题,请参考以下文章

随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比

随机梯度下降(stochastic gradient descent),批梯度下降(batch gradient descent),正规方程组(The normal equations)

随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比实现对比

随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比实现对比[转]

批量梯度下降法(Batch Gradient Descent)

flink 批量梯度下降算法线性回归参数求解(Linear Regression with BGD(batch gradient descent) )