牛顿法与拟牛顿法

牛顿法

求函数的根

牛顿法的最初提出是用来求解方程的根的。我们假设点 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) 的解。该递归式同样可以通过下图的方式得到:
牛顿法与拟牛顿法_第1张图片
在该图中我们可以看到 xn+1 是要比 xn 更接近于 x ,而 xn+1 利用三角形特征可以知道 xn+1=xnf(xn)f(xn) 。其中, f(xn) 在三角形中表示点 (xn,f(xn)) 处切线的斜率。
牛顿法与拟牛顿法_第2张图片

最优化

对于最优化问题,其极值点处有一个特性就是在极值点处函数的一阶导数为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 的迭代公式

你可能感兴趣的:(牛顿法与拟牛顿法)