機器學習優化演算法 L BFGS

2021-07-29 22:07:41 字數 2209 閱讀 4806

**:

關於優化演算法的求解,書上已經介紹了很多的方法,比如有梯度下降法,座標下降法,牛頓法和擬牛頓法。梯度下降法是基於目標函式梯度的,演算法的收斂速度是線性的,並且當問題是病態時或者問題規模較大時,收斂速度尤其慢(幾乎不適用);座標下降法雖然不用計算目標函式的梯度,但是其收斂速度依然很慢,因此它的適用範圍也有侷限;牛頓法是基於目標函式的二階導數(海森矩陣)的,其收斂速度較快,迭代次數較少,尤其是在最優值附近時,收斂速度是二次的。但牛頓法的問題在於當海森矩陣稠密時,每次迭代的計算量比較大,因為每次都會計算目標函式的海森矩陣的逆,這樣一來,當問題規模較大時,不僅計算量大(有時大到不可計算),而且需要的儲存空間也多,因此牛頓法在面對海量資料時由於每一步迭代的開銷巨大而變得不適用;擬牛頓法是在牛頓法的基礎上引入了海森矩陣的近似矩陣,避免每次迭代都要計算海森矩陣的逆,擬牛頓法的收斂速度介於梯度下降法和牛頓法之間,是超線性的。擬牛頓法的問題也是當問題規模很大時,近似矩陣變得很稠密,在計算和儲存上也有很大的開銷,因此變得不實用。

另外需要注意的是,牛頓法在每次迭代時不能總是保證海森矩陣是正定的,一旦海森矩陣不是正定的,優化方向就會「跑偏」,從而使得牛頓法失效,也說明了牛頓法的魯棒性較差。擬牛頓法用海森矩陣的逆矩陣來替代海森矩陣,雖然每次迭代不能保證是最優的優化方向,但是近似矩陣始終是正定的,因此演算法總是朝著最優值的方向在搜尋。

從上面的描述可以看出,很多優化演算法在理論上有很好的結果,並且當優化問題的規模較小時,上面的任何演算法都能夠很好地解決問題。而在實際工程中,很多演算法卻失效了。比如說,在實際工程中,很多問題是病態的,這樣一來,基於梯度的方法肯定會失效,即便迭代上千上萬次也未必收斂到很好的結果;另外,當資料量大的時候,牛頓法和擬牛頓法需要儲存矩陣的記憶體開銷和計算矩陣的開銷都很大,因此也會變得不適用。

本文將介紹一種在實際工程中解決大規模優化問題時必然會用到的優化演算法:l-bfgs演算法。

上面已經提到了在面對大規模優化問題時,由於近似矩陣往往是稠密的,在計算和儲存上都是n2的增長,因此擬牛頓法變得不適用。

l-bfgs演算法就是對擬牛頓演算法的乙個改進。它的名字已經告訴我們它是基於擬牛頓法bfgs演算法的改進。l-bfgs演算法的基本思想是:演算法只儲存並利用最近m次迭代的曲率資訊來構造海森矩陣的近似矩陣。

在介紹l-bfgs演算法之前,我們先來簡單回顧下bfgs演算法。

在演算法的每一步迭代,有如下式:

式(1)中ak是步長,hk的更新通過如下公式:

在式(2)中

從式(2)到式(6)可以看出hk+1是用修正hk來得到的。需要注意的是,這裡hk表示海森矩陣的逆的近似矩陣。

在bfgs演算法中,由於hk隨著迭代次數的增加會越來越稠密,當優化問題的規模很大時,儲存和計算矩陣hk將變得不可行。

為了解決上述問題,我們可以不儲存矩陣hk,而是儲存最近m次迭代的曲率資訊,即。每當完成一次迭代,最舊的曲率資訊將被刪除,而最新的曲率資訊被儲存下來。通過這種方式,演算法保證了儲存的曲率資訊是來自於最近的m次迭代。在實際工程中,m取3到20往往能有很好的結果。除了更新矩陣hk的策略和初始化hk的方式不同外,l-bfgs演算法和bfgs演算法是一樣的。

下面將會詳細介紹一下矩陣hk的更新步驟。

在第k次迭代,演算法求得了xk,並且儲存的曲率資訊為,其中i = k-m, …, k-1。為了得到hk,演算法首先選擇乙個初始的矩陣hk

0,這是不同於bfgs演算法的乙個地方,l-bfgs演算法允許每次迭代選取乙個初始的矩陣,然後用最近的m次曲率資訊對該初始矩陣進行修正,從而得到hk。

通過反覆利用式(2),我們可以得到下式:

關於每次迭代時hk

0的初始值的設定,乙個在實踐中經常用到的有效方法為:

其中rk表示比例係數,它利用最近一次的曲率資訊來估計真實海森矩陣的大小,這就使得當前步的搜尋方向較為理想,而不至於跑得「太偏」,從而使得步長ak = 1在大多數時候都是滿足的,這樣就省去了步長搜尋的步驟,節省了時間。

在l-bfgs演算法中,通過儲存最近m次的曲率資訊來更新近似矩陣的這種方法在實踐中是很有效的。

雖然l-bfgs演算法是線性收斂,但是每次迭代的開銷非常小,因此l-bfgs演算法執行速度還是很快的,而且由於每一步迭代都能保證近似矩陣的正定,因此演算法的魯棒性還是很強的。

L BFGS演算法介紹

本文由作者林洋港授權網易雲社群發布。l bfgs是解無約束非線性規劃問題最常用的方法,具有收斂速度快 記憶體開銷少等優點,在機器學習各類演算法中常有它的身影。簡單的說,l bfgs和梯度下降 sgd幹的同樣的事情,但大多數情況下收斂速度更快,這點在大規模計算中很重要。下圖是深度學習autoencod...

機器學習and 深度學習 and 優化演算法

ssh keygen t rsa c 我的ssh金鑰 將 我的金鑰 替換為新的自己命名的就行,然後github建倉進行ssh繫結 git remote v 檢視遠倉庫 git remote set url origin git github.com username newrepo.git 切換到自...

機器學習常見的優化演算法

機器學習中常見的一些優化演算法的總結,以最直接的方式理解。注 梯度下降法來自rachel zhang的部落格 不是所有的方程都具有解析解,因此可採用優化的方法尋找其最有解,在機器學習中常見的演算法有梯度下降法 牛頓法和拉格朗日對偶性。具有一階連續的偏導數的目標函式,以andrew ng老師的課件簡要...