簡介
L-BFGS的算法原理及步驟。
關鍵字
擬牛頓法、BFGS、L-BFGS、機器學習、優(yōu)化方法
正文
1. 概述
??L-BFGS由牛頓法發(fā)展而來,是為了提高計算效率而提出的近似計算方法,在施行牛頓法的過程中需要計算海森矩陣的逆,計算矩陣逆工作量巨大,所以采用符合擬牛頓條件的矩陣代替
或
進行計算,這種方法稱為擬牛頓法,其代表性方法有DFP算法和BFGS算法,L-BFGS在BFGS的基礎上進一步在有限的內存下進行近似而提高效率的算法。
2. 擬牛頓條件
??假設問題是:
??且有。
??首先進行二階泰勒展開,得到:
??對其求導后,代入,可得:
??上面的式子稱作擬牛頓條件,要求,
正定。
3. BFGS原理
??BFGS算法考慮使用矩陣近似矩陣
,對應的擬牛頓條件是上面的第1個。每次對
進行迭代,所以算法核心就是如何求得
。
??令:
??自然有:
??考慮使滿足:
??得到的迭代公式:
4. BFGS算法
??輸入:目標函數(shù),
,精度要求
??輸出:的極小點
??(1)選定,設置
??(2)計算,如滿足
,則停止,得解。
??(3)由求出
??(4)求
??(5)置
??(6)計算,如滿足
,則停止,得解。否則計算
??(7),轉(3)
5. L-BFGS原理
??在BFGS算法的提出目的是為了不計算矩陣的逆,然而上面的算法中(3)求,需要
,還是需要計算矩陣逆,還好有辦法可以不用算,仔細觀察上面的式子,為了方便,這里再寫一遍:
發(fā)現(xiàn)除了,剩下的都是向量,說明
可以由
來表達,而
可以由
來表達,依次類推,可以得到結論對于任何一個
最終都可以使用
及
這些向量來表達。
??根據(jù)以上結論,在每次迭代時只要保存這些值,BFGS算法可以只使用
表達,那么L-BFGS在這個基礎上,再一次進行近似,就是只用有限的內存來保存近
個向量的值來進行計算。
??具體實現(xiàn)時,為了方便還要對表達式進行一定的變換,首先對進行變換,變換推導比較復雜,參考資料[3]給出了大概的思路和過程,具體變換為:
??接下來記:
??且假設,則有:
??遞推至,則有:
??只使用近m次的結果來近似,得到:
??以上是L-BFGS的原理部分,具體實現(xiàn)是采用遞推的算法。
6. L-BFGS算法
以下算法來自Numerical Optimization
輸入:當前的,函數(shù)
,
輸出:求時的更新方向
(1)
(2)
????
????
???
(3)
(4)
????
????
???
(5)
參考資料
[1] 李航.統(tǒng)計學習方法(第二版).清華大學出版社,2019.
[2] http://www.itdecent.cn/p/287b43e837c1
[3] https://blog.csdn.net/Shenpibaipao/article/details/89352840
[4] https://blog.csdn.net/google19890102/article/details/46389869
[5] Numerical Optimization
[6] https://www.cnblogs.com/sunruina2/p/9244709.html