最速下降法(梯度下降)
-
我們需要找到一個下降的方向,使得f(x)隨着x的迭代而逐漸減小,直到x收斂於x∗:
f(xk+1)<f((xk)
我們需要選擇適當的方向d和 步長α ,f(xk+αd)<f((xk)
-
將f(x)在進行一階泰勒展開:f(x+αd)=f(x)+α▽f(x)Td,▽f(x)是f(x)的梯度,▽f(x)T可以用J雅克比代替:
f(x+αd)=f(x)+αJd
-
因爲α>0,所以Jd<0,有:Jd=∥J∥∥d∥cosθ
當θ取−π也就是d取負梯度的方向:−JT,到達最小值。
-
對於α,我們在最速下降的方向進行-維的搜索,即α滿足f(xk+αkdk)=argα⩾0minf(xk+αdk)
- 給定初始點x0,和允許的誤差ε>0,置k=0;
- 計算搜索方向dk=−▽f(xk) ;
- 若∥dk∥⩽ε,則停止;否則從xk出發,沿着dk進行一維的搜索,求出αk使得:f(xk+αkdk)=argα⩾0minf(xk+αdk)
- 令xk+1=xk+αkdk,置k=k+1,轉步驟2;
缺點:
- 因爲每次迭代的梯度方向和下一次的梯度方向是正交的,當到了最優值的附近,震動收斂慢。
- 另外,如果f(x)的海森矩陣正定,最大和最小特徵值的比r=aA稱爲條件數,條件數越小,收斂越快,相反則慢。
Trick:
- 一般最大特徵值和最小特徵值和數據維度裏面的數據Scale有關,也就是說可能是因爲數據的量級差的比較多,這時候可以通過Scale進行數據的縮放,來達到收斂更快的效果。
例題:參考最優化理論和算法p283,例10.1.1
牛頓法->阻尼牛頓->修正阻尼牛頓
-
將f(x)進行二階泰勒展開:
f(x+Δx)=f(x)+JΔx+21ΔxTHΔx(1)
在xk處,求Δxk=argΔxminf(xk+Δx)
-
讓二次的1式對Δx求導,並令其爲0,得到穩定點:
JT+HΔx=0(2)
得到Δxk=−H−1JT
注意,在局部最優解的附近,x+Δx是最優解,但是當初始點遠離極小點的時候,牛頓法可能不收斂,原因之一牛頓方向:Δxk=−H−1JT不一定是下降的方向,目標值有可能上升。因此對牛頓法提出了修正,提出阻尼牛頓法
- 阻尼牛頓法在原始的牛頓法的基礎上添加:沿着牛頓方向進行一維的搜索,迭代公式:
xk+λkdk
其中dk=−Hk−1JkT爲牛頓方向,λk爲搜索步長,滿足:
f(xk+λkdk)=argλminf(xk+λdk)
注意,原始牛頓法和阻尼牛頓法有着共同的缺點,一是可能奇異,而是可能非正定,這樣無法確定後繼點,進而做進一步修正
-
阻尼牛頓法的進一步修正,阻尼牛頓法用的搜索方向也是牛頓方向,解決海森矩陣非正定的基本思想就是:修正Hk構造一個對稱的正定矩陣Gk,用Gk代替2式中的H得到方程:
Gkdk=−JT(3)
算出dk再以此方向做一維的搜索
-
構造Gk的方法之一就是另Gk=H+εkI,I是單位陣,只要εk是一個適當的正數,Gk就是一個對稱的正定矩陣。事實上,如果αk是Hk的特徵值,那麼αk+εk是Gk的特徵值,只要εk取的足夠大,Gk所有的特徵值爲正,保證了正定性。
-
注意的是,當xk爲鞍點的時候,即梯度爲0,海森矩陣不定:
−JkT=0;H不定
那麼根據3式無法求出牛頓方向dk,這時候dk可以取負曲率方向,即滿足:dkTHdk<0再進行一維搜索,必定能使目標函數下降。
- 給定初始點x0,和允許的誤差ε>0,置k=0;
- 計算JkT和Hk−1
- 若∥J∥<ε則停止迭代,否則令:dk=−Hk−1JkT
- 從xk 出發,沿着dk做一維的搜索,滿足:f(xk+λkdk)=argλminf(xk+λdk)
- xk+1=xk+λkdk;k=k+1轉步驟2
- 牛頓法:
- 優點:對於二次正定函數,經過一次迭代便達到最優點,對於非二次函數,若二次性較強或者迭代點已經進入極點附近收斂很快
- 缺點:H矩陣計算困難,奇異,非正定等情況
- 阻尼牛頓法:
- 優點:能保證每次迭代基本會下降,絕不會上升
- 缺點:H矩陣計算困難,奇異,非正定等情況
- 阻尼牛頓法的修正:
- 優點:保證了每次迭代能夠下降,且解決了海森矩陣非正定,奇異的問題
- 缺點:G矩陣計算困難,多了ε的選取策略,算法變得複雜
高斯牛頓法
高斯牛頓法主要解決非線性最小二乘問題。
-
定義爲f(x)=⎣⎡f1(x)⋯fm(x)⎦⎤;f(x)Tf(x)=i=1∑m∥fi(x)∥22;J=⎣⎡J1(x)⋯Jm(x)⎦⎤
-
將f(x)進行一階泰勒展開:(這裏是殘差函數,不是目標函數,和最速下降、牛頓法不同)
f(x+Δx)=f(x)+JΔx(1)
-
將1式帶入F(x):
F(x+Δx)≈L(Δx)=21f(x+Δx)Tf(x+Δx)=21fTf+fTJΔx+21ΔxTJTJΔx=F(x)+fTJΔx+21ΔxTJTJΔx(2)
-
令2式對Δx求導=0:
(JTJ)Δx=−JTf(3)
3式也稱作normal equation,或者也叫Gauss-Newton 公式。另外由2式得:F′(x)=fTJ,F′′(x)≈JTJ
- 給定初始點x0,運行誤差ε>0
- 計算函數值和一階導數:fi(xk)=⎣⎢⎢⎡f1(xk)f2(xk)⋯fm(xk)⎦⎥⎥⎤;J=⎣⎢⎢⎡∂x1∂f1(xk)⋮∂x1∂fm(xk)⋯⋱⋯∂xn∂f1(xk)⋮∂xn∂fm(xk)⎦⎥⎥⎤
- 根據式3求出高斯-牛頓方向dk
- 從xk 出發,沿着dk做一維的搜索,滿足:F(xk+λkdk)=argλminF(xk+λdk)
- 令 xk+1=xk+λkdk
- 若∥xk+1−xk∥⩽ε,則停止,否則k=k+1,返回步驟2
注意:有時候JTJ是奇異或接近奇異的,這時候解3式會有很大困難,下面一種方法對其做了修正
列文伯格-馬夸爾特
Marquardt對高斯牛頓做了修正,主要思想就是在JTJ上加正定的對角矩陣:
(JTJ+μI)Δxlm=−JTf
假如JTJ特徵值λj對應特徵向量vj,得到的Δxlm=
−j=1∑nλj+μvj⊤F′⊤vj
阻尼因子μ的作用:
- μ>0保證(JTJ+μI)正定,朝着迭代的方向進行
- μ非常大是時候,則Δxlm=−μ1JTf=−μ1F′(x)T接近最速下降法
- μ比較小的時候,則Δxlm≈Δxgn接近高斯牛頓法
阻尼因子的選取與跟新策略
-
初始值的選取
μ0=τ∗max{(JTJ)ii};τ∈[10−8,1]
-
跟新策略
-
定性分析:
如果:Δx→F(x)↑,則μ↑→Δx↓,增大阻尼減小步長,拒絕本次迭代
如果:Δx→F(x)↓,則μ↓→Δx↑,減小阻尼增大步長,加快收斂,較少迭代次數
-
定量分析
阻尼因子μ的跟新,通過比例因子ρ來確定
ρ=L(0)−L(Δxlm)F(x)−F(x+Δxlm)
其中L(0)−L(Δxlm)=−fTJΔxlm−21ΔxlmTJTJΔxlm
(1). Marquardt策略
首先比例因子的分母始終 > 0(L(x)下降的),如果:
- ρ<0,則F(x)↑,則μ↑→Δx↓,增大阻尼減小步長
- 如果 ρ>0且比較大,減小μ,讓LM接近Gauss-Newton,加快收斂
- 反之,如果是比較小的正數,增大阻尼μ,縮小迭代步長。
if:ρ<0.25μ:=u∗2elseif:ρ>0.75μ:=μ/3
(2). Nielsen策略(g2o, ceres採用)
if:ρ>0μ:=μ∗max{31,1−(2ρ−1)3};ν:=2elseμ:=μ∗ν;ν:=2∗ν
魯棒核函數