在牛頓演算法中我們要面對逆向的hessian以及二階的偏導。導致我們的計算量很大,為了提高效率,如果無法使用hessian矩陣h(x),或者如果計算逆矩陣的計算量太大(複雜度為o(n ^ 3),則擬牛頓法可以 僅可用於基於一階導數,f( x)(具有複雜度 o(n ^ 2))的梯度g來建立乙個近似hessian的矩陣或其逆的近似矩陣 ,類似於先前考慮的broyden方法。我們可以使用擬牛頓演算法。
下面我們考慮最小化函式f(x)。 圍繞點x_n+1進行泰勒展開得到如下方程:
下面對x求導我們可以得到:
evaluating at x=x_n,並且設g(x_n) = g_n那麼上面的式子就可以變為:
其中矩陣b _n 是hessian矩陣h_n 的正割近似,最後的等式稱為割線方程。 為了方便起見,我們進一步定義:
那麼上面的公式可以變為:
那麼我們有了hessian的近似矩陣,這樣我們就可以達成了擬牛頓演算法 的條件。
擬牛頓步驟:
初始化x_0 以及b_0 設定n=0
計算梯度g_n 並且找到向量:
計算:更新公式來滿足擬牛頓演算法:
如果達到終止條件,則結束,沒達到條件則返回第二步n=n+1。
在我們的這個求解區域性最小值中, b_n也就是我們的近似矩陣,要是乙個正定舉證。(正定矩陣的定義看我的另一篇文章)
sr1 是擬牛頓演算法中的一種,這裡b_n的更新需要新增乙個附加項。
在這裡u是乙個向量。uut 是第一級的矩陣。以及加上我們的割線條件,就可以得到:
該方程式表示u與w=y_n - b_n s_n的方向相同,因此可以寫成 u = cw 。 換回來我們得到:
然後我們求的c等於:
那麼bn就會變成:
接下來反轉b_n+1我們可以得到:
要想得到上面的結果,我們還可以使用對偶分割條件的方法:
但是sr1 演算法有個問題就是需要bn的逆向保持正定。
在整個迭代過程中可能很難維持這一要求。 在以下dfp和bfgs方法中可以避免此問題。
在這個演算法中需要新增兩個額外附加項:
更具割線定理,我們可以得到:
然後將簡化拓展:
像bfgs和dfp一樣,它可能會出現捨入錯誤和行搜尋不準確的情況。 bfgs和sr1更新之間的顯著區別是,如果bk為正定且skyk> 0,則bfgs保證產生正定bk + 1,而sr1不具有此屬性。sr1公式在許多情況下都可以生成更準確的hessian近似值。
bfgs優於dfp的原因在於,bfgs有自校正的性質(self-correcting property)。通俗來說,如果某一步bfgs對hessian陣的估計偏了,導致優化變慢,那麼bfgs會在較少的數輪迭代內(取決於線搜尋的質量),校正估計的hessian陣。
最優化演算法3 擬牛頓法1
計算量大,每次都需要計算hesse矩陣,對於自變數維數較高的優化函式,計算量是相當大的 hesse矩陣可能存在不正定的問題,此時求得的迭代方向可能不是下降方向 為了解決上述問題,需要求hesse矩陣近似矩陣 b 將函式在 x 處二階展開 f x f x g t x x frac x x tg x x...
牛頓法與擬牛頓法學習筆記(四)BFGS 演算法
機器學習演算法中經常碰到非線性優化問題,如 sparse filtering 演算法,其主要工作在於求解乙個非線性極小化問題。在具體實現中,大多呼叫的是成熟的軟體包做支撐,其中最常用的乙個演算法是 l bfgs。為了解這個演算法的數學機理,這幾天做了一些調研,現把學習過程中理解的一些東西整理出來。目...
最優化演算法3 2 擬牛頓法 BFGS演算法
相較於 最優化演算法3 擬牛頓法1 bfgs演算法使用秩二矩陣校正hesse矩陣的近似矩陣 b 即 b b k alpha mu k mu k t beta nu k nu k t 將函式在 x 處二階展開 f x f x g t x x frac x x tg x x 上式求導等於0,得 g k ...