牛頓法主要有兩方面的應用:
1. 求方程的根;2. 求解最優化方法;一. 為什麼要用牛頓法求方程的根?問題很多,牛頓法 是什麼?目前還沒有講清楚,沒關係,先直觀理解為牛頓法是一種迭代求解方法(newton童鞋定義的方法)。
假設f(x) = 0為待求解方程,利用傳統方法求解,牛頓法求解方程的公式:
f(x0+δx) = f(x0) +
f′(x0) δx
即 f(
x) = f(x0) +
f′(x0) (x-x0)
公式可能大家會比較熟悉,一階泰勒展式,f′(a) 表示 f(x) 在 x0 點的斜率 (這個很好理解),當x方向增量(δx)比較小時,y方向增量(δy)可以近似表示為 斜率(導數)*x方向增量(
f′(x0) δx
) ,令 f(x) = 0,
我們能夠得到 迭代公式:
x = x0 - f(x0) / f′(x0) => xn+1 = xn - f(xn) / f′(n)
通過逐次迭代,牛頓法 將逐步逼近最優值,也就是方程的解。
二. 擴充套件到最優化問題
這裡的最優化 是指非線性最優化,解非線性最優化的方法有很多,比如 梯度下降法、共軛梯度法、變尺度法和步長加速法 等,這裡我們只講牛頓法。
針對上面問題進行擴充套件:
解決 f(x) = 0 的問題,我們用了一階泰勒展開:
f(x) = f(x0) + f'(x0)*(x-x0) + o( (x-x0)^2 )
去掉末位高階展開項,代入x = x0+δx,得到:
f(x) = f(x0+δx) = f(x0) + f′(x0) δx
那麼 要解決 f′(x) = 0 的問題,我們就需要二階泰勒展開:
f(x) = f(x0) + f'(x0)*(x-x0) + 0.5*f''(x0)*(x-x0)^2 + o( (x-x0)^3 )
去掉末位高階展開項,代入x = x0+δx,得到:
f(x) = f(x0+δx) = f(x0) + f′(x0)δx + 0.5 * f′′(x0) (δx)^2
求導計算: f′(x) = f'(x0+δx) = 0,得到:
[ f(x0) + f′(x0)(x−x0) + 0.5 f′′(x0)(x−x0)^2 ]′ = 0
整理:f′(x0) + f′′(x0)(x−x0) = 0
x = x0 − f′(x0) / f′′(x0) => xn+1 = xn - f'(xn) / f'′(xn)
牛頓法一圖總結為:
三. 牛頓法 與 hessian矩陣的關係
以上牛頓法的推導 是針對單變數問題,對於多變數的情況,牛頓法演變為:
與上面的單變數表示方式類似,需要用到變數的一階導數 和 二階導數。
其中j定義為雅克比矩陣,對應一階偏導數。
h 為 hessian矩陣,對應二階偏導數。
網上也能搜到類似的公式表達,也列出來:
牛頓法 在多變數問題上仍然適用迭代求解,但hessian矩陣的引入增加了複雜性,特別是當:
▪ hessian 矩陣非正定(非凸)導致無法收斂;▪ hessian 矩陣維度過大帶來巨大的計算量。針對這個問題,在 牛頓法無法有效執行的情況下,提出了很多改進方法,比如擬牛頓法(quasi-newton methods)可以看作是牛頓法的近似。
擬牛頓法只需要用到一階導數,不需要計算hessian矩陣 以及逆矩陣,因此能夠更快收斂,關於擬牛頓法這裡不再具體展開,也有更深入的 dfp、bfgs、l-bfgs等演算法,大家可以自行搜尋學習。
總體來講,擬牛頓法 都是用來解決 牛頓法 本身的 複雜計算、難以收斂、區域性最小值等問題。
牛頓法 與 Hessian矩陣
牛頓法 主要有兩方面的應用 求方程的根 求解最優化方法 一.為什麼要用牛頓法求方程的根?假設 f x 0 為待求解方程,利用傳統方法求解,牛頓法求解方程的公式 f x0 x f x0 f x0 x 即 f x f x0 f x0 x x0 這個公式就是一階泰勒展式,f x0 表示 f x 在 x0 ...
牛頓法與擬牛頓法
看了幾篇關於牛頓法的相關介紹,感覺非常好,尤其是擬牛頓條件的推導以及dfp等演算法的推導過程十分詳細明了。這裡記錄一下,方便之後查閱 牛頓法 擬牛頓條件 dfp演算法 bfgs演算法 f bfgs演算法 1 牛頓法 newton s method 牛頓法是一種在實數域和複數域上近似求解方程的方法。方...
Hession矩陣與牛頓迭代法
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 因為這是利用...