欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

程序员文章站 2024-02-27 20:40:51
...

原文:http://ihoge.cn/2018/newton1.html

前言:

线性最小二乘问题,我们可以通过理论推导可以得到其解析解,但是对于非线性最小二乘问题,则需要依赖迭代优化的方法,牛顿算法是解决非线性最优的常见算法之一。
最近整理了几篇关于牛顿法及其优化算法都不甚满意,网上大多相关技术博客很多是拼凑起来的,多数不全面(某些推导中间过程被省略),或者数学公式的符号表达方式不统一,造成看起来非常凌乱。因此本文旨在对基于牛顿法的非线性最小二乘优化问题的基本概念和算法推导做个系统的梳理。

  • 基本数学名词及概念
  • 海赛矩阵和雅可比矩阵
  • 牛顿算法推导
  • 拟牛顿算法(DFP和BFGS)
  • 高斯牛顿算法
  • 共轭梯度法
  • 补充优化算法

一、基本概念定义

1.非线性方程定义及最优化方法简述

指因变量与自变量之间的关系不是线性的关系,比如平方关系、对数关系、指数关系、三角函数关系等等。对于此类方程,求解n元实函数f在整个n维向量空间Rn上的最优值点往往很难得到精确解,经常需要求近似解问题。

求解该最优化问题的方法大多是逐次一维搜索的迭代算法,基本思想是在一个近似点处选定一个有利于搜索方向,沿这个方向进行一维搜索,得到新的近似点。如此反复迭代,知道满足预定的精度要求为止。根据搜索方向的取法不同,这类迭代算法可分为两类:

  • 解析法 需要用目标函数的倒函数
  • 梯度法 又称最速下降法,是早期的解析法,收敛速度较慢
  • 牛顿法 收敛速度快,但不稳定,计算也较困难。高斯牛顿法基于其改进,但目标作用不同
  • 共轭梯度法 介于最速下降法与牛顿法之间。收敛较快,效果好
  • 变尺度法 效率较高,常用DFP法(Davidon Fletcher Powell)
  • 直接法 不涉及导数,只用到函数值。有交替方向法(又称坐标轮换法)、模式搜索法、旋转方向法、鲍威尔共轭方向法和单纯形加速法等。

2.非线性最小二乘问题

非线性最小二乘问题来自于非线性回归,即通过观察自变量和因变量数据,求非线性目标函数的系数参数,使得函数模型与观测量尽量相似。

高斯牛顿法是解决非线性最小二乘问题的最基本方法,并且它只能处理二次函数。(使用时必须将目标函数转化为二次的)

3.基本数学表达

  1. 梯度(gradient)

    常用 表示,由多元函数的哥哥偏导数组成的问题。以二元函数为例,其梯度为:
    牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

  2. 海赛矩阵(Hessian matrix)

    由多元函数的二阶偏导数组成的方阵,描述函数的局部曲率,以二元函数为例:
    牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

  3. 雅可比矩阵(Jacobian matrix)

    是多元函数一阶偏导数以一定方式排列成的矩阵,体现了一个可微方程与给出点的最优线性逼近。以二元函数为例:
    牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结
    如果扩展多维的话F:Rn>Rm,则雅可比矩阵是一个mn列的矩阵,表示为:JF(x1,x2,...,xn)
    牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结
    雅可比矩阵作用,如果PRn中的一点,FP点可微分,那么在这一点的导数由JF(P)给出,在此情况下,由F(P)描述的线性算子即接近点PF的最优线性逼近,x逼近于P
    牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

黑森和雅可比矩阵参考:http://jacoxu.com/jacobian矩阵和hessian矩阵/

  1. 残差(residual)

    表示实际观测值与估计值(拟合值)之间的差。


二、牛顿法

从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法更快。比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。

从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。

牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

1.求解方程

并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解。

原理是利用泰勒公式,在x(0)处展开,且展开到一阶,即f(x)=f(x(0))+(xx(0))f(x(0))

求解方程f(x)=0,即f(x(0))+(xx(0))f(x(0))=0

