「牛頓降低法和梯度降低法在機器學習和自適應濾波中都很重要,本質上是爲了尋找極值點的位置。可是收斂的速度不一樣。適當的學習速度,有利於機器學習模型的快速收斂。而過大或者太小的學習速度,都不合適。 下圖比較了較小與過大學習速度示意圖比較。git
較小的學習速度示意圖。
github
過大的學習速度示意圖。
算法
梯度降低算法中,最合適即每次跟着參數θ變化的時候,J(θ)的值都應該降低 到目前爲止,咱們尚未介紹如何選擇學歷速率α,梯度降低算法每次迭代,都會受到學習速率α的影響數據結構
觀察下圖,能夠發現這2種狀況下代價函數 J(θ)的迭代都不是正確的機器學習
根據經驗,能夠從如下幾個數值開始試驗α的值,0.001 ,0.003, 0.01, 0.03, 0.1, 0.3, 1, …函數
α初始值位0.001, 不符合預期乘以3倍用0.003代替,不符合預期再用0.01替代,如此循環直至找到最合適的α學習
而後對於這些不一樣的 α 值,繪製 J(θ)隨迭代步數變化的曲線,而後選擇看上去使得 J(θ)快速降低的一個 α 值。atom
因此,在爲梯度降低算法選擇合適的學習速率 α 時,能夠大體按3的倍數再按10的倍數來選取一系列α值,直到咱們找到一個值它不能再小了,同時找到另外一個值,它不能再大了。其中最大的那個 α 值,或者一個比最大值略小一些的α 值 就是咱們指望的最終α 值。spa
本文中就牛頓降低法和梯度降低法,哪一種收斂方法速度快進行探究「.net
牛頓降低法的遞推公式:
梯度降低算法的遞推公式:
下圖是兩種方法的圖示表示,紅色爲牛頓降低法,綠色爲梯度降低法,從圖中直觀的感受是,紅色線短,降低速度快。由於牛頓降低法是用二次曲面去擬合當前的局部曲面,而梯度降低法是用平面去擬合當前的局部曲面,通常用二次曲面擬合的更好,因此通常牛頓算法收斂快。
關於以上的說法中,梯度降低法是用平面去擬合當前的局部曲面。梯度 f’(x)的方向是函數變大的方向。這裏須要解釋一下,對於一維狀況而言,梯度方向只有正方向和負方向。至於爲何梯度降低算法就是用平面去擬合了,大多數狀況下,沒有講的詳細。接下來就聊一下爲何。
首先考慮一下這個公式,這是一階泰勒展式,其實就是用平面去擬合函數的局部曲面。
咱們的目的是使得左邊的值變小,那是否是應該使得下面的式子變爲負值。
這樣不就會使得左邊的式子變小嗎。
可是如何使得上式必定爲負值,簡單的方法就是:
這樣上式就變爲
如今知足使得下式變小了
可是不要忘了以上全部的一切只有在局部成立,也就是說在小範圍才成立,那麼下式就有很能太大
因此加個小的修正的因子,上式就變爲:
最終獲得公式:
這就是爲何說梯度降低算法是用平面擬合函數的局部曲面。
至於說牛頓降低法是用二次曲面去擬合當前的局部曲面,首先考慮一下下式:
一樣咱們但願左式最小,那麼將左式當作是△x的函數,當取合適的△x值時,左邊的式子達到極小值,此時導數爲0。所以對上式進行求導數,獲得一下公式:
此時可獲得公式:
因此說牛頓降低法是用二次曲面來擬合函數的局部曲面。
綜上而言,牛頓降低法利用了函數的更多的信息,可以更好的擬合局部曲面,因此收斂的速度也會加快。
關於梯度降低算法,其中最重要的就是要肯定步長μ,它的值嚴重的影響了梯度降低算法的表現。
接下來考慮以下公式:
和
結合兩個式子,獲得:
令左邊的式子爲0,獲得:
因而可知牛頓降低法是梯度降低法的最優狀況,所以牛頓降低法的收斂的速度必然更快。
本文轉自如下博客內容,在此表示感謝
http://blog.csdn.net/njucp/article/details/50488869