在MIT的公開課[Introduction to Computer Science and Programming Using Python] 6.00.1x 中,Eric Grimson曾提到過迭代算法的思想就在於將當前迭代點向正確的方向移動一定的“步長”,然後檢驗目標值是否滿足一定要求。同時,“方向”和“步長”也是不同優化算法主要關心的兩個方面。除此之外,我們還關心不同優化算法的收斂速率(rate of convergence),這表徵了算法是否能在儘量少的迭代次數之外逼近最優解。本文以最速下降法(Steep Descent)和牛頓法(Netwon Method)爲例,說明不同算法的收斂速率。本文主要參考了Jorge Nocedal 和 Stephen J. Wright 的 Numerical Optimization 一書(第二版)。
最速下降法(Steep Descent)
最速下降法的思路是以當前迭代點的導數方向的相反方向,也就是下降最快的方向(名字由來),爲前進方向。步長選取的一種思路是選擇相應的步長使得目標函數取在前進方向上取得最小值。
這裏我們以一個簡單的二次規劃命題爲例進行說,即
因此,最速下降法的迭代軌跡可以用下圖描述。
圖片來源:Nocedal, Jorge, and Stephen J. Wright. “Numerical Optimization 2nd.” (2006).
通過仿真,可以看出,如下圖這樣一個二次函數
在二維投影上的迭代過程如下圖:
在Numerical Optmization一書中,證明了最速下降法是線性收斂的(一階收斂)。首先,針對二次函數有下式成立:
對於一般性的二階可導的函數,在滿足一定要求的前提下,也有下面的收斂速率的描述:
從這個結論可以看出,通常意義下,我們可以用條件數作爲一個優化命題難解程度的衡量,如果條件數越大,在上圖等高線中的圓圈就越扁,相應的收斂速度就越慢。而當條件數較小時,尤其在極端情況下,矩陣的特徵值都全等時,上圖的等高線就呈現完美的圓形,因此一步就可以收斂。
Numerical Optmization一書中對這一結果的評論是=“the steepest descent method can have an unacceptably slow rate of convergence, even when the Hessian is reasonably well conditioned.”並舉例說,一個條件數爲800的對象,
但是利用上面的結論,如果我們提前知道目標函數的最優值
從圖中可以看出,並不能說這裏給出的上界是“緊”還是“不緊”。
牛頓法(Newton Method)
相對於最速下降法,牛頓法的下降方向並不是迭代點的導數方向,而是在迭代點出Taylor展開到二階後取得最小值的方向。即對於一般性的連續二階可到的函數
因爲Newton法是求二階近似後的最小值,因此對於無約束的二次規劃,Newton法可以一步收斂到最小值,如圖:
對於一般性的函數,上面的Newton Step並不能保證目標函數單調下降,但在滿足一定條件的情況下,並在最優點附近的鄰域內,可以證明牛頓法是二階收斂的,也就是說收斂速度要快於最速下降法。具體的證明在這裏不加贅述,這裏只給出推導的結論:
Ref.
Nocedal, Jorge, and Stephen J. Wright. “Numerical Optimization 2nd.” (2006).