求解x=x(1)=x(0)f(x(0))f(x(0))

因为这是利用泰勒公式的一阶展开,f(x)=f(x(0))+(xx(0))f(x(0))此处并非完全相等,而是近似相等。这里求得的x(1)并不能让f(x)=0,只能说f(x(1))f(x(0))更接近f(x)=0,这样就可以通过不断迭代去逼近f(x)

进而推出:x(k+1)=x(k)f(x(k))f(x(k))

通过迭代,这恶搞狮子必然在f(x)=0的时候收敛,如下图:
牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

在最优化的问题中, 线性最优化至少可以使用单纯形法(或称不动点算法)求解, 但对于非线性优化问题, 牛顿法提供了一种求解的办法。 假设任务是优化一个目标函数f, 求函数f的极大极小问题, 可以转化为求解函数f的导数f=0的问题, 这样求可以把优化问题看成方程求解问题。剩下的就和上面的牛顿法求解很相似了。

2.一维无约束极值最优化

minf(x),xR1

其中x为目标函数的极小点即f(x)的根

首先把f(x)在探索点x(k)处泰勒展开到2阶形式进行近似:

f(x)=f(x(k))+f(x(k))(xx(k))+12f(x(k))(xx(k))2

然后用f(x)的最小点作为新的探索点x(k+1)

据此令:

f(x)=f(x(k))+f(x(k))(xx(k))=0

求出迭代公式:

x(k+1)=x(k)f(x(k))f(x(k)),k=0,1,...

因此,一维牛顿法最优化问题的计算步骤如下:
(1)给定初始点x(0),允许误差ϵ>0,置k=0
(2)如果f(x(k))<ϵ,则停止迭代,得到x(k);否则继续
(3)计算点x(k+1)x(k+1)=x(k)f(x(k))f(x(k)),置k=k+1,转(2)

需要注意的是,牛顿法在求极值的时候,如果初始点选取不好,则可能不收敛于极小点

3.多维无约束极值最优化

minf(x),xRn

其中x为目标函数的极小点。

假设f(x)具有二阶连续偏导数,若第k次迭代值为x(k),则可将f(x)x(k)附近进行二阶泰勒展开:

f(x)=f(x(k))+f(x(k))T(xx(k))+12(xx(k))TH(x(k))(xx(k))()

这里f(x(k))f(x)的梯度向量在点x(k)的值;

H(x(k))f(x)的海赛矩阵(Hesse matrix)H(x)=[ϑ2fϑxiϑxj]nn在点x(k)的值;

函数f(x)有极值的必要条件是在极值点处一阶导数为0,即梯度向量为0。特别是当H(x(k))是正定矩阵时,函数f(x)的极值为极小值。

牛顿利用极小点的必要条件:f(x)=0

每次迭代中从点x(k)开始,求目标函数的极小点,作为第k+1次迭代值x(k+1)

假设:x(k+1)满足f(x(k+1))=0

由式二得:

f(x)=f(x(k))+H(x(k))(xx(k))

由于:

f(x(k+1))=0

即:

f(xk))+H(x(k))(x(k+1)x(k))=0

得:

x(k+1)=x(k)H(x(k))1f(x(k))

简写为:
x(k+1)=x(k)Hk1gk

用该公式作为迭代公式的算法就是牛顿法。其中,Hkpk=gk

下面给出计算步骤

输入:目标函数f(x),梯度为g(x)=f(x),海赛矩阵H(x),精度要求ϵ;

输出:f(x)的极小点x

(1)取初始点x(0),置k=0
(2)计算梯度gk=f(x(k))
(3)若||gk||<ϵ,停止计算,得近似解x=x(k);否则转(3)
(4)计算Hk=H(x(k)),并根据迭代公式求出:pk=H(x(k))1f(x(k))
(5)置x(k+1)=x(k)+pk
(6)置k=k+1,转(2)

步骤(4)求pk,需要求HK1,计算比较复杂,所以有其他改进方法。


三、拟牛顿法

在牛顿法的迭代中,需要计算海赛矩阵的逆矩阵H1,这一计算比较复杂,考虑用一个正定矩阵Gk=G(x(k))来近似代替HK1=H1(x(k))。这就是拟牛顿法的基本想法。

1.拟牛顿法推导

先看牛顿迭代中海赛矩阵Hk满足的条件。

首先,Hk满足以下关系:

f(x)=f(x(k))+H(x(k))(xx(k))
中取
x=x(k+1)

即得:

gk+1gk=H(x(k))(x(k+1)x(k))

记:gk=f(x(k))yk=gk+1gkδk=x(k+1)x(k)Hk=H(x(k))pk=Hk1gk

则:

yk=Hkδk

Hk1yk=δk

该式称为拟牛顿条件

如果Hk是正定的(Hk1也是正定的),那么可以保证牛顿法搜索方向pk是下降方向。这是因为搜索方向是pk=Hk1gk

由式:

x(k+1)=x(k)Hk1gk

有:

x=x(k)+λpk=x(k)λHk(1)gk

所以f(x)x(k)得泰勒展开式(见上文)可以近似写成:

f(x)=f(x(k))λgkTHk1gk

Hk1正定,故有gkTHk1gk>0,当λ为一个充分小得正数时,总有f(x)<f(x(k)),也就是说pk是下降方向。

拟牛顿法将Gk作为Hk1的近似,要求矩阵Gk满足同样的条件。首先,每次迭代矩阵Gk是正定的。同时,Gk满足拟牛顿条件:Gk+1yk=δk

按照拟牛顿条件选择Gk作为Hk1的近似或选择Bk作为Hk的近似的算法成为拟牛顿法。

按照拟牛顿条件选择Gk作为Hk1的近似;或者选择Bk作为Hk的近似的算法称为拟牛顿法。

按照拟牛顿条件,在每次迭代中可以选择更新矩阵Gk+1

Gk+1=Gk+Gk

这种选择有一定的灵活性,因此有多种具体实现方法。下面介绍Broyden类拟牛顿法。

2.DFP(Davidon-Fletcher-Powell)算法(DFP algorithm)

DFP算法选择Gk+1的方法是,假设每一步迭代中矩阵Gk+1是由Gk加上两个附加项构成的,即:

Gk+1=Gk+Pk+Qk

其中PkQk是待定矩阵。这时:
Gk+1yk=Gkyk+Pkyk+Qkyk

为使Gk+1满足拟牛顿条件yk=Hkδk,可使PkQk满足:

Pkyk=δk

Qkyk=Gkyk

事实上,不难找出这样的PkQk,例如取:

Pk=δkδkTδkTyk

Qk=GkykykTGkykTGkyk

这样就可以得到矩阵Gk+1的迭代公式:

Gk+1=Gk+δkδkTδkTykGkykykTGkykTGkyk

称为DFP算法

可以证明,如果初始矩阵$G_0$是正定的,则迭代过程中的每个矩阵$G_k$都是正定的。

DFP算法步骤迭代如下

输入:目标函数f(x),梯度g(x)=f(x),精度要求为ϵ
输出:f(x)的极小点x

(1)选定初始点x(0),取G0为正定对称矩阵,置k=0
(2)计算gk=g(x(k))。若||gk||<ϵ,则停止计算,得近似解x=x(k),否则转(3)
(3)置pk=Gkgk(这里与BFGS不同)
(4)一维搜索:求λk使得:

f(x(k)+λkpk)=Min(f(x(k)+λpk)),(λ0)

(5)置x(k+1)=x(k)+λkpk
(6)计算gk+1=g(x(k+1)),若||gk+1||<ϵ,则停止计算,得近似解x=x(k+1);否则,按Gk+1的迭代公式(上文)计算出Gk+1(这里与BFGS不同)
(7)置k=k+1,转(3)

3.BFGS算法(Broyden-Fletcher-Goldfarb-Shanno)

BFGS算法是最流行的拟牛顿算法。

考虑用Gk逼近海赛矩阵的逆矩阵H1,也可以考虑用Bk逼近海赛矩阵。

这时,相应的拟牛顿条件是:

