牛頓法


牛頓法法主要是為了解決非線性優化問題,其收斂速度比梯度下降速度更快。其需要解決的問題可以描述為:對於目標函數f(x),在無約束條件的情況下求它的最小值。

其中x=(x1,x2,..,xn)是n維空間的向量。我們在下面需要用到的泰勒公式先在這寫出來。

牛頓法的主要思想是:在現有的極小值估計值的附近對f(x)做二階泰勒展開,進而找到極小點的下一個估計值,反復迭代直到函數的一階導數小於某個接近0的閥值。

為了便於理解,我們通常先從簡單的開始進行分析,於是我們就先從x的維度n=1時開始進行討論。

1)n=1時。

設x=xt時,函數f(x)取得最小值,我們的目標就是希望能求得xt,現在我們設xk作為xt的估計值。首先我們在x=xk處進行泰勒二階展開,得:

然后對f(x)求導,得:

令:,即:

所以有:

若從初始值x=x0開始進行迭代,將得到x的一個序列:x0,x1,…xk。在一定條件下,此序列可以收斂到f(x)的極小值點。

2)n>1時。

此時,可以將x寫成:x=(x1,x2,…,xn)。同樣,我們先對x進行泰勒展開:

  然后對f(x)求導,此處的求導比n=1的情形要復雜一點,由於f(x)中的x是一個向量,f(x)對x求導意味着對x向量中的每個值求偏導。即,f(x)對x的一階導數為一個向量,對x的二階導數為一個n*n的矩陣。

  求導后得:

(式1.1)

  為了方便表達,我們令:

  此時的gk為一個向量,Hk為一個矩陣。

  我們令(式1.1)中的f(x)導數為0,得:

  即:

  所以:

  得到x的迭代值為:

牛頓法算法流程:

1)初始化x0,設置終止閥值a,令k=0.

2)計算f(x)在x=xk的梯度向量gk和海塞矩陣Hk-1的逆矩陣,其計算公式為:

3)判斷||gk||<a,則停止計算,得到x=xk即為所求。

4)更新x:,轉移至第2)步。

 

算法分析:

1)前提:

要使用該算法要滿足兩個條件:一是函數f(x)一階,二階可偏導;二是海塞矩陣要求正定。若要使得最終結果能收斂到最小值,則f(x)需要為凸函數。

當f(x)滿足:時,海塞矩陣為對稱矩陣,對所有特征值大於0的對稱矩陣稱為正定矩陣。正定矩陣一定是非奇異矩陣。

附:若A為奇異矩陣,則有:|A|=0.

2)優點:

         它比傳統的梯度下降算法收斂速度明顯要快,另外,當f(x)是二次函數時,僅需一次迭代就能直接收斂到最小值。因為f(x)為二次函數時,在進行泰勒展開式,並沒有高階導數的損失,而在后面的每次計算都是等號運算,因而最后得到結果就是函數f(x)最小值對應的x。而對於非二次函數,若函數的二次形態較強,或迭代點已進入極小點的領域內,則其收斂速度也會很快。

3)缺點:

A)計算復雜度問題。

  在上面的這個算法中存在一個問題,即海塞矩陣的計算問題,此問題需要對f(x)求二階偏導數,計算開銷很大;另一方面,海塞矩陣的大小是n的平方,當n增大時,存儲和計算的量是平方的速度增加。

  針對計算復雜度問題,於是有了擬牛頓法。

B)收斂性問題。

  對於非二次函數,也可能會出現f(xk+1)>f(xk)的情況,這時,牛頓法不能收斂,從而導致計算失敗。對於這種情況,可以使用阻尼牛頓法來解決。

  阻尼牛頓法最核心的一點在於可以修改每次迭代的步長,通過沿着牛頓法確定的方向一維搜索最優的步長,最終選擇使得函數值最小的步長。

  關於步長的搜索,主要有精確搜索和非精確搜索,上面的方法是一種精確地搜索方法,在實際中還有Wolfe型搜索,Armijo搜索以及滿足Goldstein條件的非精度搜索。具體的搜索方法大家可自行研究。

 

 

參考文獻:

[1] peghoty, http://blog.csdn.net/itplus/article/details/21896453

[2]李航,統計學習方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM