日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

LM算法原理

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LM算法原理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

非線性最小二乘法優(yōu)化

高斯-牛頓法

參考文章:[優(yōu)化] Gauss-Newton非線性最小二乘算法
算法流程如下圖(來(lái)自參考文章)所示:

接下來(lái)本文使用的數(shù)學(xué)符號(hào)意義與上圖一樣。其中xxx是需要求解的參數(shù),f(x)f(x)f(x)是一個(gè)殘差向量。比如有一個(gè)優(yōu)化問(wèn)題,y=asin(wt+b)+cy=asin(wt+b)+cy=asin(wt+b)+c,給出m個(gè)數(shù)據(jù)(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)||^2f(x)2(向量二范數(shù))就是最小二乘法的損失值。
設(shè)損失函數(shù)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)的雅可比矩陣,假設(shè)xxx的長(zhǎng)度為n,f(x)f(x)f(x)長(zhǎng)度為m,則J(X)J(X)J(X)矩陣大小為(m,n)。
H=JTJH=J^TJH=JTJf(x)f(x)f(x)的黑塞矩陣的近似矩陣。B=?JTf(x)B=-J^Tf(x)B=?JTf(x)為損失函數(shù)l(x)l(x)l(x)12\frac{1}{2}21?只是為了求導(dǎo)后約掉∣∣f(x)∣∣2||f(x)||^2f(x)2的指數(shù)2)的負(fù)梯度??l(x)?x-\frac{\partial l(x)}{\partial x}??x?l(x)?

最速下降法

參考文章:

  • 【最優(yōu)化】一文搞懂最速下降法
  • 【最優(yōu)化】為什么最速下降法中迭代方向是鋸齒形的?

LM算法

在高斯-牛頓法中引入μ\muμ得到LM算法

引入μ\muμ的意義

  • 高斯牛頓法的缺點(diǎn)
    • H有可能不可逆
      首先,H=JTJH=J^TJH=JTJ為半正定對(duì)稱矩陣(注:形如ATAA^TAATA(A為任意矩陣)都是半正定對(duì)稱矩陣,這個(gè)定理是奇異值分解的基礎(chǔ)),可以分解為H=QΛQTH=Q\Lambda Q^TH=QΛQT,其中矩陣QQQ的每個(gè)列向量為HHH的特征向量,Λ\LambdaΛ為對(duì)角矩陣,對(duì)角元素為對(duì)應(yīng)特征向量的特征值。
      因?yàn)?span id="ozvdkddzhkzd" class="katex--inline">HHH為半正定對(duì)稱矩陣,因此特征值有可能為0,因此不可逆。因?yàn)槿鬑可逆,則H?1=QΛ?1QTH^{-1}=Q\Lambda ^{-1}Q^TH?1=QΛ?1QT,其中Λ?1\Lambda ^{-1}Λ?1對(duì)角元素為對(duì)應(yīng)特征值λ\lambdaλ的倒數(shù)1λ\frac{1}{\lambda}λ1?,因此若特征值為0,則HHH不可逆。
    • 步長(zhǎng)Δx\Delta xΔx可能過(guò)大,導(dǎo)致發(fā)散
      由高斯牛頓法的算法流程可知,其核心是在點(diǎn)xkx_kxk?處利用l(x)l(x)l(x)的泰勒展開(kāi),用二次多項(xiàng)式pk(x)p_k(x)pk?(x)(注:實(shí)際上pk(x)p_k(x)pk?(x)不是真正泰勒展開(kāi)的二次多項(xiàng)式,因?yàn)榫仃?span id="ozvdkddzhkzd" class="katex--inline">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
      然后求二次多項(xiàng)式pk(x)p_k(x)pk?(x)的最小值點(diǎn)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?則是這一次迭代的結(jié)果。
      因此當(dāng)xkx_kxk?pk(x)p_k(x)pk?(x)的最小值點(diǎn)相距很遠(yuǎn)時(shí),步長(zhǎng)Δx\Delta xΔx會(huì)很大。但泰勒展開(kāi)一般只在xkx_kxk?的局部區(qū)域內(nèi)能很好的近似原始函數(shù)l(x)l(x)l(x),因此步長(zhǎng)太大算法可能會(huì)發(fā)散(損失值不降反升)。
  • 引入(非負(fù)數(shù))μ\muμ解決高斯牛頓法的缺點(diǎn)
    • 步長(zhǎng)Δx\Delta xΔx太大的問(wèn)題
      步長(zhǎng)可能太大,那么一個(gè)自然的想法就是正則化。因此,修改損失函數(shù)為:
      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
      正則化系數(shù)μ\muμ越大,則越能限制步長(zhǎng)Δx\Delta xΔx的大小。
      求解argmin?Δxpk(xk+Δx)\underset{\Delta x}{\operatorname{argmin}}\ {p_k(x_k+\Delta x)}Δxargmin??pk?(xk?+Δx)的過(guò)程如下:
      (1) 求導(dǎo):ω(Δ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不可逆的問(wèn)題
      由上面可知現(xiàn)在HHH變成了(H+μI)(H+\mu I)(H+μI),只要μ>0\mu >0μ>0,則(H+μI)(H+\mu I)(H+μI)一定可逆。因?yàn)?#xff1a;
      (1) 首先(H+μI)(H+\mu I)(H+μI)是對(duì)稱矩陣(保證了(H+μI)(H+\mu I)(H+μI)有n個(gè)正交特征向量,n為xxx的長(zhǎng)度,(H+μI)(H+\mu I)(H+μI)大小為(n,n))。
      (2) 其次(H+μI)(H+\mu I)(H+μI)HHH特征向量相同,并且:假設(shè)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對(duì)應(yīng)特征值加μ\muμ。又因?yàn)?span id="ozvdkddzhkzd" class="katex--inline">λ≥0\lambda \ge 0λ0,所以若μ\muμ大于0,則(H+μI)(H+\mu I)(H+μI)的特征值大于0。
      (3)結(jié)合(1)(2)得若μ>0\mu>0μ>0,則(H+μI)(H+\mu I)(H+μI)為對(duì)稱正定矩陣,所以(H+μI)(H+\mu I)(H+μI)可逆。

