什么是梯度下降法?

20220114

y=θx
θ取一个初始值
x,y是样本对
θ = θ + -梯度
θ不断改变知道左右两边相差小于误差

梯度下降从来都是拟合负梯度,GBDT平方损失只是恰好等于残差
https://mp.weixin.qq.com/s/F4YHEpfa280cpR4tgL0Maw
AI面试题之GBDT梯度提升树

564 人赞同了该回答

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

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

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

什么是梯度下降法?_第1张图片
什么是梯度下降法?_第2张图片

数学基础知识回顾

一元函数的导数与 Taylor 级数

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

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

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

从 Taylor 级数的角度来看, 在 附近的 Taylor 级数是

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


多元函数的梯度和 Taylor 级数

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

而多元函数 在点 上的 Taylor 级数是:

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


梯度下降法

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

[公式]

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

[公式]

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

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


深度学习中的优化算法

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

什么是梯度下降法?_第3张图片 什么是梯度下降法?_第4张图片 什么是梯度下降法?_第5张图片 什么是梯度下降法?_第6张图片 什么是梯度下降法?_第7张图片 什么是梯度下降法?_第8张图片 什么是梯度下降法?_第9张图片 什么是梯度下降法?_第10张图片


案例分析

案例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 快了许多。

发布于 2019-02-24
​ 赞同 564​ ​ 22 条评论
​ 分享
​ 收藏 ​ 喜欢 收起
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200221112404144.jpg)

你可能感兴趣的:(算法,线性代数,矩阵)