Levenberg-Marquardt、Gradient Descent、與 Gauss-Newton 方法

最小二乘問題是在將參數化函數擬合到一組實測資料點時,通過最小化資料點與函數之間誤差的平方和而產生的最小二乘問題。如果擬合函數在參數中不是線性的,則最小二乘問題是非線性的。非線性最小二乘方法通過對參數值的一系列更新,反覆運算地減小了函數與被測資料點之間誤差的平方和。


當要對非線性最小二乘問題求解時,通常我們使用 Gradient Descent 或 Newton Gauss 方法求解。而 Levenberg-Marquardt 方法也是求解非線性最小二乘問題的一種標準數值方法.  Levenberg-Marquardt 曲線擬合方法是兩種極小化方法的結合:梯度下降法和高斯-牛頓法。


梯度下降法: 在梯度下降法中,通過對最陡下降方向的參數進行更新,減小了平方誤差之和。



Gauss-Newton方法: Gauss-Newton方法中,假設最小二乘函數為局部二次函數,求二次函數的最小值,從而減小平方誤差之和。



Note: 

1. 在實作時,W 一般視為 identity matrix,所以 h 就等於 Jacobian 的 inverse 乘於 (y-yhat),也就是 residuals。

2. 要求 Jacobian,在 Python 中,可以利用 sympy 套件進行  symbolic computing。先用 sympy 中的 symplify 將字串公式符號化,再利用 diff 將符號化的公式進行微分,將產生微分後的符號公式以 sub 代入對應目前的參數值並以 lambdify 將代入後的公式轉成可傳入向量的變數函數,呼叫前面函數後產生 Jacobian matrix 再以 numpy.linalg.pinv 產生其廣義反矩陣後,乘上 residuals 矩陣,即產生新的 h。

3. residuals = yhat - y ,其中 yhat 也是用微分前的符號公式,以以 sub 代入對應目前的參數值並以 lambdify 將代入後的公式轉成可傳入向量的變數函數產生 yhat 值

Levenberg-Marquardt方法:



當參數遠離最優值時,Levenberg-Marquardt方法更像梯度下降法;當參數接近最優值時,更像Gauss-Newton方法。


留言

這個網誌中的熱門文章

標準差與 Wald 統計量

可能性比檢定(Likelihood ratio test)

Wold Decomposition Theorem