首页 > 代码库 > 梯度下降法与牛顿下降法速度的比较

梯度下降法与牛顿下降法速度的比较

“牛顿下降法和梯度下降法在机器学习和自适应滤波中都很重要,本质上是为了寻找极值点的位置。但是收敛的速度不同。 本文中就两种方法来探究一下,哪种收敛方法速度快“


牛顿下降法的递推公式:

xn+1=xn?f(xn)/f′′(xn)

 

梯度下降算法的递推公式:

xn+1=xn?μ?f(xn)

 

 

 

解释一

下图是两种方法的图示表示,红色为牛顿下降法,绿色为梯度下降法,从图中直观的感觉是,红色线短,下降速度快。因为牛顿下降法是用二次曲面去拟合当前的局部曲面,而梯度下降法是用平面去拟合当前的局部曲面,一般用二次曲面拟合的更好,所以一般牛顿算法收敛快。

技术分享

关于以上的说法中,梯度下降法是用平面去拟合当前的局部曲面。梯度 f’(x)的方向是函数变大的方向。这里需要解释一下,对于一维情况而言,梯度方向只有正方向和负方向。至于为什么梯度下降算法就是用平面去拟合了,大多数情况下,没有讲的详细。接下来就聊一下为什么。

首先考虑一下这个公式,这是一阶泰勒展式,其实就是用平面去拟合函数的局部曲面。

f(x+Δx)=f(x)+f(x)?Δx


我们的目的是使得左边的值变小,那是不是应该使得下面的式子变为负值。

f(x)?Δx


这样不就会使得左边的式子变小吗。
但是如何使得上式一定为负值,简单的方法就是:

Δx=?f(x)


这样上式就变为

f(x+Δx)=f(x)?f(x)?f(x)


现在满足使得下式变小了

f(x+Δx)

 


但是不要忘了以上所有的一切只有在局部成立,也就是说在小范围才成立,那么下式就有很能太大

Δx=?f(x)


所以加个小的修正的因子,上式就变为:

Δx=?μ?f(x)

 

最终得到公式:

xn+1=xn?μ?f(xn)

 

这就是为什么说梯度下降算法是用平面拟合函数的局部曲面。



至于说牛顿下降法是用二次曲面去拟合当前的局部曲面,首先考虑一下下式:

f(x+Δx)=f(x)+f(x)Δx+1/2?f′′(x)?Δx2

 

同样我们希望左式最小,那么将左式看成是△x的函数,当取合适的△x值时,左边的式子达到极小值,此时导数为0。因此对上式进行求导数,得到一下公式:

0=f(x)+f′′(x)?Δx


此时可得到公式:

xn+1=xn?f(xn)/f′′(xn)

 

所以说牛顿下降法是用二次曲面来拟合函数的局部曲面。


综上而言,牛顿下降法利用了函数的更多的信息,能够更好的拟合局部曲面,所以收敛的速度也会加快。

解释二

关于梯度下降算法,其中最重要的就是要确定步长μ,它的值严重的影响了梯度下降算法的表现。

接下来考虑如下公式:

f(x+Δx)=f(x)+f′′(x)?Δx



Δx=?μ?f(x)

 

结合两个式子,得到:

f(x+Δx)=f(x)?μ?f′′(x)?f(x)


令左边的式子为0,得到:

μ=1/f′′(x)

 

由此可见牛顿下降法是梯度下降法的最优情况,因此牛顿下降法的收敛的速度必然更快。

本文转自以下博客内容,在此表示感谢

http://blog.csdn.net/njucp/article/details/50488869

梯度下降法与牛顿下降法速度的比较