L-BFGS算法
前面的文章中,講述過BFGS算法,它是用來求解最優化問題的,在這個算法中,相對于普通的牛頓迭代法有很大的改進。鏈接:http://blog.csdn.net/acdreamers/article/details/44664941。在BFGS算法中,仍然有缺
陷,比如當優化問題規模很大時,矩陣的存儲和計算將變得不可行。為了解決這個問題,就有了L-BFGS算法。
?
?
Contents
?
?? 1. L-BFGS算法介紹
?? 2. L-BFGS算法原理
?? 3. L-BFGS算法實現
?
?
1. L-BFGS算法介紹
?
?? L-BFGS即Limited-memory BFGS,在之前的BFGS算法中,我們可以不存儲矩陣,而是存儲最近次迭代
?? 的曲率信息,即和。當完成一次迭代后,最舊的一次曲率的信息將被刪除,而最新的曲率將被保存下來,所
?? 以這樣就保證了保存的曲率信息始終都來自最近的次迭代。在實際工程中取3到20之間的值效果比較好。
?
?
2. L-BFGS算法原理
?
?? 在之前的BFGS算法中,有如下公式
?
??
?
?? 那么同樣有
?
??
?
?? 將這個式子帶入,得到
?
??
?
???整理一下,一直遞推次下去,就有
?
??
?
???每次迭代初始值的設定,在實踐中常用的方法是
?
???????
?
?? 利用最近一次的曲率信息來估計真實Hessian矩陣的大小,這樣使得當前搜索方向較為理想,不至于跑得太偏。
?
???更多內容可以參考這里。
??
?
3. L-BFGS算法實現
?
?? 一個Go語言的開源L-BFGS算法實現鏈接:https://github.com/huichen/lbfgs
?
?? C++的一個經典L-BFGS的開源庫為:http://www.chokkan.org/software/liblbfgs/
?
?? 源代碼:https://github.com/chokkan/liblbfgs
?
???最后介紹一個第三方庫資源:http://blog.csdn.net/jakisou/article/details/38535353
?
??
總結
- 上一篇: FaceBook机器学习开源DL模块
- 下一篇: 关于欧拉工程的一道递推题