優化演算法 BFGS 原理

2021-10-25 04:19:32 字數 1566 閱讀 9680

word版本:

參考了《最優化計算方法及其matlab程式實現》這本書,以及前人的總結經驗,在本文中主要討論bfgs演算法的相關問題,並利用此方法進行演算法的求解函式的極小值。

詳細了解bfgs的推導

優化問題主流有兩種方法,一是梯度下降法,一是牛頓法。牛頓法相比於梯度下降法有收斂速度快的優勢,所以本文選擇了牛頓法中的bfgs來進行講解。

牛頓法的思想:

用迭代點xk處的一階導數(梯度)和二階導數(hesse陣)對目標函式進行二次函式近似,然後把二次函式的極小值點作為新的迭代點,並不斷重複這一過程,直至求得滿足精度的近似極小點。

對於任意乙個多元函式qk(x),在xk點進行泰勒展開獲得的函式表示式為:

其中,gk為一階偏導數,gk為hesse陣

當此二次函式取極小值時,即當多元函式qk(x)的一階導數為0時,函式取得最小值。

因此,牛頓法的迭代公式:

結論:到此為止,已經可以利用牛頓法來進行迭代優化操作了

bfgs的引入:

擬牛頓法

根據牛頓法的迭代公式可以看出,當hesse陣不正定時,不能保證所產生的方向是目標函式在處的下降方向,特別的,當hesse陣奇異時,演算法就無法繼續下去了。儘管修正牛頓法可以克服這一缺陷,但是引數uk很難把握,等等。

擬牛頓法可以克服這些缺點。

bfgs的迭代公式:

其中,bk的更新公式為:

但是會發現,還是需要求解bk的逆,這裡可以引入sherman-morrism公式,求解dk=bk的逆

那麼bfgs的迭代公式變為:

其中,

3、怎麼確定ak(二分法)

目前已經確定了dk,但是還沒有確定ak的值,需要使用線搜尋方法線搜尋方法也有很多,目前就只介紹一種,二分法

二分法是最為簡單的線搜尋方法,其主要思想是在給定範圍內取中點,在給定的足夠小的值eta左右偏移並計算

如果然後更新搜尋範圍。

最優化演算法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 ...

join演算法原理和優化

資料準備 t1 100行 id 主鍵 a t2 1000行 id 主鍵 a 索引 bindex nested loop join sql select from t1 straight join t2 on t1.a t2.a t1為驅動表,t2為被驅動表 執行流程 1.從表 t1 中讀入一行資料 ...

牛頓法與擬牛頓法學習筆記(四)BFGS 演算法

機器學習演算法中經常碰到非線性優化問題,如 sparse filtering 演算法,其主要工作在於求解乙個非線性極小化問題。在具體實現中,大多呼叫的是成熟的軟體包做支撐,其中最常用的乙個演算法是 l bfgs。為了解這個演算法的數學機理,這幾天做了一些調研,現把學習過程中理解的一些東西整理出來。目...