牛顿法与拟牛顿法(DFP BFGS LBFGS VLBFGS)

2015年03月23日

最近做LBFGS的并行,顺便把牛顿法、拟牛顿法顺理一下。

拟牛顿法是求解非线性优化问题最有效的方法之一。考虑无约束的极小化问题,假设为凸函数,且二阶连续可导。

原始牛顿法

基本思想:在现有极小点估计值的附近对f(x)进行二阶泰勒展开,进而找到下一个极小点的估计值

牛顿法具有二次收敛性,但当目标函数非二次型时,牛顿法不能保证函数稳定地下降(缺点)。

阻尼牛顿法

每次迭代前需要沿迭代方向做线搜索,寻求最优的步长因子,即

拟牛顿法

基本思想:不使用二阶偏导数而构造出可以近似Hession或Hession的逆的正定对称阵,在“拟牛顿”的条件下优化目标函数。

先推导拟牛顿条件:在附近对做泰勒展开,取二阶近似项

推出

,推出

引入记号 , 推出

(拟牛顿条件)

它迭代过程中的hession矩阵做约束,因此,对hession对近似的,以及对hession的逆做近似的,可以将

作为指导。

DFP算法(Davidon–Fletcher–Powell formula)

核心:通过迭代的方法,对hession的逆做近似。迭代格式为

(通常

猜想待定为(具有对称性)

括号中是数值,将其分别简单赋值为1,-1,即

其中向量u,v仍有待确定,由上面

(要此式成立,不妨直接取

至此,校正矩阵就已经构造出来了

BFGS算法(Broyden–Fletcher–Goldfarb–Shanno algorithm)

核心公式的推导过程与DFP完全类似,只是互换了其中s{k}和y{k}的位置。BFGS直接逼近Hession矩阵B_k。(公式敲起来太累了,请自行推导)

LBFGS算法(limited-memory BFGS)

不再存储完整的Dk,而是存储计算过程中的向量序列{s},{y}。当需要矩阵Dk时,利用向量序列的计算来代替。并且,向量序列也不是全部存储,而是固定存最新的m个。

若要实现并行,需要同时在x与梯度(影响y的计算)那儿求一致平均。

资料

【1】DFP算法

【2】BFGS算法

【3】LBFGS算法

【4】Large-scale L-BFGS using MapReduce