“牛頓下降法和梯度下降法在機器學習和自适應濾波中的都很重要,本質上是為了尋找極值點的位置。但是收斂的速度不同。 本文中就兩種方法來探究一下,哪種收斂方法速度快“
牛頓下降法的遞推公式:
xn+1=xn−f′(xn)/f″(xn)
梯度下降算法的遞推公式:
xn+1=xn−μ∗f′(xn)
<script type="math/tex; mode=display" id="MathJax-Element-3"></script>
解釋一
下圖是兩種方法的圖示表示,紅色為牛頓下降法,綠色為梯度下降法,從圖中直覺的感覺是,紅色線短,下降速度快。因為牛頓下降法是用二次曲面去拟合目前的局部曲面,而梯度下降法是用平面去拟合目前的局部曲面,一般用二次曲面拟合的更好,是以一般牛頓算法收斂快。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyM0EDO1gTM2ETOwEDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
關于以上的說法中,梯度下降法是用平面去拟合目前的局部曲面。梯度 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)
由此可見牛頓下降法是梯度下降法的最優情況,是以牛頓下降法的收斂的速度必然更快。