牛顿法与拟牛顿法

来源:互联网 发布:郑元畅为什么不红 知乎 编辑:程序博客网 时间:2024/05/18 13:45

牛顿法

求函数的根

牛顿法的最初提出是用来求解方程的根的。我们假设点x为函数f(x)的根,那么有f(x)=0。现在我们把函数f(x)在点xk处一阶泰勒展开有:

f(x)=f(xk)+f(xk)(xxk)
那么假设点xk+1为该方程的根,则有
f(xk+1)=f(xk)+f(xk)(xk+1xk)=0
那么就可以得到
xk+1=xkf(xk)f(xk)
这样我们就得到了一个递归方程,我们可以通过迭代的方式不断的让x趋近于x从而求得方程f(x)的解。该递归式同样可以通过下图的方式得到:
这里写图片描述
在该图中我们可以看到xn+1是要比xn更接近于x,而xn+1利用三角形特征可以知道xn+1=xnf(xn)f(xn)。其中,f(xn)在三角形中表示点(xn,f(xn))处切线的斜率。
牛顿法动图

最优化

对于最优化问题,其极值点处有一个特性就是在极值点处函数的一阶导数为0。因此我们可以在一阶导数处利用牛顿法通过迭代的方式来求得最优解,即相当于求一阶导数对应函数的根。
首先,我们对函数在xk点处进行二阶泰勒展开

f(x)=f(xk)+f(xk)(xxk)+12f′′(xk)(xxk)2
f(x)f(xk)xxk=f(xk)+f′′(xk)(xxk)
因此,当xxk时,f(x)=f(xk)+f′′(xk)(xxk)。这里假设点xk+1是一阶导数的根,那么就有
f(xk+1)=f(xk)+f′′(xk)(xk+1xk)=0
依据上式可以得到
xk+1=xkf(xk)f′′(xk)
这样我们就得到了一个不断更新x迭代求得最优解的方法。这个也很好理解,假设我们上面的第一张图的曲线表示的是函数f(x)一阶导数的曲线,那么其二阶导数就是一阶导数对应函数在某点的斜率,也就是那条切线的斜率,那么该公式就和上面求根的公式本质是一样的。
我们这里讨论的都是在低维度的情形下,那么对于高维函数,其二阶导数就变为了一个海森矩阵,记为H(x)=[δ2fδxiδxj],那么迭代公式就变为了
xk+1=xkH1kfk
我们可以看到,当Hk为正定(H1k也为正定)的时候,可以保证牛顿法的搜索方向是向下搜索的。
牛顿法求最优值的步骤如下:
1. 随机选取起始点x0
2. 计算目标函数f(x)在该点xk的一阶导数和海森矩阵;
3. 依据迭代公式xk+1=xkH1kfk更新x
如果E(f(xk+1)f(xk))<ϵ,则收敛返回,否则继续步骤2,3直至收敛
我们可以看到,当我们的特征特别多的时候,求海森矩阵的逆的运算量是非常大且慢的,这对于在实际应用中是不可忍受的,因此我们想能否用一个矩阵来代替海森矩阵的逆呢,这就是拟牛顿法的基本思路。

拟牛顿法

因为我们要选择一个矩阵来代替海森矩阵的逆,那么我们首先要研究一下海森矩阵需要具有什么样的特征才能保证牛顿法成功的应用。通过上面的描述我们知道

f(xk+1)=f(xk)+Hk(xk+1xk)
H1K(f(xk+1)f(xk))=xk+1xk

上式我们称之为拟牛顿条件。
因此,对于我们所选择的替代矩阵Gk,需要满足两个条件:

  1. 拟牛顿条件,即Gk(f(xk+1)f(xk))=xk+1xk
  2. 要保证Gk为正定矩阵,这是因为只有正定才能保证牛顿法的搜索方向是向下搜索的

假设yk=f(xk+1)f(xk)δk=xk+1xk,因为每次迭代我们都需要更新替代矩阵Gk,下面介绍一种常用的迭代算法DFP(Davidon-Fletcher-Powell)

DFP算法

DFP算法中选择Gk+1的方法是在每一步迭代中在矩阵Gk中加两项附加项构成Gk+1,即

Gk+1=Gk+Pk+Qk
我们有
Gk+1yk=Gkyk+Pkyk+Qkyk
,我们可以令Pkyk=δk,Qkyk=Gkyk,这样就可以得到Gk的迭代公式

0 1
原创粉丝点击