L-BFGS算法

本文详细介绍了L-BFGS算法的原理、实现和应用,包括其与传统BFGS算法的区别、实现细节及Go语言和C++开源库的使用方法。通过实例分析,阐述了如何在实际工程中利用L-BFGS算法解决大规模优化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面的文章中,讲述过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算法中,有如下公式

 

  

 

   那么同样有

 

  

 

   将这个式子带入,得到

 

  

 

   整理一下,一直递推次下去,就有

 

  

 

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

 

       

 

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

 

  

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值