随机梯度下降( stochastic gradient descent )
简单的介绍一下什么是随机梯度下降,为什么要用随机梯度下降这个方法。
1.背景
在我们进行深度学习的时候,对于神经网络的输出结果,我们需要知道结果对不对,以及每个神经元的阈值和权重对不对,对于以及我调整一下权重和阈值,神经网络的输出结果和我们预期的输出结果会更接近还是误差更大。如果更接近,那么我们可以继续调整权重和阈值,让神经网络的输出结果等于预期。那么我们如何进行定量的分析呢?不能只依靠感觉,这个时候,我们引入函数
也就是说,我们现在是要求一个函数的最小值,让我们仅仅从数学方面思考,如何求解一个函数的最小值。假设有一个函数 C(v) ,而这个函数有两个变量 v1 , v2 ,首先想到的就是微积分,假如只有2个变量,我们就要求出函数的二阶偏导,然后再令二阶偏导等于0,算出几个点,再判断这几个点哪个是最大值,哪个是最小值,哪个是鞍点。可是问题是,我们处理的数据大部分都是多维的,甚至达到百万级别,所以用微积分的话,那就很难算出来了。因此我们就需要梯度下降的方法
2.梯度下降的思想
我们先假设在求一个二元函数的最小值,它的图像如图所示:
假设我们在这个图像曲面上放置一个小球,它受到重力影响,肯定会往下滑落,而最终停止的地方,就是整个函数的最小值,这个就是梯度下降的大致思想。为了更清楚的说明这个问题, 我们把 v1 在 v1 方向移动 Δv1 ,在 v2 在 v2 方向移动 Δv2 ,根据微积分,我们可以得到:
3.随机梯度下降
根据前面的介绍,我们已经可以算出最小点在哪里了(理论上),但是随机梯度下降还有一些问题,我在这里说两个: (1)容易陷入局部极小值,在前面的图中,我们只画出了一个全局极小值点,所以梯度下降可以直接找到最小点,但是在实际中,函数会有很多局部极小值,因此梯度下降可能会停止在局部极小值中,而不是全局极小值。 (2)计算量太大,注意到式(1),我们计算所有输入图像的cost function,然后取平均,这样计算量太大了。 因此,我们可以通过计算一个小样本里的
∇Cx
来估计
∇C
的值。 我们随机选取输入
X1,X2,…,Xm
, 把它们看做是一个迷你批(mini-batch). 样本数
m
要足够大以致于我们可以估计出
参考资料:《Neural Networks and Deep Learning》 Michael Nielsen