LM算法原理
非線性最小二乘法優化
高斯-牛頓法
參考文章:[優化] Gauss-Newton非線性最小二乘算法
算法流程如下圖(來自參考文章)所示:
接下來本文使用的數學符號意義與上圖一樣。其中xxx是需要求解的參數,f(x)f(x)f(x)是一個殘差向量。比如有一個優化問題,y=asin(wt+b)+cy=asin(wt+b)+cy=asin(wt+b)+c,給出m個數據(ti,yi)(i=0,1,?,m?1)(t_i,y_i)(i=0,1,\cdots,m-1)(ti?,yi?)(i=0,1,?,m?1),則
x=[a,w,b,c]Tf(x)=[y0?(asin(wt0+b)+c),y1?(asin(wt1+b)+c),?,ym?1?(asin(wtm?1+b)+c)]Tx=[a,w,b,c]^T \\ f(x)=[y_0-(asin(wt_0+b)+c),y_1-(asin(wt_1+b)+c),\cdots,y_{m-1}-(asin(wt_{m-1}+b)+c)]^T x=[a,w,b,c]Tf(x)=[y0??(asin(wt0?+b)+c),y1??(asin(wt1?+b)+c),?,ym?1??(asin(wtm?1?+b)+c)]T
則∣∣f(x)∣∣2||f(x)||^2∣∣f(x)∣∣2(向量二范數)就是最小二乘法的損失值。
設損失函數l(x)=12∣∣f(x)∣∣2l(x)=\frac{1}{2}||f(x)||^2l(x)=21?∣∣f(x)∣∣2。
另外,J(x)J(x)J(x)為f(x)f(x)f(x)的雅可比矩陣,假設xxx的長度為n,f(x)f(x)f(x)長度為m,則J(X)J(X)J(X)矩陣大小為(m,n)。
H=JTJH=J^TJH=JTJ為f(x)f(x)f(x)的黑塞矩陣的近似矩陣。B=?JTf(x)B=-J^Tf(x)B=?JTf(x)為損失函數l(x)l(x)l(x)(12\frac{1}{2}21?只是為了求導后約掉∣∣f(x)∣∣2||f(x)||^2∣∣f(x)∣∣2的指數2)的負梯度??l(x)?x-\frac{\partial l(x)}{\partial x}??x?l(x)?。
最速下降法
參考文章:
- 【最優化】一文搞懂最速下降法
- 【最優化】為什么最速下降法中迭代方向是鋸齒形的?
LM算法
在高斯-牛頓法中引入μ\muμ得到LM算法
引入μ\muμ的意義
- 高斯牛頓法的缺點
- H有可能不可逆
首先,H=JTJH=J^TJH=JTJ為半正定對稱矩陣(注:形如ATAA^TAATA(A為任意矩陣)都是半正定對稱矩陣,這個定理是奇異值分解的基礎),可以分解為H=QΛQTH=Q\Lambda Q^TH=QΛQT,其中矩陣QQQ的每個列向量為HHH的特征向量,Λ\LambdaΛ為對角矩陣,對角元素為對應特征向量的特征值。
因為HHH為半正定對稱矩陣,因此特征值有可能為0,因此不可逆。因為若H可逆,則H?1=QΛ?1QTH^{-1}=Q\Lambda ^{-1}Q^TH?1=QΛ?1QT,其中Λ?1\Lambda ^{-1}Λ?1對角元素為對應特征值λ\lambdaλ的倒數1λ\frac{1}{\lambda}λ1?,因此若特征值為0,則HHH不可逆。 - 步長Δx\Delta xΔx可能過大,導致發散
由高斯牛頓法的算法流程可知,其核心是在點xkx_kxk?處利用l(x)l(x)l(x)的泰勒展開,用二次多項式pk(x)p_k(x)pk?(x)(注:實際上pk(x)p_k(x)pk?(x)不是真正泰勒展開的二次多項式,因為矩陣HHH只是黑塞矩陣的近似矩陣)近似f(x)f(x)f(x)。
l(xk+Δx)≈pk(xk+Δx)=l(xk)+(?BT)Δx+12ΔxTHΔxl(x_k+\Delta x) \approx p_k(x_k+\Delta x)= l(x_k)+(-B^T)\Delta x+\frac{1}{2}{\Delta x}^T H \Delta x l(xk?+Δx)≈pk?(xk?+Δx)=l(xk?)+(?BT)Δx+21?ΔxTHΔx
然后求二次多項式pk(x)p_k(x)pk?(x)的最小值點xk+1=xk+argmin?Δxpk(xk+Δx)x_{k+1}=x_{k}+\underset{\Delta x}{\operatorname{argmin}}\ {p_k(x_k+\Delta x)}xk+1?=xk?+Δxargmin??pk?(xk?+Δx),然后xk+1x_{k+1}xk+1?則是這一次迭代的結果。
因此當xkx_kxk?與pk(x)p_k(x)pk?(x)的最小值點相距很遠時,步長Δx\Delta xΔx會很大。但泰勒展開一般只在xkx_kxk?的局部區域內能很好的近似原始函數l(x)l(x)l(x),因此步長太大算法可能會發散(損失值不降反升)。
- H有可能不可逆
- 引入(非負數)μ\muμ解決高斯牛頓法的缺點
- 步長Δx\Delta xΔx太大的問題
步長可能太大,那么一個自然的想法就是正則化。因此,修改損失函數為:
pk(xk+Δx)=l(xk)+(?BT)Δx+12ΔxTHΔx+12μΔxTΔxp_k(x_k+\Delta x)= l(x_k)+(-B^T)\Delta x+\frac{1}{2}{\Delta x}^T H \Delta x+\frac{1}{2}\mu{\Delta x}^T \Delta x pk?(xk?+Δx)=l(xk?)+(?BT)Δx+21?ΔxTHΔx+21?μΔxTΔx
正則化系數μ\muμ越大,則越能限制步長Δx\Delta xΔx的大小。
求解argmin?Δxpk(xk+Δx)\underset{\Delta x}{\operatorname{argmin}}\ {p_k(x_k+\Delta x)}Δxargmin??pk?(xk?+Δx)的過程如下:
(1) 求導:ω(Δx)=?pk(xk+Δx)?Δx=(?B)+HΔx+μΔx=(?B)+(H+μI)Δx\omega (\Delta x)=\frac{\partial p_k(x_k+\Delta x)}{\partial \Delta x}=(-B)+H\Delta x+\mu \Delta x=(-B)+(H+\mu I) \Delta xω(Δx)=?Δx?pk?(xk?+Δx)?=(?B)+HΔx+μΔx=(?B)+(H+μI)Δx
(2) 令ω(Δx)=0\omega (\Delta x)=0ω(Δx)=0得:
argmin?Δxpk(xk+Δx)=(H+μI)?1B\underset{\Delta x}{\operatorname{argmin}}\ {p_k(x_k+\Delta x)=(H+\mu I)^{-1}B }Δxargmin??pk?(xk?+Δx)=(H+μI)?1B - H不可逆的問題
由上面可知現在HHH變成了(H+μI)(H+\mu I)(H+μI),只要μ>0\mu >0μ>0,則(H+μI)(H+\mu I)(H+μI)一定可逆。因為:
(1) 首先(H+μI)(H+\mu I)(H+μI)是對稱矩陣(保證了(H+μI)(H+\mu I)(H+μI)有n個正交特征向量,n為xxx的長度,(H+μI)(H+\mu I)(H+μI)大小為(n,n))。
(2) 其次(H+μI)(H+\mu I)(H+μI)與HHH特征向量相同,并且:假設Hx=λxHx=\lambda xHx=λx,則(H+μI)x=Hx+μx=(λ+μ)x(H+\mu I)x=Hx+\mu x=(\lambda +\mu)x(H+μI)x=Hx+μx=(λ+μ)x。所以(H+μI)(H+\mu I)(H+μI)的特征值為HHH對應特征值加μ\muμ。又因為λ≥0\lambda \ge 0λ≥0,所以若μ\muμ大于0,則(H+μI)(H+\mu I)(H+μI)的特征值大于0。
(3)結合(1)(2)得若μ>0\mu>0μ>0,則(H+μI)(H+\mu I)(H+μI)為對稱正定矩陣,所以(H+μI)(H+\mu I)(H+μI)可逆。
- 步長Δx\Delta xΔx太大的問題
如何自動調整μ\muμ,LM與高斯牛頓法和最速下降法的關系,算法實現流程
- 如何自動調整μ\muμ,LM與高斯牛頓法和最速下降法的關系
參考文章:Levenberg–Marquardt算法學習- 其實信賴域法的本質就是看近似函數(比如這里就是泰勒展開的二階形式)的損失值下降量ΔLk\Delta L_{k}ΔLk?和實際損失函數的損失值下降量ΔFk\Delta F_{k}ΔFk?的比值,如果ΔFkΔLk\frac{\Delta F_{k}}{\Delta L_{k}}ΔLk?ΔFk?? 約等于1說明近似函數在步長Δk\Delta_{k}Δk?內與實際損失函數很近似,可以保持這個步長或者擴大步長,否則若ΔFkΔLk\frac{\Delta F_{k}}{\Delta L_{k}}ΔLk?ΔFk??約等于0甚至是負數,就縮小步長。(需要保證ΔLk>0\Delta L_{k}>0ΔLk?>0)
- 算法實現流程
參考文章:A Brief Description of the Levenberg-Marquardt Algorithm Implemened by levmar-
注意: 里面的偽代碼中有點錯誤,g應該是負梯度,也就是 g:=?JT?pg:=-J^T \epsilon_{p}g:=?JT?p?。
-
?TΣy?1?\epsilon^T\Sigma_y^{-1}\epsilon?TΣy?1??的作用
參考文章 A Brief Description of the Levenberg-Marquardt Algorithm Implemened by levmar中提到了這樣一段話:
注意,這篇文章里的向量xxx(是本文中的真實值y=[y0,y1,?,ym?1]Ty=[y_0,y_1,\cdots,y_{m-1}]^Ty=[y0?,y1?,?,ym?1?]T)與本文的xxx意義不一樣。因此下面本文用yyy代替這篇文章的xxx。?TΣy?1?\epsilon^T\Sigma_y^{-1}\epsilon?TΣy?1??的作用是消除不同yiy_iyi?有可能有不同量級的影響。
我們假設Σy\Sigma_yΣy?為對角矩陣,也就是yiy_{i}yi?之間相互獨立,則對角值σi\sigma_iσi?為yiy_iyi?的方差,σi\sigma_iσi?表示了yiy_iyi?的變化范圍(可以理解為量級)。量級越大,那么對應誤差?i\epsilon_i?i?的值變化范圍也會大,因此在優化過程中會重點優化?i\epsilon_i?i?。因此我們要避免這種由量級導致的誤差過大或過小。因此算法以?TΣy?1?\epsilon^T\Sigma_y^{-1}\epsilon?TΣy?1??作為損失值,代替?T?\epsilon^T \epsilon?T?。
若Σy\Sigma_yΣy?不是對角矩陣,但因為協方差矩陣和協方差矩陣的逆都是正定對稱矩陣(只要沒有互相關變量)。因此Σy?1\Sigma_y^{-1}Σy?1?可分解為QΛ?1QTQ\Lambda^{-1} Q^TQΛ?1QT。而?TΣy?1?\epsilon^T\Sigma_y^{-1}\epsilon?TΣy?1??=(?TQ)Λ?1(QT?)(\epsilon^TQ)\Lambda^{-1} (Q^T\epsilon)(?TQ)Λ?1(QT?),把(QT?)(Q^T\epsilon)(QT?)當成新的隨機變量。而(QT?)(Q^T\epsilon)(QT?)的協方差矩陣為Λ\LambdaΛ,因此也實現了消除量級影響。 -
μ\muμ初始值
在參考文章A Brief Description of the Levenberg-Marquardt Algorithm Implemened by levmar的偽代碼里,μ\muμ的初始值如下圖所示。其中maxi=1,?,m(Hii)max_{i=1,\cdots,m}(H_{ii})maxi=1,?,m?(Hii?)(參考文章的AAA等于本文的HHH)。這其實是為了讓μ\muμ和HHH對角線上的值的數量級一致。因為我們有H+μIH+\mu IH+μI,因此μ\muμ是加到HHH的對角線上的。
-
參考文章建議的初始值 :
-
非線性最小二乘法資料
- 《Methods for non-linear least squares problems》
總結
- 上一篇: bzoj 1208
- 下一篇: Halcon图像增强方法与原理概述