如何自動(dòng)調(diào)整μ\muμ,LM與高斯牛頓法和最速下降法的關(guān)系,算法實(shí)現(xiàn)流程

  • 如何自動(dòng)調(diào)整μ\muμ,LM與高斯牛頓法和最速下降法的關(guān)系
    參考文章:Levenberg–Marquardt算法學(xué)習(xí)
    • 其實(shí)信賴域法的本質(zhì)就是看近似函數(shù)(比如這里就是泰勒展開(kāi)的二階形式)的損失值下降量ΔLk\Delta L_{k}ΔLk?和實(shí)際損失函數(shù)的損失值下降量ΔFk\Delta F_{k}ΔFk?的比值,如果ΔFkΔLk\frac{\Delta F_{k}}{\Delta L_{k}}ΔLk?ΔFk?? 約等于1說(shuō)明近似函數(shù)在步長(zhǎng)Δk\Delta_{k}Δk?內(nèi)與實(shí)際損失函數(shù)很近似,可以保持這個(gè)步長(zhǎng)或者擴(kuò)大步長(zhǎng),否則若ΔFkΔLk\frac{\Delta F_{k}}{\Delta L_{k}}ΔLk?ΔFk??約等于0甚至是負(fù)數(shù),就縮小步長(zhǎng)。(需要保證ΔLk>0\Delta L_{k}>0ΔLk?>0
  • 算法實(shí)現(xiàn)流程
    參考文章:A Brief Description of the Levenberg-Marquardt Algorithm Implemened by levmar
    • 注意: 里面的偽代碼中有點(diǎn)錯(cuò)誤,g應(yīng)該是負(fù)梯度,也就是 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(是本文中的真實(shí)值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?有可能有不同量級(jí)的影響。
      我們假設(shè)Σy\Sigma_yΣy?為對(duì)角矩陣,也就是yiy_{i}yi?之間相互獨(dú)立,則對(duì)角值σi\sigma_iσi?yiy_iyi?的方差,σi\sigma_iσi?表示了yiy_iyi?的變化范圍(可以理解為量級(jí))。量級(jí)越大,那么對(duì)應(yīng)誤差?i\epsilon_i?i?的值變化范圍也會(huì)大,因此在優(yōu)化過(guò)程中會(huì)重點(diǎn)優(yōu)化?i\epsilon_i?i?。因此我們要避免這種由量級(jí)導(dǎo)致的誤差過(guò)大或過(guò)小。因此算法以?TΣy?1?\epsilon^T\Sigma_y^{-1}\epsilon?TΣy?1??作為損失值,代替?T?\epsilon^T \epsilon?T?
      Σy\Sigma_yΣy?不是對(duì)角矩陣,但因?yàn)閰f(xié)方差矩陣和協(xié)方差矩陣的逆都是正定對(duì)稱矩陣(只要沒(méi)有互相關(guān)變量)。因此Σ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?)當(dāng)成新的隨機(jī)變量。而(QT?)(Q^T\epsilon)(QT?)的協(xié)方差矩陣為Λ\LambdaΛ,因此也實(shí)現(xiàn)了消除量級(jí)影響。

    • μ\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)。這其實(shí)是為了讓μ\muμHHH對(duì)角線上的值的數(shù)量級(jí)一致。因?yàn)槲覀冇?span id="ozvdkddzhkzd" class="katex--inline">H+μIH+\mu IH+μI,因此μ\muμ是加到HHH的對(duì)角線上的。

    • 參考文章建議的初始值 :

非線性最小二乘法資料

  • 《Methods for non-linear least squares problems》

總結(jié)

以上是生活随笔為你收集整理的LM算法原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。