BFGS优化算法的理解以及LBFGS源码求解最优化问题

这篇博客介绍了最优化算法中的BFGS(Broyden-Fletcher-Goldfarb-Shanno)和LBFGS(Limited-memory BFGS)算法。内容包括梯度下降法、牛顿法的基础知识,重点讲解了DFP算法和BFGS算法的原理及矩阵修正过程,并提供了C++库libbfgs的使用示例。博主通过求解一个二次函数的优化问题,比较了matlab和libbfgs的求解结果。

关于最优化求解,吴军有篇blog讲的很不错,证明和解释都很清楚,具体可以参考http://www.cnblogs.com/joneswood/archive/2012/03/11/2390529.html。


这里根据那篇blog的内容,主要讲解运用最广泛的LBFGS的算法思想和LBFGS源码的求解实际的最优化问题。


理论部分

一般优化算法中,比较简单的是梯度下降法,其主要思想为:

给定目标函数f(x),给定初始值x,沿着目标函数梯度方向下降,寻找最优解。

通过将目标函数,在初始值位置按照梯度下降方向,进行泰勒展开:

clip_image002

clip_image004:代表第k个点的自变量(向量);

clip_image006:单位方向(向量),即|d|=1;

clip_image008:步长(实数);

clip_image010:目标函数在Xk这一点的梯度(导数向量);

clip_image012:α的高阶无穷小。

式[1]中的高阶无穷小可以忽略,因此,要使[1]式取得最小值,应使clip_image014取到最小,由此可得,clip_image006[1]clip_image016时,目标函数下降得最快,这就是负梯度方向作为“最速下降”方向的由来。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值