机器学习10:如何理解随机梯度下降

机器学习10:如何理解随机梯度下降

链接:https://www.zhihu.com/question/264189719/answer/291167114
来源:知乎

1.梯度下降法

      理解随机梯度下降,首先要理解梯度下降法。

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

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

      下面我们假设一个损失函数为 ,其中 ,然后要使得这个损失函数最小化。 我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该是沿着梯度的反方向进行权重的更新,可以有效的找到全局的最优解。这个 \theta _{i}的更新过程可以描述如下,其中 a表示的是步长,即学习率(learning rate):

机器学习10:如何理解随机梯度下降_第1张图片

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

机器学习10:如何理解随机梯度下降_第2张图片

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

机器学习10:如何理解随机梯度下降_第3张图片

         如图所示,我们假设函数是 y=x^{2}+1,那么如何使得这个函数达到最小值呢,简单的理解,就是对x求导,得到 y^{'}=2x,然后用梯度下降的方式,如果初始值是(0的左边)负值,那么这是导数也是负值,用梯度下降的公式,使得x更加的靠近0,如果是正值的时候同理。注意:这里的梯度也就是一元函数的导数,高维的可以直接类推之。

2.批量梯度下降/随机梯度下降/mini-batch梯度下降

       (1)批量梯度下降:

                在每次更新时用所有样本,要留意,在梯度下降中,对于 \theta _{i}的更新,所有的样本都有贡献,也就是参与调整 \theta。其计算得到的是一个标准梯度,对于最优化问题,凸问题,也肯定可以达到一个全局最优。因而理论上来说一次更新的幅度是比较大的。如果样本不多的情况下,当然是这样收敛的速度会更快啦。但是很多时候,样本很多,更新一次要很久,这样的方法就不合适啦。下图是其更新公式

机器学习10:如何理解随机梯度下降_第4张图片

       (2)随机梯度下降:

                  随机梯度下降在每次更新时用一个样本,随机也就是说我们用样本中的一个例子来近似我所有的样本来调整 \theta

                  因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,对于最优化问题,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。

                 但是相比于批量梯度,这样的方法更快,更快收敛,虽然不是全局最优,但很多时候是我们可以接受的,所以这个方法用的也比上面的多。下图是其更新公式:

机器学习10:如何理解随机梯度下降_第5张图片

         (3)mini-batch梯度下降:

                   mini-batch梯度下降就是一种折中的方法,用了一些小样本来近似全部的。

                   其本质就是如果一个样本不太准,那么选用几个或几十个样本那比随机的要准确一些,而且批量基本可以反映样本的一个分布情况的。在深度学习中,这种方法用的是最多的,因为这个方法收敛也不会很慢,收敛的局部最优也是更多的可以接受!

机器学习10:如何理解随机梯度下降_第6张图片

 

                 总的来说,随机梯度下降一般来说效率高,收敛到的路线曲折,一般得到的解是可以接受的,在深度学习中,用的比较多的是mini-batch梯度下降。

3.收敛性

         对于收敛性的问题,知乎上就有这个问题:为什么随机梯度下降方法能够收敛?,可以参考李文哲博士的回答,总的来说就是从expected loss用特卡洛(monte carlo)来表示计算,那batch GD, mini-batch GD, SGD都可以看成SGD的范畴。因为大家都是在一个真实的分布中得到的样本,对于分布的拟合都是近似的。那这个时候三种方式的梯度下降就都是可以看成用样本来近似分布的过程,都是可以收敛的!

       可以收敛到最小值,极小值,鞍点,这些都是可能收敛到,也就是梯度为0的点。

       而实际上找到鞍点的可能很小,因为梯度下降是对损失函数每个维度分别求极小值,即分别求 J(\theta )关于 \theta _{1}/\theta _{2}/\theta _{3}...\theta _{n}的​​​​​​​极小值。

      然后是最小值和极小值,如果是凸函数,梯度下降会收敛到最小值,因为只有一个极小值,它就是最小值。

 

 

你可能感兴趣的:(机器学习)