牛顿法

牛顿法是一种高效的迭代算法,其被广泛应用于方程求根和凸函数最优化。

一、牛顿法在方程求根中的应用

函数 f ( x ) f(x) f(x)的一阶泰勒展开式为: f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)=f(x_0)+f'(x_0)(x-x_0) f(x)=f(x0)+f(x0)(xx0)函数的根即为 f ( x ) = 0 f(x)=0 f(x)=0处,由此得到迭代公式: x = x 0 − f ( x 0 ) f ′ ( x 0 ) x=x_0-\frac{f(x_0)}{f'(x_0)} x=x0f(x0)f(x0)
利用牛顿法进行求根的迭代示意图如下:
在这里插入图片描述
利用牛顿法求得的方程的根严重依赖于迭代初始位置,且只能求得一个根。因此其适用范围较窄,大部分情况下仅用于二次函数的求根。

二、牛顿法在最优化中的应用

假设多元凸函数 f ( x ) f(\boldsymbol x) f(x)连续二阶可导,基于二阶泰勒展开,可得: f ( x ) = f ( x 0 ) + ∇ f ( x 0 ) T ( x − x 0 ) + 1 2 ( x − x 0 ) T H ( x 0 ) ( x − x 0 ) f(\boldsymbol x)=f(\boldsymbol x_0)+\nabla f(\boldsymbol x_0)^T(\boldsymbol{x-x_0})+\frac{1}{2}(\boldsymbol{x-x_0})^TH(\boldsymbol x_0)(\boldsymbol{x-x_0}) f(x)=f(x0)+f(x0)T(xx0)+21(xx0)TH(x0)(xx0)函数取最小值的必要条件为梯度为 0 \boldsymbol 0 0,因此对上式两侧求梯度,可得: ∇ f ( x ) = ∇ f ( x 0 ) + ( x − x 0 ) H ( x 0 ) = 0 \nabla f(\boldsymbol x)=\nabla f(\boldsymbol x_0)+(\boldsymbol{x-x_0})H(\boldsymbol x_0)=0 f(x)=f(x0)+(xx0)H(x0)=0由此,可进一步得到如下迭代公式: x = x 0 − ∇ f ( x 0 ) H − 1 ( x 0 ) \boldsymbol x=\boldsymbol x_0-\nabla f(\boldsymbol x_0)H^{-1}(\boldsymbol x_0) x=x0f(x0)H1(x0)

如果说梯度下降法是找到了迭代点处的一个超平面进行函数的拟合,并找到该平面上当前点梯度最快的下降方向;而牛顿法则是找到了迭代点处的一个曲面进行函数的拟合,并充分考虑二阶导数的信息来寻找下一个迭代点。当Hessen矩阵为正定阵时,可以保证牛顿法的搜索方向是函数的下降方向。

牛顿法的迭代速度较梯度下降法快,但其每次迭代中的矩阵运算量更大。尤其是需要计算迭代点处Hessen矩阵的逆,其有可能是不存在的。学者们提出了拟牛顿法来解决上述问题。

三、拟牛顿法

拟牛顿法的核心思想为:找到一个合适的正定阵计算方法 G ( x ) \boldsymbol G(x) G(x),使其能够代替 H − 1 ( x ) \boldsymbol H^{-1}(x) H1(x)。从而解决 H ( x ) \boldsymbol H(x) H(x)不可直接求逆,或者求逆计算量过大的问题。

那这个 G ( x ) \boldsymbol G(x) G(x)应该什么样的条件呢?根据牛顿法中如下推导公式: ∇ f ( x k + 1 ) = ∇ f ( x k ) + ( x k + 1 − x k ) H ( x k ) \nabla f(\boldsymbol x_{k+1})=\nabla f(\boldsymbol x_k)+(\boldsymbol{x_{k+1}-x_k})H(\boldsymbol x_k) f(xk+1)=f(xk)+(xk+1xk)H(xk)可令 y k = ∇ f ( x k + 1 ) − ∇ f ( x k ) \boldsymbol y_k=\nabla f(\boldsymbol x_{k+1})-\nabla f(\boldsymbol x_k) yk=f(xk+1)f(xk) δ k = x k + 1 − x k \boldsymbol \delta_k=\boldsymbol x_{k+1}-\boldsymbol x_k δk=xk+1xk

因此, G ( x ) \boldsymbol G(x) G(x)需满足如下的拟牛顿条件 G k ( x ) y k = δ k \boldsymbol G_k(\boldsymbol x)\boldsymbol y_k= \boldsymbol \delta_k Gk(x)yk=δk

需要再次强调的是:
(1) G ( x ) \boldsymbol G(x) G(x)是一个迭代矩阵,其随着每轮迭代点的位置变化会做相应的迭代;
(2) G ( x ) \boldsymbol G(x) G(x)应当为正定阵,以保证每步迭代是沿着函数下降的方向。

常见的求解拟牛顿的算法有DFP算法BFGS算法Broyden类算法,其中BFGS算法以及其衍生出的L-BFGS算法是目前最流行的拟牛顿算法。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值