优化方法:牛顿法,BFGS和L-BFGS算法。

内容转自:https://blog.csdn.net/weixin_39445556/article/details/84502260

之前已经介绍过利用Mosek实现带边界的多元函数优化问题(https://blog.csdn.net/aliexken/article/details/104443873),今天我们来具体看一下这些优化方法底层的实现原理,包括牛顿法,BFGS以及L-BFGS方法。

一. 牛顿法

牛顿发现,对一个函数求根,可以根据迭代的计算切空间映射的值来逼近,演示如下:

牛顿法求根步骤:

1. 已知函数f(x)的情况下,随机产生点x0。

2. 由已知的x0点按照进行k此迭代。

3. 如果差值满足体哦阿健,则xk被视为一个拟合的根。

在优化问题中,求根问题被转换为求导数为0的极值问题,即从求f(x)=0变为求f’(x)=0。那么步骤2中的函数全部在求一次导数就可以,即更新方法变为:

牛顿法求解的本质就是二阶泰勒展开

,方程左右两边同时求导,最后得到:

该公式与更新方法的公式一致。

当x为一元变量时,上述更新方法会非常方便求解,但是当x为多元变量的时候,则情况不同,函数求导的结果不在是一个值,而是一个向量或者矩阵

(公式1)

gk表示f‘(x),代表一阶导数。Hk表示Hessian矩阵,用于表示多元二阶偏导矩阵。这样,对多元变量优化问题就完成了建模。

Hessian矩阵介绍:https://blog.csdn.net/qq_34886403/article/details/83589108

 

二. BFGS介绍

根据牛顿法的介绍我们知道,多元函数优化问题复杂的地方在于解Hessian矩阵的逆。随着多元的元数增加,求逆的复杂度将显著增加。那么有没有办法来简化这个Hessian矩阵求逆过程呢?为了解决该问题,BFGS(由四位科学家Broyden, Fletcher, Goldfarb, Shanno的首字母组成)算法被提出。

BFGS通过逼近Hk逆来实现对Hessian矩阵求逆:

(公式2)

其中,

对Hessian矩阵迭代(公式2)以及驻点迭代(公式1)共同迭代,得到优化过程。第一步的D矩阵为单位矩阵。

这里有一个问题,那就是每一步迭代都需要存储D矩阵,这限制了算法的实际应用。为了解决该问题,L-BFGS被提出。

(这里补一个推导过程,转自:https://blog.csdn.net/philosophyatmath/article/details/70173128

x为多元未知量,,f(x)在xk+1处的二阶泰勒展开:

求导:

简化为:

这里的Gk+1即Hessian矩阵

令:

得到

带入,最终:与公式2的形式一致。

三. L-BFGS介绍

L-BFGS算法翻译过来就是有限内存中进行BFGS算法,L是limited memory的意思. 由于对D的存储存在困难,那么我们只存储没有迭代过程中的sk和yk,这样当每次计算D的时候,只要按照顺序将sk和yk融合到计算过程中就可以,而不用存储大量的中间矩阵D。这是一种典型的时间换空间的方法。

如果迭代次数非常大,那么即使存储sk和yk,存储也仍然不能满足要求。这里为了对存储进行限制,算法会丢掉一些sk和yk。如设置存储向量为1000,当迭代超过1001时,s1和y1就被丢掉,剩下s2-s1001与y2-y1001被存储。

 

 

 

 

 

おすすめ

転載: blog.csdn.net/aliexken/article/details/108020050