什么是梯度下降法?

564 人赞同了该回答

梯度下降法简单来说就是一种寻找目标函数最小化的方法。

张戎:深度学习中的优化算法

在深度学习中,经常有人会拿下面这幅图来比较各种优化算法的性质,包括传统的 SGD,Momentum SGD,AdaGrad,RMSProp 和 Adam 等。不过光看图可能无法理解其中的精妙之处,本文将会从数学的基础知识出发,初步介绍深度学习中的一些优化算法,最后进行一些简单的案例分析。

数学基础知识回顾

一元函数的导数与 Taylor 级数

在微积分中,函数 [公式] 在点 [公式] 上的导数定义为: [公式] 它在几何上指的就是函数 [公式][公式]上的切线方向。

通常来说,为了计算某个函数 [公式] 的最大值或者最小值,通常都会计算它的导数 [公式] ,然后求解方程 [公式] 就可以得到函数的临界点,进一步判断这些临界点是否是最大值或者最小值。但是临界点并不一定是全局最大值或者全局最小值,甚至不是局部的最大值或者局部最小值。

例如:函数 [公式] ,它的导数是 [公式] ,因此 [公式] 是它的临界点。但 [公式] 则不是这个函数的局部最大值或者局部最小值点,因为 [公式][公式]

从 Taylor 级数的角度来看, [公式][公式] 附近的 Taylor 级数是

[公式]

对于临界点 [公式] 而言,它满足条件 [公式] 。当 [公式] 时,可以得到 [公式][公式] 的局部最小值;当 [公式] 时,可以得到 [公式][公式] 的局部最大值。而对于上面的例子 [公式]而言,临界点 [公式] 的二阶导数则是 [公式] ,因此使用上面的方法则无法判断临界点 [公式] 是否是局部极值。


多元函数的梯度和 Taylor 级数

对于多元函数 [公式] 而言,同样可以计算它们的“导数”,也就是偏导数和梯度,i.e. 它的梯度可以定义为:

[公式]

而多元函数 [公式] 在点 [公式] 上的 Taylor 级数是:

[公式]

其中 [公式] 表示 Hessian 矩阵。如果 [公式] 是临界点,并且 Hessian 矩阵是正定矩阵的时候, [公式][公式] 处达到局部极小值。


梯度下降法

从数学上的角度来看,梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数减少最快的方向。那么,如果想计算一个函数的最小值,就可以使用梯度下降法的思想来做。假设希望求解目标函数 [公式] 的最小值,可以从一个初始点 [公式] 开始,基于学习率 [公式] 构建一个迭代过程:当 [公式] 时,

[公式]

其中 [公式] ,一旦达到收敛条件的话,迭代就结束。从梯度下降法的迭代公式来看,下一个点的选择与当前点的位置和它的梯度相关。反之,如果要计算函数 [公式] 的最大值,沿着梯度的反方向前进即可,也就是说:

[公式]

其中 [公式] 。整体来看,无论是计算函数的最大值或者最小值,都需要构建一个迭代关系 [公式] ,那就是:

[公式]

也就是说对于所有的 [公式] ,都满足迭代关系 [公式] 。所以,在以上的两个方法中,我们可以写出函数 [公式] 的表达式为:

[公式]


深度学习中的优化算法

在本文中,假设 [公式] 是每个样本的损失函数, [公式] 表示一个关于输入 [公式] 和参数 [公式] 的函数,并且 [公式] 表示 [公式] 所对应的目标值。


案例分析

案例1: [公式]

针对这个函数 [公式] 而言,从数学上我们可以轻易地得到最小值点就是 [公式] 。不过在这里我们可以验证随机梯度下降法的效果。首先计算函数 [公式] 的梯度为:

[公式]

其次,给定一个随机的初始点 [公式] ,通过梯度可以得到迭代公式为:

[公式]

其中 [公式] 表示学习率, [公式] 表示迭代次数。因此,可以计算出具体的公式为:

[公式]

于是可以得到:

[公式]

意思就是说,使用随机梯度下降法我们可以得到函数 [公式] 的最小值是 [公式]


案例2: [公式]

