随机梯度下降法&批量梯度下降法

一、梯度

  1. 导数:反映的是函数y=f(x)在某一点处沿x轴正方向的变化率。

  2. 方向导数:某一点在某一趋近方向上的导数值。通俗的解释是:我们不仅要知道函数在坐标轴正方向上的变化率(即偏导数),而且还要设法求得函数在其他特定方向上的变化率。而方向导数就是函数在其他特定方向上的变化率。

  3. 梯度:函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值。
    这里注意三点:  
    1)梯度是一个向量,即有方向有大小;  
    2)梯度的方向是最大方向导数的方向;
    3)梯度的值是最大方向导数的值。

二、梯度下降法

大多数机器学习或者深度学习算法都涉及某种形式的优化。 优化指的是改变 x以最小化或最大化某个函数 f(x)的任务。 我们通常以最小化 f(x)指代大多数最优化问题。 最大化可经由最小化算法最小化-f(x)来实现。

我们把要最小化或最大化的函数称为目标函数或准则。 当对其进行最小化时,也把它称为代价函数、损失函数或误差函数。


,其中

然后要最小化J。

梯度下降:我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解。

假设随机站在曲线顶端沿着梯度最大的方向下降。


随机梯度下降法&批量梯度下降法_第1张图片

a表示的是步长或者说是学习率(learning rate)

在直观上,我们可以这样理解,一开始的时候我们随机站在一个点,把它看成一座山,每一步,我们都以下降最多的路线来下山,那么,在这个过程中我们到达山底(最优点)是最快的,而上面的a决定了我们“向下山走”时每一步的大小,过小的话收敛太慢,过大的话可能错过最小值.)。每一步总是寻找使J下降最“陡”的方向(就像找最快下山的路一样)。


随机梯度下降法&批量梯度下降法_第2张图片

具体化到一元函数中时,梯度方向首先是沿着曲线的切线的,然后取切线向上增长的方向为梯度方向,二元或者多元函数中,梯度向量为函数值f对每个变量的导数,该向量的方向就是梯度的方向,向量的大小也就是梯度的大小。现在假设我们要求函数的最值,采用梯度下降法,结合如图所示:


随机梯度下降法&批量梯度下降法_第3张图片

如图所示,我们假设函数是

,那么如何使得这个函数达到最小值呢,简单的理解,就是对x求导,得到

然后用梯度下降的方式,如果初始值是(0的左边)负值,那么这是导数也是负值,用梯度下降的公式,使得x更加的靠近0,如果是正值的时候同理。

三、随机梯度下降算法和批量梯度下降算法概念

  1. 随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。

  2. 批量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小。

四、求解思路

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

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


(2) 由于是要最小化风险函数,所以按每个参数theta的梯度负方向,来更新每个theta

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

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

(1)上面的风险函数可以写成如下这种形式,损失函数对应的是训练集中每个样本的粒度,而上面批量梯度下降对应的是所有的训练样本:

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

五、两者比较

批量梯度下降法(Batch Gradient Descent,简称BGD)是梯度下降法最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行更新,也就是方程(1)中的m表示样本的所有个数。

优点:全局最优解;易于并行实现;

缺点:当样本数目很多时,训练过程会很慢。

随机梯度下降法:它的具体思路是在更新每一参数时都使用一个样本来进行更新,每一次更新参数都用一个样本,更新很多次。如果样本量很大的情况(例如几十万),那么可能只用其中几万条或者几千条的样本,就已经将theta迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次,这种更新方式计算复杂度太高。

优点:训练速度快;

缺点:

1.准确度下降,并不是全局最优;不易于并行实现。

2.从迭代的次数上来看,SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。

3.噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

随机梯度下降法&批量梯度下降法_第4张图片

总结: SGD随机梯度下降算法:迭代算法,对于每一次更新参数,不必遍历所有的训练集合,仅仅使用了一个数据,来变换一个参数。这样做不如完全梯度下降的精确度高,可能会走很多弯路,但整体趋势是走向误差最小化。SGD解决了梯度下降的两个问题: 收敛速度慢和陷入局部最优。这样做可以节省更多的时间。
用通俗语言解释:比如你先随便选一个方向,比如朝南方走一段,当然要选的这段路不一定是下降最快的,但是确实会下降的。然后在随便选一个,比如东北方,再走一段。然后过了一段时间你就发现自己差不多也到谷底了。 虽然不一定是真真正正的谷底,也许是个局部极值。 但是这样选方向比计算梯度肯定快。

参考文章:
http://blog.csdn.net/walilk/article/details/50978864

https://www.zhihu.com/question/28728418/answer/228963617

https://www.zhihu.com/question/264189719/answer/291167114

https://www.jianshu.com/p/25148f6971a8

http://blog.csdn.net/heyongluoyao8/article/details/52478715

你可能感兴趣的:(随机梯度下降法&批量梯度下降法)