非线性优化算法总结
非線性優化算法總結
文章目錄
- 非線性優化算法總結
- 一、非線性最小二乘問題
- 二、最速梯度下降法和牛頓法
- 三、高斯牛頓法
- 四、LM( Levenberg-Marquadt)法
一、非線性最小二乘問題
最小二乘法形式如下式:
這里Target(θ)函數為目標函數,在機器學習中就是損失函數,
這個函數為預測值,在機器學習中就是模型輸出值,yi是真實值或理論值。
那么 非線性最小二乘 就很容易理解了,目標參數函數和參數的關系是非線性。這里要優化的參數為θ。
對于矩陣形式,這里我們簡單一點:直接把簡單的非線性最小二乘問題定義為:
這里要優化的參數就是X。其中自變量x∈Rn,f(x)是任意的非線性函數,并設它的維度為m,即f(x)∈Rm.如果 f 是個數學形式上很簡單的函數,那問題也許可以用解析形式來求。令目標函數的導數為零,然后求解 x 的最優值,就和一個求二元函數的極值一樣:
解此方程,就得到了導數為零處的極值。它們可能是極大、極小或鞍點處的值,只要挨個兒比較它們的函數值大小即可。但是導數不一定可以直接求解x,這個導函數可能是一個復雜的非線性方程。這種情況下一般采用迭代來求解,從一個初始值出發,不斷地更新當前的優化變量,使目標函數下降。具體步驟可以表示為 :
這讓求解導函數為零的問題,變成了一個不斷尋找梯度并下降的過程。直到某個時刻增量非常小,無法再使函數下降。此時算法收斂,目標達到了一個極小,我們完成了尋找極小值的過程。
二、最速梯度下降法和牛頓法
首先,我們將目標函數在X附近進行泰勒展開:
這里如果看不懂的話就復習一下高數中的泰勒展開式和簡單矩陣求導。這里的J(x)是f(x)關于x的導數(雅可比矩陣),H(x)是二階導數(海森矩陣)。我們可以選擇保留泰勒公式的一階導數和二階導數,如果保留一階導數,則增量的解就是:
它的直觀意義非常簡單,只要我們找到梯度然后沿著反向梯度方向前進即可。當然,我們還需要該方向上取一個步長 λ,求得最快的下降方式。這種方法被稱為最速梯度下降法或是一階梯度法。
另一方面,如果保留二階梯度信息,那么增量方程為:
對Δx求導數并令它等于0,則
就得到了增量的解:
這種方法稱為牛頓法或二階梯度法,它的迭代公式可以表示為:
這兩種方法只要把函數在迭代點附近進行泰勒展開,并針對更新量作最小化即可。由于泰勒展開之后函數變成了多項式,所以求解增量時只需解線性方程即可,避免了直接求導函數為零這樣的非線性方程的困難。這兩種方法也存在它們自身的問題。最速梯度下降法過于貪心,容易走出鋸齒路線,反而增加了迭代次數。而牛頓法則需要計算目標函數的 H 矩陣,這在問題規模較大時非常困難,我們通常傾向于避免 H 的計算。
三、高斯牛頓法
Gauss Newton 是最優化算法里面最簡單的方法之一。它的思想是將 f(x) 進行一階的
泰勒展開(請注意不是對下面的目標函數 進行展開)
而是如下展開:
這里 J(x) 為 f(x) 關于 x 的導數,實際上是一個 m × n 的矩陣,也是一個雅可比矩陣。根據前面的框架,當前的目標是為了尋找下降矢量 ?x,使得 ∥f (x + ?x)∥2 達到最小。為了求 ?x,我們構建 一個線性的最小二乘問題:
根據極值條件,將上述目標函數對 ?x 求導,并令導數為零。由于這里考慮的是 ?x 的導數(而不是 x),我們最后將得到一個線性的方程。為此,先展開目標函數的平方項:
求上式關于 ?x 的導數,并令其為零:
我們要求解的變量是 ?x,這是一個線性方程組,我們稱它為增量方程或高斯牛頓方程 (Gauss Newton equations) 或者正規方程 (Normal equations)。我們把左邊的系數定義為 H,右邊定義為 g,那么上式變為:
對比牛頓法可見,高斯牛頓法用 J矩陣的轉置乘以J矩陣作為牛頓法中二階 H 矩陣的近似,從而省略了計算 H 的過程。求解增量方程是整個優化問題的核心所在。原則上,它要求近似的矩陣H是可逆的(而且是正定的),而實際計算中得到的JTJ卻是半正定的。也就是使用高斯牛頓法會出現JTJ為奇異或者病態情況,此時增量的穩定性較差,導致算法不收斂。即使H非奇異也非病態,如果求得的Δx非常大,也會導致我們采用的局部近似不夠正確,這樣以來可能不能保證收斂,哪怕是還有可能讓目標函數更大。即使高斯牛頓法具有它的缺點,但是很多非線性優化可以看作是高斯牛頓法的一個變種,這些算法結合了高斯牛頓法的優點并修正其缺點。例如LM算法,盡管它的收斂速度可能比高斯牛頓法更慢,但是該方法健壯性更強,也被稱為阻尼牛頓法。
四、LM( Levenberg-Marquadt)法
由于 高斯牛頓方法中采用的近似二階泰勒展開只能在展開點附近有較好的近似效果,所以我們很自然地想到應該給 ?x 添加一個信賴區域(Trust Region),不能讓它太大而使得近似不準確。非線性優化種有一系列這類方法,這類方法也被稱之為信賴區域方法 (Trust Region Method)。在信賴區域里邊,我們認為近似是有效的;出了這個區域,近似可能會出問題。一個比較好的方法是根據我們的近似模型跟實際函數之間的差異來確定這個范圍:如果差異小,我們就讓范圍盡可能大;如果差異大,我們就縮小這個近似范圍。因此,考慮使用:
來判斷泰勒近似是否夠好。ρ 的分子是實際函數下降的值,分母是近似模型下降的值。如果 ρ 接近于 1,則近似是好的。如果 ρ 太小,說明實際減小的值遠少于近似減小的值,則認為近似比較差,需要縮小近似范圍。反之,如果 ρ 比較大,則說明實際下降的比預計的更大,我們可以放大近似范圍。LM算法表示如下:
上面算法中,μ表示信賴區域的半徑,那么信賴區域就是一個球形區域,該約束認為只有在球內才是有效的,帶上矩陣D后就是一個橢球區域。在 LM 算法中,我們需要解下面的式子那樣的一個子問題來獲得梯度。
這個子問題是帶不等式約束的優化問題采用拉格朗日乘子法將上述問題轉化為一個無約束問題:
這里 λ 為 拉格朗日 乘子。仔細看上面的式子,我們根據加號把它分為左右兩部分,回想前面的高斯牛頓算法,你會發現加號左邊是一個高斯牛頓算法中的最小二乘問題,這一部分對Δx求梯度,得到增量方程:
加號右邊對Δx求梯度,得到:
我們把這兩部分合并:得到增量的線性方程:
可以看到,增量方程相比于 高斯牛頓,多了一項。如果考慮它的簡化形式,即 D = I,那么相當于求解:
當參數 λ 比較小時,H 占主要地位,這說明二次近似模型在該范圍內是比較好的,LM 方法更接近于 高斯牛頓法。另一方面,當 λ 比較大時,λI 占據主要地位,LM更接近于最速梯度下降法這說明附近的二次近似不夠好。LM 的求解方式,可在一定程度上避免線性方程組的系數矩陣的非奇異和病態問題,提供更穩定更準確的增量 ?x。
總而言之,非線性優化問題的框架,分為 Line Search 和 Trust Region 兩類。Line Search 先固定搜索方向,然后在該方向尋找步長,以最速下降法和 高斯牛頓法為代表。而 Trust Region 則先固定搜索區域,再考慮找該區域內的最優點。此類方法以 LM 為代表。實際問題中,我們通常選擇 高斯牛頓或 LM 之一作為梯度下降策略。
參考書籍《視覺SLAM十四講 從理論到實踐》
如果您認可我的文章,希望能夠關注我的微信公眾號,我會不定期更新工作中學到的東西和一些技術比較前沿的東西。
總結
- 上一篇: js 毫秒 微秒 转为 时分秒
- 下一篇: 水龙卷 waterspout