随机梯度下降

来源:互联网 发布:sql express 安装失败 编辑:程序博客网 时间:2024/06/01 07:54

随机梯度下降( stochastic gradient descent )

          简单的介绍一下什么是随机梯度下降,为什么要用随机梯度下降这个方法。

1.背景

        在我们进行深度学习的时候,对于神经网络的输出结果,我们需要知道结果对不对,以及每个神经元的阈值和权重对不对,对于以及我调整一下权重和阈值,神经网络的输出结果和我们预期的输出结果会更接近还是误差更大。如果更接近,那么我们可以继续调整权重和阈值,让神经网络的输出结果等于预期。那么我们如何进行定量的分析呢?不能只依靠感觉,这个时候,我们引入函数

C(w,b)12nxy(x)a2.(1)
其中y(x)代表我们预期的输出结果,比如说,一个识别手写阿拉伯数字的神经网络,我们网络的输出就是一个10维的向量,比如(1,0,0,0,0,0,0,0,0,0)代表0,(0,1,0,0,0,0,0,0,0,0)1,而a代表一个神经网络实际输出的结果,wb就分别代表了权重和阈值。也就是说,我们如果想要让一个神经网络的结果更准确,就需要找到合适的w,b,让C更小。即求函数C的最小值。

      也就是说,我们现在是要求一个函数的最小值,让我们仅仅从数学方面思考,如何求解一个函数的最小值。假设有一个函数C(v),而这个函数有两个变量v1,v2,首先想到的就是微积分,假如只有2个变量,我们就要求出函数的二阶偏导,然后再令二阶偏导等于0,算出几个点,再判断这几个点哪个是最大值,哪个是最小值,哪个是鞍点。可是问题是,我们处理的数据大部分都是多维的,甚至达到百万级别,所以用微积分的话,那就很难算出来了。因此我们就需要梯度下降的方法

2.梯度下降的思想

        我们先假设在求一个二元函数的最小值,它的图像如图所示:

这里写图片描述

        假设我们在这个图像曲面上放置一个小球,它受到重力影响,肯定会往下滑落,而最终停止的地方,就是整个函数的最小值,这个就是梯度下降的大致思想。为了更清楚的说明这个问题, 我们把v1v1 方向移动Δv1 ,在v2v2 方向移动Δv2,根据微积分,我们可以得到:

ΔCCv1Δv1+Cv2Δv2.(2)
现在我们需要找到合适的v1v2,可以让ΔC小于0,这样我们才能让小球一直往最低点前进。因为函数C的梯度为:
C(Cv1,Cv2)T.(3)
因此(3)可以改写成
ΔCCΔv.(4)
那么我们如何选择ΔvC为负数呢?我们可以选择令:
Δv=ηC(5)
原式可变为 ΔCηCC=ηC2. 因为C20, 这就保证了 ΔC0。 那么η怎么求呢?因为Δv=ηC,因此η=Δv C|,我们可以事先规定Δv 的大小,然后求出  C 。那么η的值就求出来了。

3.随机梯度下降

        根据前面的介绍,我们已经可以算出最小点在哪里了,但是还有一个问题是,如果网络的输入数据有很多维的话,我们不但要计算每个输入的一阶导数,还要计算每个输入的二阶导数,计算量实在太大。因此,我们可以通过计算一个小样本里的Cx 来估计 C 的值。 To make these ideas more precise, stochastic gradient descent works by randomly picking out a small number m of randomly chosen training inputs.我们随机选取输入 X1,X2,,Xm, 把它们看做是一个迷你批(mini-batch). 样本数 m 要足够大以致于我们可以估计出CXj如下式所示:

mj=1CXjmxCxn=C,(6)
两边互换一下,即可得:
C1mj=1mCXj,(7)
应用到神经网络上,可以得到下式:
wkblwk=wkηmjCXjwkbl=blηmjCXjbl,(8)(9)
其中wb 分别代表权值和阈值。当我们遍历完所有迷你批以后,接着在剩下的样本中选取第二个迷你批,直到穷尽所有样本,此时称为完成一次epoch。然后继续上述过程。

参考资料:《Neural Networks and Deep Learning》 Michael Nielsen

0 0