上一篇
文章提到牛頓法中要計算 Hessian matrix 的時間與空間的複雜度太大,而高斯牛頓法的精神就是去近似 Hessian matrix 進而降低梯度。高斯牛頓法的前提是這個最佳化問題必須為 least square problem,也就是以下式子:
x∗=arg minx F(x),F(x)=12m∑i=1(fi(x))2=12∥f(x)∥2=12f(x)Tf(x)
以上的問題當然可以用上一篇文章談的梯度下降法或牛頓法來解,但是如果用高斯牛頓法的話會更有效率。
簡介高斯牛頓法
高斯牛頓法的概念是去近似
f(x),如果用泰勒展開式展開
f(x) 可得:
f(x+Δx)≈f(x)+J(x)Δx
注意在這邊
x 與
Δx 都是 n 維的向量,而 J(x) 是 m by n 的 Jacobian matrix:
J(x)=[∂f1(x)∂x1...∂f1(x)∂xn⋮⋱⋮∂fm(x)∂x1...∂fm(x)∂xn]
回到我們要求解的問題,也就是想找
Δx 使得
F(x+Δx) 最小,也就是:
Δx∗=arg minΔx F(x+Δx)=arg minΔx 12∥f(x+Δx)∥2≈arg minΔx 12∥f(x)+J(x)Δx∥2=arg minΔx 12(f(x)+J(x)Δx)T(f(x)+J(x)Δx)=arg minΔx 12(∥f(x)∥22+2ΔxTJ(x)Tf(x)+ΔxTJ(x)TJ(x)Δx)
取對於
Δx 的導數並設為零求極值:
J(x)Tf(x)+J(x)TJ(x)Δx=0
可以求得
Δx:
Δx=−(J(x)TJ(x))−1J(x)Tf(x)
因此我們就可以利用以下式子一直更新 x:
xk+1=xk+Δx=xk−(J(xk)TJ(xk))−1J(xk)Tf(xk)
跟前一篇文章中牛頓法的式子對照可以看出高斯牛頓法的精神便是拿
J(x)TJ(x) 來近似 Hessian matrix 。
高斯牛頓法的優缺點
實務上來說高斯牛頓法的演算法很簡單,但是由於
J(x)TJ(x) 為半正定矩陣,所以可能出現 ill-condition 的情況,所以高斯牛頓法可能不會收斂。此外當如果求出的
Δx 太大時,我們所用的泰勒展開近似式子便不夠準確,也可能會導致不收斂的結果,因此有非線性最佳化領域中有許多方法都是透過改進高斯牛頓法達到最佳化的效果。
參考資料
[1] Methods For Non-Linear Least Squares Problems, Madsen et al. 2004
沒有留言:
張貼留言