本文由作者林洋港授權網易雲社群發布。
l-bfgs是解無約束非線性規劃問題最常用的方法,具有收斂速度快、記憶體開銷少等優點,在機器學習各類演算法中常有它的身影。簡單的說,l-bfgs和梯度下降、sgd幹的同樣的事情,但大多數情況下收斂速度更快,這點在大規模計算中很重要。下圖是深度學習autoencoder模型不同優化方法的比較。
這裡的「之前」並不是說l-bfgs問世之前就已經存在的方法,而是指為了更好的理解l-bfgs需要了解的其他方法。無約束問題定義:
我們先從泰勒展開開始,這可以說是本文介紹的所有方法的基礎。f在的一階泰勒展開為
二階泰勒展開為
去掉最後的餘項,得到
2.1 最速下降法(gradient descent)
cd演算法的乙個前提條件就是f在連續可微,並且在處的導數不為0。由公式1可知當第二項<0時f的值將下降。由cauchy-schwartz不等式可得
為最速下降方向。因此迭代公式為
滿足2.2 牛頓法(newton method)
由於f的極值點就是滿足f的導數為0,根據公式2,得到
假設hesse矩陣可逆,由上式可得牛頓法迭代公式
牛頓法具有二次終止性的特點,即經過有限次迭代必達到極小點。例如,對於二次凸函式
a是對稱正定矩陣,取任意初始點,根據公式3有
顯然經過1次迭代即達到極值點。
但牛頓法要求f二次連續可微,並且hesse矩陣滿足可逆和正定兩個條件;同時,牛頓方向不一定每次迭代都是下降方向。
阻尼牛頓法是牛頓法的修正,與牛頓法的區別是迭代公式增加了牛頓方向上的一維搜尋,即
其中是一維搜尋得到的步長,滿足
2.3 擬牛頓法(quasi-newton method)
牛頓法每次迭代都需要計算處的hesse矩陣的逆,同時hesse矩陣也不一定是正定的。人們又提出了擬牛頓法,其基本思想是用不包含二階導數的矩陣來近似hesse矩陣的逆。將f在處展開成2階泰勒級數並取近似,即
設hesse矩陣可逆,可得
設近似矩陣為根據上述,必須滿足
公式7稱為擬牛頓條件。的不同構造方法,決定了不同的擬牛頓方法。
當時n階對稱正定矩陣時,滿足牛頓條件的也必須是n階對稱正定矩陣。因此的一般構造策略為:取為任意n階對稱正定矩陣(通常為單位矩陣
i
),然後通過下式求出
稱為校正矩陣。
dfp演算法將校正矩陣定義為:
至此,根據公式4、5、6、7、10、11可以由得出並且不需要每次迭代計算hesse矩陣。
bfgs演算法用矩陣近似公式8中的hesse矩陣,從而得到
將q與p互換,分別取代由dfp公式可以得到
令,從而得到bfgs公式:
從公式11和公式12可以看出,擬牛頓法每次迭代只需要根據前次迭代的即可以計算出,不需要求出hesse矩陣的逆。
2.4 l-bfgs(limited-memory bfgs)
bfgs演算法中每次迭代計算需要前次迭代得到的矩陣,該矩陣的儲存空間至少為n(n+1)/2,n為特徵維數,對於高維的應用場景,需要的儲存空間將是非常巨大的。l-bfgs的基本思想就是通過儲存前m次迭代的少量資料來替代前一次的矩陣。令y=q,s=p,公式12可以改寫成
公式13展開並取前m項的近似,可得
由於ρ、v、s、y這些變數都最終可以由q、p兩個向量計算得到,因此,我們只需儲存最後m次的q、p向量即可算出加上對角陣h0,總共需要儲存2*m+1個n維向量(實際應用中m一般取4到7之間的值,因此需要儲存的資料遠小於hesse矩陣)。
由於l-bfgs是建立在目標函式的2階泰勒展開基礎上的,其前提條件就是函式的2階導不為0。在機器學習中一般如果用l2正則都是可以滿足這個條件的。如果用的是l1正則,則目標函式可能出現2階導為0的情況。對於使用l1正則的情況,可以使用owl-qn方法(orthant-wise limited-memory quasi-newton),它是基於l-bfgs修改的。
此外,chih-jen lin(libsvm作者)提出的信賴域牛頓方法(trust region newton method),其收斂速度也比l-bgfs快,他開發的另乙個針對大規模線性分類的軟體liblinear用的就是這種優化方法。
此外,chih-jen lin(libsvm作者)提出的信賴域牛頓方法(trust region newton method),其收斂速度也比l-bgfs快,他開發的另乙個針對大規模線性分類的軟體liblinear用的就是這種優化方法。
免費領取驗證碼、內容安全、簡訊傳送、直播點播體驗包及雲伺服器等**
機器學習優化演算法 L BFGS
關於優化演算法的求解,書上已經介紹了很多的方法,比如有梯度下降法,座標下降法,牛頓法和擬牛頓法。梯度下降法是基於目標函式梯度的,演算法的收斂速度是線性的,並且當問題是病態時或者問題規模較大時,收斂速度尤其慢 幾乎不適用 座標下降法雖然不用計算目標函式的梯度,但是其收斂速度依然很慢,因此它的適用範圍也...
LBFGS 簡單筆記
52nlp上無約術最優化的文章 後面提到了乙個無約束最優化的c 實現 sample lbfgs.c lm 計算原函式和梯度fx g d g 計算xnorm,gnorm 判定gnorm xnorm 是否滿足條件 計算step 1 sqrt d d k 1,end 0 進入for迴圈 計算xnorm,g...
運籌系列40 L BFGS的pytorch版本
l是limited memory的意思。bfgs是四個數學家的名字。連續優化問題基本原理是泰勒二階展開後,求導 0,用迭代的方法進行求解。迭代公式很簡單 fxk fx k xk 1 xk 0f f x x k 0 fxk fxk xk 1 x k 0f f f 是乙個向量,f f f 是乙個矩陣,稱...