不过,随机梯度下降法也有着自身的局限性。针对很多高维非凸函数而言,鞍点的数量其实远远大于局部极小值(极大值)的数量。因此,如何快速的逃离鞍点就是深度学习中大家所研究的问题之一。而比较简单的鞍点就是马鞍面函数 [公式] 中的 [公式] 点。而函数 [公式][公式] 上并没有最小值,因为 [公式] 。 同时,函数 [公式] 的偏导数是:

[公式]

[公式] 在点 [公式] 上则满足以下几个性质:

[公式]

[公式]

也就是说, [公式] 这一点的 Hessian 矩阵并不是正定矩阵。


随机梯度下降法:如果初始点是 [公式] ,那么随机梯度下降法(SGD)就可以写成:对于所有的 [公式] ,有

[公式]

其中 [公式] 是学习率。


使用动量的随机梯度下降法:如果初始点是 [公式] ,初始速度是 [公式] ,学习率是 [公式] ,动量参数是 [公式] ,那么使用动量的随机梯度下降法就可以写成: [公式]

[公式]


AdaGrad 算法:如果初始点是 [公式] ,学习率是 [公式][公式] 是小常数,那么 AdaGrad 算法就可以写成: [公式]

[公式]

其中 [公式] 是学习率, [公式] 是一个小常数。


Case 1: [公式]

[公式] 时,如果使用随机梯度下降法,就可以得到 [公式]

[公式]

因此, [公式] 。 通过随机梯度下降法(SGD)在初始值为 [公式] 的前提下并不能计算出函数 [公式] 的最小值,而是会停止在 [公式] 鞍点这个地方,最终无法逃离鞍点。

同理,如果使用基于动量的 SGD 算法,就要看初始速度的设置了,如果初始的速度为 [公式] ,那么最终都会收敛到 [公式] 这个点上。不过,如果 [公式] ,那么就可以在一定次数的迭代之后逃离 [公式]

根据同样的分析思路,在本文中所写的 AdaGrad,RMSProp,Adam 算法中,如果初始点是 [公式] 并且算法参数都是默认的话,使用这些方法同样无法逃离鞍点 [公式] ,也就是说最终都会收敛到 [公式] 上。


Case 2: [公式]

在这种情况下,可以考虑在 [公式] 的基础上给纵坐标加上一个微小的扰动。不妨假设初始点为 [公式] 。下面计算各个算法在这个初始值下的收敛效果。在实际的应用中,需要迭代的次数越少越好。于是,通过计算 [公式] 的值,就可以进一步判断哪个算法(SGD,Momentum SGD,AdaGrad,RMSProp,Adam)更加容易逃离鞍点。


随机梯度下降法:通常情况下, [公式] 可以设置为 [公式] 。从随机梯度下降法的公式来看,就可以得到如下迭代公式:

[公式]

其实, [公式] ,i.e. 使用梯度下降法同样可以找到函数 [公式] 的最小值。但是,如果 [公式] ,则 [公式] 需要满足条件:

[公式]

换言之,需要迭代 [公式] 次左右才能够使得 [公式]


AdaGrad 算法:通常来说,在 AdaGrad 算法中,算法的参数默认值是 [公式][公式] 。由于初始值 [公式] ,所以计算可以得到:

[公式]

最后通过写程序就可以证明,在 AdaGrad 的默认参数下,只需要 [公式] 次左右的迭代就可以实现 [公式]


RMSProp 算法:

在这种情况下,为了简单起见,可以令衰减速率 [公式] ,那么同样可以写出迭代公式为: [公式],有

[公式]

在 RMSProp 里面,一般来说小常数 [公式][公式] 。通过直接计算可以知道,在这种情况和参数设置下,在迭代了 [公式] 轮左右的时候,就会出现 [公式] 的情况。

整体来说,在初始值为 [公式] 的情况下,无论是 SGD,Momentum SGD,AdaGrad 算法,还是 RMSProp 算法,都会逃离鞍点 [公式] 。只不过 AdaGrad 和 RMSProp 算法的逃离速度比 SGD 快了许多。

赞同 564 22 条评论
分享
收藏 喜欢 收起
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200221112404144.jpg)
发布了258 篇原创文章 · 获赞 7 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/kyle1314608/article/details/104424705