Bk+1δk=yk

可以用同样的方法得到另一迭代公式.首先,令:

Bk+1=Bk+Pk+Qk

Bk+1δk=Bkδk+Pkδk+Qkδk

考虑使PkQk满足:

Pkδk=yk

Qkδk=Bkδk

找出适合条件的PkQk,得到BFGS算法矩阵Bk+1的迭代公式:
Bk+1=Bk+ykykTykTδkBkδkδkTBkδkTBkδk

可以证明,如果初始矩阵B0是正定的,则迭代过程中的每个矩阵Bk都是正定的。

BFGS拟牛顿算法的迭代步骤

输入:目标函数f(x)g(x)=f(x),精度要求ϵ
输出:f(x)的极小点x

(1)选定初始点x(0),取B0为正定矩阵的对称矩阵,置k=0
(2)计算gk=g(x(k))。若||gk||<ϵ,则停止计算,得近似解x=x(k);否则转(3)
(3)由Bkpk=gk求出pk (这里与DFP不同)
(4)一维搜索:求λk使得:

f(x(k)+λkpk)=Min(f(x(k)+λpk)),(λ0)

(5)置x(k+1)=x(k)+λkpk
(6)计算gk+1=g(x(k+1)),若||gk+1||<ϵ,则停止计算,得近似解x=x(k+1);否则,按Bk+1的迭代公式(上文)计算出Bk+1(这里与DFP不同)
(7)置k=k+1,转(3)

4.Broyden类算法(Broyden’s algorithm)

该算法是由DFP算法和BFGS算法相结合派生出的一类拟牛顿法。

我们可以从BFDS算法矩阵Bk的迭代式(Bk+1=Bk+ykykTykTδkBkδkδkTBkδkTBkδk)得到BFGS算法关于Gk的迭代公式。

事实上,若记Gk=Bk1,Gk+1=Bk+11

那么对以上BFDS算法矩阵Bk的迭代式两次应用Sherman-Morrison公式得:

Gk+1=(IδkykTδkTyk)Gk(IδkykTδkTyk)T+δkδkTδkTyk

称为BFGS算法关于G_k的迭代公式

将DFP算法的迭代公式:

Gk+1=Gk+δkδkTδkTykGkykykTGkykTGkyk

记作GDFP

将BFGS算法迭代公式:

Bk+1=Bk+ykykTykTδkBkδkδkTBkδkTBkδk

记作GBFGS

他们都满足方程拟牛顿条件式,所以他们的线性组合

Gk+1=αGDFP+(1α)GBFGS
也满足拟牛顿条件式,而且是正定的。

其中0α1,这样就得到了一类拟牛顿法,称为Broyden类算法。其步骤与上文类似,唯(3)和(6)步有所不同。

⚠️ Sherman-Morrison公式:假设An阶可逆矩阵,u,vn维向量,且A+uvT也是可逆矩阵,则有:

(A+uvT)1=A1A1uvTA11+vTA1u

四、高斯牛顿法

以后再补充。

五、共轭梯度法(Conjugate Gradient)

共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。

具体的实现步骤请参加wiki百科共轭梯度法

下图为共轭梯度法和梯度下降法搜索最优解的路径对比示意图:(绿色为梯度下降法,红色代表共轭梯度法)
牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

六、其他优化方法

1、启发式优化方法

启发式方法指人在解决问题时所采取的一种根据经验规则进行发现的方法。其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的步骤去寻求答案。启发式优化方法种类繁多,包括经典的模拟退火方法、遗传算法、蚁群算法以及粒子群算法等等。

还有一种特殊的优化算法被称之多目标优化算法,它主要针对同时优化多个目标(两个及两个以上)的优化问题,这方面比较经典的算法有NSGAII算法、MOEA/D算法以及人工免疫算法等。

2、解决约束优化问题——拉格朗日乘数法

有关拉格朗日乘数法的介绍请见另一篇博客:《拉格朗日乘数法》

原文:http://ihoge.cn/2018/newton1.html
参考:《统计学习方法》–2012 清华大学出版社 李航