最優化八:高斯牛頓法、LM法

梯度法:x_{i+1} = x_i - \alpha _i \bigtriangledown f(x_i),負梯度方向

牛頓法:x_{i+1} = x_i - A_i^{-1}\bigtriangledown f(x_i),A爲Hession矩陣

高斯牛頓法:x_{i+1} = x_i +\bigtriangleup x\bigtriangleup xJ^T(x_i)J(x_i)\bigtriangleup x = -J^T(x_i)f(x_i)的解

LM法:x_{i+1} = x_i +\bigtriangleup x\bigtriangleup x(J^T(x_i)J(x_i)+\lambda D^TD )\bigtriangleup x = -J^T(x_i)f(x_i)的解

1 高斯牛頓法(Gauss-Newton)

針對優化問題求解x使得f(x)取得最小值,採用高斯牛頓法,步驟如下:

step1:給定初始點x_0

step2:對於第i此迭代,求解雅克比矩陣及函數值J(x_i),f(x_i)

step3:求解增量方程J^T(x_i)J(x_i)\bigtriangleup x = -J^T(x_i)f(x_i),得到\bigtriangleup x

step4:計算x_{i+1} = x_i + \bigtriangleup x

step5:如果\bigtriangleup x足夠小,或者迭代次數達到閾值,停止,否則重複step2-5

證明過程如下:

對函數f(x)在x_0處進行一階泰勒展開得到:

                                                           f(x) = f(x_0) + J(x_0)(x-x_0)

\bigtriangleup x = x-x_0得到:

                                                         f(x_0+\bigtriangleup x) = f(x_0) + J(x_0)\bigtriangleup x 

求解x使得f(x)取得最小值等價於求解\bigtriangleup x使得f(x_0+\bigtriangleup x)取得最小值,即:

                               \bigtriangleup x^* = argmin \frac{1}{2}\left \| f(x_0+\bigtriangleup x) \right \|^2=argmin\left \|f(x_0) + J(x_0)\bigtriangleup x \right \|^2

等式右邊平方展開得到:

                                           \frac{1}{2}(\left \| f(x_0) \right \|^2 +2f(x_0)^TJ(x_0)\bigtriangleup x + \bigtriangleup x^TJ^T(x_0)J(x_0)\bigtriangleup x )

\bigtriangleup x求導等於0得到:

                                                         J^T(x_0)J(x_0)\bigtriangleup x = -J^T(x_0)f(x_0)

得到:

                                                     \bigtriangleup x =-(J^T(x_0)J(x_0))^{-1}\cdot J^T(x_0)f(x_0)

2 LM法(Levenberg-Marquadt法

高斯牛頓法存在缺陷,就是它要求我們所用的J^T(x_0)J(x_0)矩陣是可逆的(而且是正定的),但實際數據中計算得到的JTJ卻只有半正定性。也就是說,在使用Gauss Newton方法時,可能出現JTJ爲奇異矩陣或者病態的情況,此時增量的穩定性較差,導致算法不收斂。更嚴重的是,就算我們假設H非奇異也非病態,如果我們求出來的步長△x太大,也會導致我們採用的局部近似不夠準確,這樣一來我們甚至都無法保證它的迭代收斂,哪怕是讓目標函數變得更大都是可能的。

由於Gauss-Newton方法中採用的近似二階泰勒展開只能在展開點附近有較好的近似效果,所以我們很自然地想到應該給△x添加一個信賴區域,不能讓它太大而使得近似不準確。在信賴區域裏邊,我們認爲近似是有效的;出了這個區域,近似可能會出問題。

那麼如何確定這個信賴區域的範圍呢?一個比較好的方法是根據我們的近似模型跟實際函數之間的差異來確定這個範圍:如果差異小,我們就讓範圍儘可能大;如果差異大,我們就縮小這個近似範圍。因此,考慮使用:

                                                                  \rho =\frac{f(x+\bigtriangleup x)-f(x)}{J(x)\bigtriangleup x}

來判斷泰勒近似是否夠好。ρ的分子是實際函數下降的值,分母是近似模型下降的值。如果ρ接近於1,則近似是好的。如果ρ太小,說明實際減小的值遠少於近似減小的值,則認爲近似比較差,需要縮小近似範圍。反之,如果ρ比較大,則說明實際下降的比預計的更大,我們可以放大近似範圍。

優化問題可以轉化爲如下帶約束問題:

                                                    min(f(x_i+J(x_i) \bigtriangleup x_i)), s.t.\left \| D\bigtriangleup x_i \right \|<\mu

將非線性約束轉化爲線性約束可以得到求解方程:

                                                 (J^T(x_i)J(x_i)+\lambda D^TD )\bigtriangleup x = -J^T(x_i)f(x_i)

總結LM算法流程如下:

step1: 給定初始值x0,以及初始化半徑μ。

step2: 對於第i次迭代,(J^T(x_i)J(x_i)+\lambda D^TD )\bigtriangleup x = -J^T(x_i)f(x_i),求解\bigtriangleup x

step3: 計算ρ。 若ρ>3/4,則μ=2μ; 若ρ<1/4,則μ=0.5μ;

step4: 如果ρ大於某閾值,認爲近似可行。令x_{i+1} = x_i + \bigtriangleup x

 

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