1. 程式人生 > >牛頓法求極大極小值

牛頓法求極大極小值

牛頓法至少有兩個應用方向,1、求方程的根,2、最優化。牛頓法涉及到方程求導,下面的討論均是在連續可微的前提下討論。

1、求解方程。

並不是所有的方程都有求根公式,或者求根公式很複雜,導致求解困難。利用牛頓法,可以迭代求解。

原理是利用泰勒公式,在x0處展開,且展開到一階,即f(x) = f(x0)+(x-x0)f'(x0)

求解方程f(x)=0,即f(x0)+(x-x0)*f'(x0)=0,求解x = x1=x0-f(x0)/f'(x0),因為這是利用泰勒公式的一階展開,f(x) = f(x0)+(x-x0)f'(x0)處並不是完全相等,而是近似相等,這裡求得的x1並不能讓f(x)=0,只能說f(x1)的值比f(x0)更接近f(x)=0,於是乎,迭代求解的想法就很自然了,可以進而推出x(n+1)=x(n)-f(x(n))/f'(x(n)),通過迭代,這個式子必然在f(x*)=0的時候收斂。整個過程如下圖:

2、牛頓法用於最優化

在最優化的問題中,線性最優化至少可以使用單純行法求解,但對於非線性優化問題,牛頓法提供了一種求解的辦法。假設任務是優化一個目標函式f,求函式f的極大極小問題,可以轉化為求解函式f的導數f'=0的問題,這樣求可以把優化問題看成方程求解問題(f'=0)。剩下的問題就和第一部分提到的牛頓法求解很相似了。

這次為了求解f'=0的根,把f(x)的泰勒展開,展開到2階形式:

這個式子是成立的,當且僅當 Δ無線趨近於0。此時上式等價與:

求解:

得出迭代公式:

一般認為牛頓法可以利用到曲線本身的資訊,比梯度下降法更容易收斂(迭代更少次數),如下圖是一個最小化一個目標方程的例子,紅色曲線是利用牛頓法迭代求解,綠色曲線是利用梯度下降法求解。

在上面討論的是2維情況,高維情況的牛頓迭代公式是:

其中H是hessian矩陣,定義為:

高維情況依然可以用牛頓迭代求解,但是問題是Hessian矩陣引入的複雜性,使得牛頓迭代求解的難度大大增加,但是已經有了解決這個問題的辦法就是Quasi-Newton methond,不再直接計算hessian矩陣,而是每一步的時候使用梯度向量更新hessian矩陣的近似。

擬牛頓法基本思想

上一節指出,牛頓法收斂速度快,但是計算過程中需要計算目標函式的二階偏導數,難度較大;目標函式的Hesse矩陣無法保持正定,從而令牛頓法失效。

為了解決這兩個問題,人們提出了擬牛頓法,即

模擬牛頓法的改進型演算法。基本思想是不用二階偏導數而構造出可以近似Hesse矩陣的逆的正定對稱陣,從而在擬牛頓的條件下優化目標函式。Hesse陣的構造方法的不同決定了不同的擬牛頓法。

擬牛頓法——變種及其相互關係

SR1演算法

擬牛頓法——變種及其相互關係

SR1演算法是一個非常有特色的擬牛頓演算法,有許多改進的SR1演算法研究。其中,SR1的一個突出優點是在極小正定二次目標函式時無需線搜尋仍具有至多n步的終止性質。

BFGS演算法

BFGS演算法是BroydenFletcherGoldfarbShanno四位優化大家在1970年幾乎同時從不同的優化角度提出的。從發明到現在的40多年時間裡,它仍然被認為是最好的擬牛頓演算法。

擬牛頓法——變種及其相互關係

DFP演算法

DFP演算法是以DavidonFletcherPowell發明人的名字首字母命名的。

DFP演算法也是一種秩2的修正演算法。推導步驟和BFGS演算法是類似的,並且兩種修正公式之間構成了對偶關係。記憶時候,可以只記住一種修正公式,然後利用對偶關係寫出另一種。

擬牛頓法——變種及其相互關係

族演算法

BFGS修正公式和DFP修正公式的加權線性組合構成一類修正共識,其中含有一個引數的稱為Broyden族修正公式

擬牛頓法——變種及其相互關係

後來人們又發展出含有兩個引數的Oren族演算法和含有三個引數的Huang族演算法。之所以開發這些演算法,目的就是為了找到一個能夠超越BFGS的更優演算法。然而,經過40多年的努力,這個願望至今還沒有實現。

收斂性及進一步修正

擬牛頓法對於一般非二次函式的收斂性,最早由Powell1971年給出。目前得到的收斂結果都是假設目標函式是凸的。對於一般的非凸目標函式,擬牛頓法的收斂性還沒有統一的證明,只散見個別的案例。

比如,當用於非凸函式極小值問題求解時,有例子表明BFGS採用精確線性搜尋或者W-P搜尋不收斂,而BFGS又是十分好用的演算法,於是在為了克服BFGS的缺陷,又產生了不少修正演算法,如MBFGSCBFGS等。