1.線性最小二乘問題
2.非線性最小二乘問題
因為它非線性,所以df/dx有時候不好求,那么可以采用迭代法(有極值的話,那么它收斂,一步步逼近):

這樣求導問題就變成了遞歸逼近問題,那么增量△xk如何確定?
這里介紹三種方法:
(1)一階和二階梯度法
將目標函數在x附近進行泰勒展開:


(2)高斯牛頓法
將f(x)一階展開:
(1)
這里J(x)為f(x)關於x的導數,實際上是一個m×n的矩陣,也是一個雅克比矩陣。現在要求下降矢量△x,使得||f(x+△x)|| 達到最小。
為求△ x,我們需要解一個線性的最小二乘問題:

這里注意變量是△ x,而非之前的x。所以是線性函數,好求。為此,先展開目標函數的平方項:


我們稱為高斯牛頓方程。我們把左邊的系數定義為H,右邊定義為g,那么上式變為:
H △x=g
跟牛頓法對比可以發現,我們用J(x)TJ(x)代替H的求法,從而節省了計算量。所以高斯牛頓法跟牛頓法相比的優點就在於此,步驟列於下:


但是,還是有缺陷,就是它要求我們所用的近似H矩陣是可逆的(而且是正定的),但實際數據中計算得到的JTJ卻只有半正定性。也就是說,在使用Gauss Newton方法時,可能出現JTJ為奇異矩陣或者病態(ill-condition)的情況,此時增量的穩定性較差,導致算法不收斂。更嚴重的是,就算我們假設H非奇異也非病態,如果我們求出來的步長△x太大,也會導致我們采用的局部近似(1)不夠准確,這樣一來我們甚至都無法保證它的迭代收斂,哪怕是讓目標函數變得更大都是可能的。
所以,接下來的Levenberg-Marquadt方法加入了α,在△x確定了之后又找到了α,從而||f(x+α△x)||2達到最小,而不是直接令α=1。
(3)列文伯格-馬誇爾特方法(Levenberg-Marquadt法)
由於Gauss-Newton方法中采用的近似二階泰勒展開只能在展開點附近有較好的近似效果,所以我們很自然地想到應該給△x添加一個信賴區域(Trust Region),不能讓它太大而使得近似不准確。非線性優化中有一系列這類方法,這類方法也被稱之為信賴區域方法(Trust Region Method)。在信賴區域里邊,我們認為近似是有效的;出了這個區域,近似可能會出問題。
那么如何確定這個信賴區域的范圍呢?
一個比較好的方法是根據我們的近似模型跟實際函數之間的差異來確定這個范圍:如果差異小,我們就讓范圍盡可能大;如果差異大,我們就縮小這個近似范圍。因此,考慮使用:
來判斷泰勒近似是否夠好。ρ的分子是實際函數下降的值,分母是近似模型下降的值。如果ρ接近於1,則近似是好的。如果ρ太小,說明實際減小的值遠少於近似減小的值,則認為近似比較差,需要縮小近似范圍。反之,如果ρ比較大,則說明實際下降的比預計的更大,我們可以放大近似范圍。
於是,我們構建一個改良版的非線性優化框架,該框架會比Gauss Newton有更好的效果。
1. 給定初始值x0,以及初始化半徑μ。
2. 對於第k次迭代,求解:
(2)
這里面的限制條件μ是信賴區域的半徑,D將在后文說明。
3. 計算ρ。
4. 若ρ>3/4,則μ=2μ;
5. 若ρ<1/4,則μ=0.5μ;
6. 如果ρ大於某閾值,認為近似可行。令xk+1=xk+△xk。
7. 判斷算法是否收斂。如不收斂則返回2,否則結束。
這里近似擴大范圍的倍數和閾值都是經驗值,亦可替換成別的數值。在式(1)中,我們把增量范圍限定在一個半徑為μ的球中。帶上D之后,這個球可以看成是個橢球。
(Levenberg提出的優化方法中,把D取成單位矩陣I,相當於直接把△x約束在球中。Marquart提出將D取成非負數對角陣---通常用
的對角元素平方根。)
無論怎樣,都需要解(2)這樣一個問題來獲得梯度,其是帶不等式約束的優化問題,我們用Lagrange乘子將它轉化為一個無約束優化問題:

λ為Lagrange乘子。展開后,化簡得到:
當λ比較小時,H占主要地位,接近於牛頓高斯法;當λ比較大時,接近於最速下降法。
L-M的求解方式,可在一定程度上避免線性方程組的系數矩陣的非奇異和病態問題,提供更穩定更准確的增量△x。
小結:



視覺SLAM里,這個矩陣往往有特定的稀疏形式,為實時求解優化問題提供了可能性。利用
稀疏形式的消元,分解,最后再求解增量,會讓求解效率大大提高。(第十講)
實踐:
1.Ceres庫(谷歌)







2.g20庫(基於圖優化)





g20步驟:

總結:

