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-BFGSLimited-memory BFGS,在之前的BFGS算法中,我们可以不存储矩阵

,而是存储最近

次迭代

的曲率信息,即

。当完成一次迭代后,最旧的一次曲率的信息将被删除,而最新的曲率将被保存下来,所

以这样就保证了保存的曲率信息始终都来自最近的

次迭代。在实际工程中

320之间的值效果比较好。

2. L-BFGS算法原理

在之前的BFGS算法中,有如下公式

那么同样有

将这个式子带入,得到

L-BFGS算法_第1张图片

整理一下,一直递推

次下去,就有

L-BFGS算法_第2张图片

每次迭代

初始值的设定,在实践中常用的方法是

利用最近一次的曲率信息来估计真实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

你可能感兴趣的:(L-BFGS算法)