非線性優化

最速下降法(梯度下降)

  • 定義問題
    對於一個非線性函數f(x)f(\textbf{x}),目標求:minf(x)  xRn\min f(\boldsymbol{x}) , \; \mathbf{x}\in\mathbb{R}^n

  • 數學理論

  1. 我們需要找到一個下降的方向,使得f(x)f(\mathbf{x})隨着x的迭代而逐漸減小,直到x\mathbf{x}收斂於x\mathbf{x^*}
    f(xk+1)<f((xk)f(\mathbf{x_{k+1}})<f((\mathbf{x_k})
    我們需要選擇適當的方向d\mathbf{d}和 步長α\alphaf(xk+αd)<f((xk)f(\mathbf{x_{k}+\alpha\mathbf{d}})<f((\mathbf{x_k})

  2. f(x)f(x)在進行一階泰勒展開:f(x+αd)=f(x)+αf(x)Tdf(x)f(\boldsymbol{x}+\alpha\mathbf{d}) = f(\mathbf{x})+\alpha\triangledown f(\mathbf{x})^T\mathbf{d},\triangledown f(\mathbf{x})f(x)f(x)的梯度,f(x)T\triangledown f(\mathbf{x})^T可以用JJ雅克比代替:
    f(x+αd)=f(x)+αJdf(\boldsymbol{x}+\alpha\mathbf{d}) = f(\mathbf{x})+\alpha \mathbf{J} \mathbf{d}

  3. 因爲α>0\alpha>0,所以Jd<0\mathbf{J} \mathbf{d}<0,有:Jd=Jdcosθ\mathbf{J} \mathbf{d}= \parallel \mathbf{J}\parallel \parallel \mathbf{d}\parallel \cos\theta
    θ\thetaπ-\pi也就是d取負梯度的方向:JT-\mathbf{J}^T,到達最小值。

  4. 對於α\alpha,我們在最速下降的方向進行-維的搜索,即α\alpha滿足f(xk+αkdk)=argminα0f(xk+αdk)f(\boldsymbol{x_k}+\alpha_k\mathbf{d_k}) = \arg \min_{\alpha\geqslant 0}f(\boldsymbol{x_k}+\alpha\mathbf{d_k})

  • 算法:
  1. 給定初始點x0\mathbf{x_0},和允許的誤差ε>0\varepsilon>0,置k=0k=0
  2. 計算搜索方向dk=f(xk)\mathbf{d_k}=- \triangledown f(\mathbf{x_k})
  3. dkε\parallel\mathbf{d_k}\parallel\leqslant\varepsilon,則停止;否則從xk\boldsymbol{x_k}出發,沿着dk\mathbf{d_k}進行一維的搜索,求出αk\alpha_k使得:f(xk+αkdk)=argminα0f(xk+αdk)f(\boldsymbol{x_k}+\alpha_k\mathbf{d_k}) = \arg \min_{\alpha\geqslant 0}f(\boldsymbol{x_k}+\alpha\mathbf{d_k})
  4. xk+1=xk+αkdk\mathbf{x_{k+1}}=\mathbf{x_k}+\alpha_k\mathbf{d_k},置k=k+1k=k+1,轉步驟2;

  • 算法評價:

缺點:

  1. 因爲每次迭代的梯度方向和下一次的梯度方向是正交的,當到了最優值的附近,震動收斂慢。
  2. 另外,如果f(x)f(x)的海森矩陣正定,最大和最小特徵值的比r=Aar=\frac{A}{a}稱爲條件數,條件數越小,收斂越快,相反則慢。

Trick:

  1. 一般最大特徵值和最小特徵值和數據維度裏面的數據Scale有關,也就是說可能是因爲數據的量級差的比較多,這時候可以通過Scale進行數據的縮放,來達到收斂更快的效果。

例題:參考最優化理論和算法p283,例10.1.1

牛頓法->阻尼牛頓->修正阻尼牛頓

  • 定義問題
    對於一個非線性函數f(x)f(\textbf{x}),目標求:minf(x)  xRn\min f(\boldsymbol{x}) , \; \mathbf{x}\in\mathbb{R}^n

  • 數學理論

  1. f(x)f(\textbf{x})進行二階泰勒展開:
    (1)f(x+Δx)=f(x)+JΔx+12ΔxTHΔxf(\boldsymbol{x}+\Delta \mathbf{x}) = f(\mathbf{x})+J\Delta\mathbf{x}+\frac{1}{2}\Delta \mathbf{x}^TH\Delta \mathbf{x}\tag{1}
    xk\mathbf{x_k}處,求ΔxkargminΔxf(xk+Δx)\Delta\mathbf{x_k}=\arg \min_{\Delta\mathbf{x}} f(\mathbf{x_k}+\Delta\mathbf{x})

  2. 讓二次的1式對Δx\Delta\mathbf{x}求導,並令其爲0,得到穩定點:
    (2)JT+HΔx=0J^T+H\Delta \mathbf{x}=0\tag{2}
    得到Δxk=H1JT\Delta\mathbf{x_k}=-H^{-1}J^T

注意,在局部最優解的附近,x+Δx\boldsymbol{x}+\Delta \mathbf{x}是最優解,但是當初始點遠離極小點的時候,牛頓法可能不收斂,原因之一牛頓方向:Δxk=H1JT\Delta\mathbf{x_k}=-H^{-1}J^T不一定是下降的方向,目標值有可能上升。因此對牛頓法提出了修正,提出阻尼牛頓法

  1. 阻尼牛頓法在原始的牛頓法的基礎上添加:沿着牛頓方向進行一維的搜索,迭代公式:
    xk+λkdk\boldsymbol{x_k}+\lambda_k\mathbf{d_k}
    其中dk=Hk1JkT\mathbf{d_k}=-H_k^{-1}J_k^T爲牛頓方向,λk\lambda_k爲搜索步長,滿足:
    f(xk+λkdk)=argminλf(xk+λdk)f(\boldsymbol{x_k}+\lambda_k\mathbf{d_k}) = \arg \min_{\lambda}f(\boldsymbol{x_k}+\lambda\mathbf{d_k})

注意,原始牛頓法和阻尼牛頓法有着共同的缺點,一是可能奇異,而是可能非正定,這樣無法確定後繼點,進而做進一步修正

  1. 阻尼牛頓法的進一步修正,阻尼牛頓法用的搜索方向也是牛頓方向,解決海森矩陣非正定的基本思想就是:修正HkH_k構造一個對稱的正定矩陣GkG_k,用GkG_k代替2式中的H得到方程:
    (3)Gkdk=JTG_k\mathbf{d_k} = -J^T\tag{3}
    算出dk\mathbf{d_k}再以此方向做一維的搜索

  2. 構造GkG_k的方法之一就是另Gk=H+εkIG_k=H+\varepsilon_kIII是單位陣,只要εk\varepsilon_k是一個適當的正數,GkG_k就是一個對稱的正定矩陣。事實上,如果αk\alpha_kHkH_k的特徵值,那麼αk+εk\alpha_k+\varepsilon_kGkG_k的特徵值,只要εk\varepsilon_k取的足夠大,GkG_k所有的特徵值爲正,保證了正定性。

  3. 注意的是,當xk\mathbf{x_k}爲鞍點的時候,即梯度爲0,海森矩陣不定:
    JkT=0H-J^T_k=0;H不定
    那麼根據3式無法求出牛頓方向dk\mathbf{d_k},這時候dk\mathbf{d_k}可以取負曲率方向,即滿足:dkTHdk<0\mathbf{d_k} ^TH\mathbf{d_k} <0再進行一維搜索,必定能使目標函數下降。

  • 阻尼牛頓算法:
  1. 給定初始點x0\mathbf{x_0},和允許的誤差ε>0\varepsilon>0,置k=0k=0
  2. 計算JkTJ_k^THk1H_k^{-1}
  3. J<ε\parallel J\parallel<\varepsilon則停止迭代,否則令:dk=Hk1JkT\mathbf{d_k}=-H_k^{-1}J_k^T
  4. xk\mathbf{x_k} 出發,沿着dk\mathbf{d_k}做一維的搜索,滿足:f(xk+λkdk)=argminλf(xk+λdk)f(\boldsymbol{x_k}+\lambda_k\mathbf{d_k}) = \arg \min_{\lambda}f(\boldsymbol{x_k}+\lambda\mathbf{d_k})
  5. xk+1=xk+λkdkk=k+1\mathbf{x_{k+1}}=\mathbf{x_k}+\lambda_k\mathbf{d_k};k=k+1轉步驟2

  • 算法評價:
  1. 牛頓法:
  • 優點:對於二次正定函數,經過一次迭代便達到最優點,對於非二次函數,若二次性較強或者迭代點已經進入極點附近收斂很快
  • 缺點:H矩陣計算困難,奇異,非正定等情況

  1. 阻尼牛頓法:
  • 優點:能保證每次迭代基本會下降,絕不會上升
  • 缺點:H矩陣計算困難,奇異,非正定等情況

  1. 阻尼牛頓法的修正:
  • 優點:保證了每次迭代能夠下降,且解決了海森矩陣非正定,奇異的問題
  • 缺點:G矩陣計算困難,多了ε\varepsilon的選取策略,算法變得複雜


高斯牛頓法

高斯牛頓法主要解決非線性最小二乘問題。

  • 定義問題
    對於一個 殘差函數f(x)f(\textbf{x}),目標求:minF(x)=mini=1m12fi(x)22\min F(\mathbf{x}) =\min \sum_{i=1}^{m}\frac{1}{2}\left \| f_i(\mathbf{x}) \right \|_2^2

  • 數學理論

  1. 定義爲f(x)=[f1(x)fm(x)]   f(x)Tf(x)=i=1mfi(x)22   J=[J1(x)Jm(x)]\mathbf{f}(\mathbf{x})=\begin{bmatrix} f_1(x) \\ \cdots \\ f_m(x) \\ \end{bmatrix};\, \, \, \mathbf{f}(\mathbf{x})^T\mathbf{f}(\mathbf{x})=\sum_{i=1}^{m}\left \| f_i(\mathbf{x}) \right \|_2^2;\, \, \,\mathbf{J}=\begin{bmatrix} J_1(\mathbf{x})\\ \cdots \\ J_m(\mathbf{x}) \end{bmatrix}

  2. f(x)\mathbf{f}(\mathbf{x})進行一階泰勒展開:(這裏是殘差函數,不是目標函數,和最速下降、牛頓法不同)
    (1)f(x+Δx)=f(x)+JΔx\mathbf{f}(\boldsymbol{x}+\Delta \mathbf{x}) = \mathbf{f}(\mathbf{x})+\mathbf{J}\Delta\mathbf{x}\tag{1}

  3. 將1式帶入F(x):
    (2)F(x+Δx)L(Δx)=12f(x+Δx)Tf(x+Δx)=12fTf+fTJΔx+12ΔxTJTJΔx=F(x)+fTJΔx+12ΔxTJTJΔxF(\mathbf{x}+\Delta \mathbf{x})\approx L\left (\Delta \mathbf{x} \right )=\frac{1}{2}\mathbf{f}(\boldsymbol{x}+\Delta \mathbf{x})^T\mathbf{f}(\boldsymbol{x}+\Delta \mathbf{x}) \\ =\frac{1}{2}\mathbf{f}^T\mathbf{f}+\mathbf{f}^T\mathbf{J}\Delta \mathbf{x}+\frac{1}{2}\Delta \mathbf{x}^T\mathbf{J}^T\mathbf{J}\Delta \mathbf{x}\\=F(\mathbf{x})+\mathbf{f}^T\mathbf{J}\Delta \mathbf{x}+\frac{1}{2}\Delta \mathbf{x}^T\mathbf{J}^T\mathbf{J}\Delta \mathbf{x}\tag{2}

  4. 令2式對Δx\Delta x求導=0:
    (3)(JTJ)Δx=JTf\left ( \mathbf{J}^T\mathbf{J} \right )\Delta \mathbf{x}=-\mathbf{J}^T\mathbf{f}\tag{3}
    3式也稱作normal equation,或者也叫Gauss-Newton 公式。另外由2式得:F(x)=fTJ,F(x)JTJF^{'} (\mathbf{x})=\mathbf{f}^T\mathbf{J},F^{''} (\mathbf{x})\approx\mathbf{J}^T\mathbf{J}


  • 高斯牛頓算法:
  1. 給定初始點x0\mathbf{x_0},運行誤差ε>0\varepsilon>0
  2. 計算函數值和一階導數:fi(xk)=[f1(xk)f2(xk)fm(xk)]J=[f1(xk)x1f1(xk)xnfm(xk)x1fm(xk)xn] f_i(\mathbf{x_k})=\begin{bmatrix} f_1(\mathbf{x_k})\\ f_2(\mathbf{x_k})\\ \cdots\\ f_m(\mathbf{x_k}) \end{bmatrix};\mathbf{J}=\begin{bmatrix} \frac{\partial f_1(\mathbf{x_k})}{\partial x_1}& \cdots & \frac{\partial f_1(\mathbf{x_k})}{\partial x_n} \\ \vdots & \ddots & \vdots & \\ \frac{\partial f_m(\mathbf{x_k})}{\partial x_1}& \cdots & \frac{\partial f_m(\mathbf{x_k})}{\partial x_n} & \end{bmatrix}
  3. 根據式3求出高斯-牛頓方向dk\mathbf{d_k}
  4. xk\mathbf{x_k} 出發,沿着dk\mathbf{d_k}做一維的搜索,滿足:F(xk+λkdk)=argminλF(xk+λdk)F(\boldsymbol{x_k}+\lambda_k\mathbf{d_k}) = \arg \min_{\lambda}F(\boldsymbol{x_k}+\lambda\mathbf{d_k})
  5. xk+1=xk+λkdk\mathbf{x_{k+1}}=\mathbf{x_k}+\lambda_k\mathbf{d_k}
  6. xk+1xkε\left \| \mathbf{x_{k+1}}-\mathbf{x_k }\right \|\leqslant \varepsilon,則停止,否則k=k+1,k=k+1,返回步驟2

注意:有時候JTJJ^TJ是奇異或接近奇異的,這時候解3式會有很大困難,下面一種方法對其做了修正



列文伯格-馬夸爾特

Marquardt對高斯牛頓做了修正,主要思想就是在JTJJ^TJ上加正定的對角矩陣:
(JTJ+μI)Δxlm=JTf\left ( \mathbf{J}^T\mathbf{J} +\mu \mathbf{I}\right )\Delta \mathbf{x}_{lm}=-\mathbf{J}^T\mathbf{f}


假如JTJ\mathbf{J}^T\mathbf{J}特徵值λj\lambda_j對應特徵向量vj\mathbf{v_j},得到的Δxlm=\Delta \mathbf{x}_{lm}=
j=1nvjFλj+μvj-\sum_{j=1}^{n}\frac{\mathbf{v}_j^\top \mathbf{F}^{'\top}}{\lambda_j+\mu }\mathbf{v}_j

阻尼因子μ\mu的作用

  • μ>0\mu>0保證(JTJ+μI)\left ( \mathbf{J}^T\mathbf{J} +\mu \mathbf{I}\right )正定,朝着迭代的方向進行
  • μ\mu非常大是時候,則Δxlm=1μJTf=1μF(x)T\Delta \mathbf{x}_{lm}=-\frac{1}{\mu}\mathbf{J}^T\mathbf{f}=-\frac{1}{\mu}F^{'} (\mathbf{x})^T接近最速下降法
  • μ\mu比較小的時候,則ΔxlmΔxgn\Delta \mathbf{x}_{lm}\approx\Delta \mathbf{x}_{gn}接近高斯牛頓法

阻尼因子的選取與跟新策略

  • 初始值的選取
    μ0=τmax{(JTJ)ii}τ[108,1]\mu_0=\tau *\max\left \{ \left ( \mathbf{J}^T\mathbf{J} \right )_{ii} \right \};\tau \in[10^{-8},1]

  • 跟新策略

  1. 定性分析:
    如果:ΔxF(x)\Delta x\rightarrow F(x)\uparrow,則μΔx\mu \uparrow \rightarrow \Delta x\downarrow,增大阻尼減小步長,拒絕本次迭代
    如果:ΔxF(x)\Delta x\rightarrow F(x)\downarrow,則μΔx\mu \downarrow \rightarrow \Delta x\uparrow,減小阻尼增大步長,加快收斂,較少迭代次數

  2. 定量分析
    阻尼因子μ\mu的跟新,通過比例因子ρ\rho來確定
    ρ=F(x)F(x+Δxlm)L(0)L(Δxlm)\rho=\frac{F(\mathbf{x})-F(\mathbf{x}+\Delta \mathbf{x_{lm}})}{L(\mathbf{0})-L(\Delta \mathbf{x_{lm}})}
    其中L(0)L(Δxlm)=fTJΔxlm12ΔxlmTJTJΔxlmL(\mathbf{0})-L(\Delta \mathbf{x_{lm}})=-\mathbf{f}^T\mathbf{J}\Delta \mathbf{x_{lm}}-\frac{1}{2}\Delta \mathbf{x_{lm}}^T\mathbf{J}^T\mathbf{J}\Delta \mathbf{x_{lm}}

在這裏插入圖片描述

(1). Marquardt策略

首先比例因子的分母始終 > 0(L(x)下降的),如果:

  • ρ<0\rho<0,則F(x)F(x)\uparrow,則μΔx\mu \uparrow \rightarrow \Delta x\downarrow,增大阻尼減小步長
  • 如果 ρ>0\rho>0且比較大,減小μ\mu,讓LM接近Gauss-Newton,加快收斂
  • 反之,如果是比較小的正數,增大阻尼μ\mu,縮小迭代步長。

if:ρ<0.25μ:=u2  else  if:ρ>0.75μ:=μ/3if :\rho<0.25\\ \mu:=u*2\\\;\\else\; if:\rho>0.75\\\mu:=\mu/3

(2). Nielsen策略(g2o, ceres採用)

if:ρ>0μ:=μmax{13,1(2ρ1)3};    ν:=2  elseμ:=μν;    ν:=2νif :\rho>0\\ \mu:=\mu*\max\left \{ \frac{1}{3},1-\left ( 2\rho-1 \right )^3 \right \};\;\;\nu:=2\\ \; \\else\\ \\ \mu:=\mu*\nu;\; \;\nu:=2*\nu



魯棒核函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章