1. 程式人生 > >最優化方法:牛頓迭代法和擬牛頓迭代法

最優化方法:牛頓迭代法和擬牛頓迭代法

基礎


拐點

若曲線圖形在一點由凸轉凹,或由凹轉凸,則稱此點為拐點。直觀地說,拐點是使切線穿越曲線的點。

拐點的必要條件:設f(x)(a,b)內二階可導,x_{0}\in (a,b),若(x_{0},f(x_{0}))是曲線y=f(x)的一個拐點,則f''(x_{0})=0。 比如,

f(x)=x^{4},有f''(0)=0,但是0兩側全是凸,所以0不是函式f(x)=x^{4}的拐點。

拐點的充分條件:設f(x)(a,b)內二階可導,f''(x_{0})=0,若在x_{0}兩側附近f''(x)異號,則點(x_{0},f(x_{0}))為曲線的拐點。否則(即

f''(x_0)保持同號),(x_{0},f(x_{0}))不是拐點。

牛頓法和擬牛頓法(Newton's method & Quasi-Newton Methods)

牛頓法(Newton's method)

  又稱為牛頓-拉弗森方法(Newton-Raphson method),單變數下又稱為切線法。它是一種在實數域和複數域上近似求解方程的方法。方法使用函式f (x)的泰勒級數的前面幾項來尋找方程f (x) = 0的根。用牛頓迭代法解非線性方程,是把非線性方程f(x) = 0線性化的一種近似方法

把f(x)在點x0的某鄰域內展開成泰勒級數


取其線性部分(即泰勒展開的前兩項),並令其等於0,即

,以此作為非線性方程f(x) = 0的近似方程

設 f ′( x 0 )≠0,則其解為


這樣,得到牛頓迭代法的一個迭代關係式

已經證明,如果f  ' 是連續的,並且待求的零點x是孤立的,那麼在零點x周圍存在一個區域,只要初始值x0位於這個鄰近區域內,那麼牛頓法必定收斂。 並且,如果f  ' (x)不為0, 那麼牛頓法將具有平方收斂的效能。粗略的說,這意味著每迭代一次,牛頓法結果的有效數字將增加一倍。

由於牛頓法是基於當前位置的切線來確定下一次的位置,所以牛頓法又被很形象地稱為是"切線法"。牛頓法的搜尋路徑(二維情況)如下圖所示:

牛頓法搜尋動態示例圖:

牛頓法應用於最優化

牛頓法求解非線性函式的最優值點。那牛頓法和極值求解有關係?看起來牛頓法只能求零點啊? 一階導零點不就是函式的極值或者駐點?

1 直接通過求解f(x) = 0的解修改得到

牛頓法是求解f(x) = 0的解而不是求極小值(當然求f'(x) = 0就是求解f(x)極小值了),且f(xn)/f'(xn)不就是x軸移動的距離嗎。

牛頓法極值求解迭代公式如下

\[x:=x-\frac{y'}{y^{''}}\]

對於高維函式,用牛頓法求極值也是這個形式,只不過這裡的y'和y''都變成了矩陣和向量。而且你也可以想到,高維函式二階導有多個,寫成矩陣的形式Hessian矩陣

\[H=\left[ \begin{array}{ccc}f_{11} & \dots  & f_{1n} \\ \vdots  & \ddots  & \vdots  \\ f_{n1} & \dots  & f_{nn} \end{array}\right]\]

y'就變成了對所有引數的偏導陣列成的向量

\[J\left(\theta \right)=\left[ \begin{array}{c}J_1 \\ \vdots  \\ J_n \end{array}\right]\]

迭代公式

\[\theta :=\theta -H^{-1}J(\theta )\]

然而J_{kk}\left(k,b\right)算的可能非常慢,數也可能很大。簡單的解決辦法,有一種叫做批迭代的方法,不管是在梯度計算極值還是在牛頓計算極值上都是可行的,就是假設失去大部分點對準確度沒有太大的影響,比如說3個在一條直線上的點,去掉一個也沒什麼關係,最後反正還是會擬合成同一個引數。批迭代就是在眾多的點中隨機抽取一些,進行迭代計算,再隨機抽取一些再進行迭代。迭代的路徑可能不完美,但是最終還是會找到我們想要的答案。(有點類似mini-batch)

當然還有其他更帥的解決方法,祝如DFP,BFGS,Broyden。

2 f(x)在點x0的某鄰域內泰勒級數二階展開(更嚴謹)




或者使用統計學習方法裡面N>1的方式

牛頓最優化方法


牛頓迭代法評價

關於牛頓法和梯度下降法的效率對比

  從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了局部的最優,沒有全域性思想。)

Note: lz梯度下降的改進如moment就考慮更多了。

  根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。

注:紅色的牛頓法的迭代路徑,綠色的是梯度下降法的迭代路徑。

牛頓迭代法的優缺點

牛頓法優點:二階收斂,收斂速度快;

牛頓法可以求最優化問題,而且求解精確,一般用牛頓法求得的解成為ground-truth。

牛頓法缺點:

1 牛頓法是一種迭代演算法,每一步都需要求解目標函式的Hessian矩陣的逆矩陣,計算比較複雜。

二階方法實踐中對高維資料不可行。infeasible to compute in practice for high-dimensional data sets, e.g. second-order methods such as Newton's method.

2 可能發生被零除錯誤。當函式在它的零點附近,導函式的絕對值非常小時,運算會出現被零除錯誤。

3 是可能出現死迴圈。當函式在它的零點有拐點時,可能會使迭代陷入死迴圈。

Note:f(x) = arctanx, 2階導產生(拐點) f''(x*) = 0。

4 定步長迭代。改進是阻尼牛頓法。


牛頓迭代法不成功的反例

1 f(x) = x^3 - 3x + 2 = 0。 | f'(x) |很小,零除錯誤。

2 達到極小值?

3 死迴圈

以上反例說明,牛頓迭代法區域性收斂性要求初始點要取得合適,否則導致錯誤結果.

牛頓法收斂性分析

牛頓法為什麼能收斂

一個直觀解釋

H正定(則H^-1亦正定),那麼可以保證牛頓法搜尋方向-gk是下降方向。


收斂證明

不動點迭代收斂的定理2.5和定理2.4可以證明,具體省略。[]

牛頓迭代法區域性收斂定理

上面示例提到牛頓法可能不收斂,下面討論確保牛頓法收斂的條件。

條件(1)保證了根的存在; 條件(2)要求f(x)是單調函式,且f(x)在a,b上是凸向上或凹向下; 條件(3)保證當xn∈a,b時,有xn+1=φ(x)∈a,b.

關於條件(3),取x0∈a,b使得f(x0)f′′(x0)>0的註記如下:

如果f(x)的二階導數大於零,則函式圖形是凹曲線(有時定義不一樣,還是看f''(x)吧).根據條件(3),在方程f(x)=0中,如果函式f''(x)>0,則應取牛頓迭代的初始點使得f(x0)>0;否則,應取f(x0)<0!!

牛頓迭代法的收斂階

對於牛頓迭代法,其迭代函式為

於是

假定x是f(x)=0的單根,即f(x)=0,f′(x)≠0,則φ′(x)=0,根據[]高階收斂定理2.6可以斷定,牛頓迭代法在根*x附近至少平方收斂.

Note: 收斂性質主要用在靠近x*時的收斂速度,其它地方一般因為梯度較大,下降得很快,主要速度在於快到達最優值時的收斂速度。

另一種直觀解釋

[牛頓法]

皮皮blog

牛頓迭代法的變形

牛頓下山法

在牛頓迭代法中,當選取初值有困難時,可改用如下迭代格式,以擴大初值的選取範圍,

其中λ稱為下山因子,λ選取應滿足單調性條件


這樣的演算法稱下山法.將下山法和牛頓法結合起來使用的方法,稱為牛頓下山法.

下山因子λ的選擇是逐步探索的過程.從λ=1開始反覆將λ減半進行試算,如果能定出λ使單調性條件成立則“下山成功”.與此相反,如果找不到使單調性條件成立的λ,則“下山失敗”.此時需另選初值x0重算.

弦截法

為了避免計算導數,在牛頓迭代格式(2.8)中,用差商

代替導數 f ′(xn),得

該迭代格式被稱為弦截法.

從幾何上看,式(2.10)實際上是由曲線上兩點(xn-1,f(xn-1))和(xn,f(xn))確定割線,該割線與x軸交點的橫座標即為xn+1,故弦截法又稱為割線法.

弦截法和牛頓迭代法都是線性化方法,牛頓迭代法在計算xn+1時只用到前一步的值xn,而弦截法用到前面兩步的結果xn和xn-1,因此使用弦截法必須先給出兩個初值值x0,x1.

弦截法收斂速度稍慢於牛頓法

設f(x)在x*附近二階連續可微,且f(x*)=0,f′(x*)≠0,則存在δ>0,當x0,x1∈[x*-δ,x*+δ],由弦截法產生的序列{xn}收斂於x*,且收斂階至少為1.618.


阻尼牛頓法

雖然Newton法具有二階區域性收斂性,但它要求F(x)非奇異。如果矩陣F(x)奇異或病態,那麼F(x(k)也可能奇異或病態,從而可能導致數值計算失敗或產生數值不穩定。這時可使用阻尼牛頓法,即把牛頓法的迭代公式改成,[F(x(k)+μkI]x(k)=F(x(k),k=0,1,...

其中的引數μk稱為阻尼因子,μkI稱為阻尼項。增加阻尼項的目的,是使線性方程的係數矩陣非奇異並良態。當μk選得很合適時,阻尼Newton法是線性收斂的。

另一種等價解釋

阻尼牛頓法其實就是牛頓法增加了一個沿牛頓方向的一維搜尋。



計算重根的牛頓迭代法

該迭代格式具有至少二階收斂性質.但在實際計算時,往往並不知道重數m,因而並不能直接使用式(2.11).為此定義函式


該迭代格式至少是二階收斂.


擬牛頓法(Quasi-Newton Methods)

  擬牛頓法是求解非線性優化問題最有效的方法之一,於20世紀50年代由美國Argonne國家實驗室的物理學家W.C.Davidon所提出來。Davidon設計的這種演算法在當時看來是非線性優化領域最具創造性的發明之一。不久R. Fletcher和M. J. D. Powell證實了這種新的演算法遠比其他方法快速和可靠,使得非線性優化這門學科在一夜之間突飛猛進。

  擬牛頓法的本質思想是改善牛頓法每次需要求解複雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的複雜度(類似於弦截法,導數F(x)需要近似);而且有時候目標函式的H矩陣無法保證正定。擬牛頓法和最速下降法一樣只要求每一步迭代時知道目標函式的梯度。通過測量梯度的變化,構造一個目標函式的模型使之足以產生超線性收斂性。這類方法大大優於最速下降法,尤其對於困難的問題。另外,因為擬牛頓法不需要二階導數的資訊,所以有時比牛頓法更為有效。如今,優化軟體中包含了大量的擬牛頓演算法用來解決無約束,約束,和大規模的優化問題。

這樣的迭代與牛頓法類似,區別就在於用近似的Hesse矩陣Bk

代替真實的Hesse矩陣。所以擬牛頓法最關鍵的地方就是每一步迭代中矩陣Bk的更新。常用的擬牛頓法有DFP演算法和BFGS演算法。

擬牛頓條件

亦稱擬牛頓方程或者割線條件(割線方程),用於指出近似的矩陣應該滿足的條件。


[數值分析 電子科大 鍾爾傑]

[最優化演算法]