拟牛顿法算法的设计与实现c语言,牛顿法与拟牛顿法的故事

真的很想吐槽一下李航老师后面的附录,看的我是云头雾里,上网查了很多资料才搞懂。 这篇文章主要讲解牛顿法和拟牛顿法一些算法思路上的由来,作为附录的补充,具体算法细节可以参考那本书

1.牛顿法

首先你需要知道的是牛顿法本身是一个求解函数零点的算法。它通过迭代方式逐步逼近函数零点,不了解的同学可以先看一下这篇知乎回答如何通俗易懂地讲解牛顿迭代法求开方?

现在问题来了,最优化问题是如何与函数零点勾搭上的?对于一个二阶偏导连续的函数f(x)来说,他的极小值点一定梯度为零,那么我们通过找到f(x)梯度为零的点不就找到了极小值嘛?(当然需要加上这个驻点的海森矩阵为正定矩阵这个条件才能严谨的说明其为极小值点,这里暂不考虑)

好吧,现在问题已经变为找f(x)梯度的零点。假设我们已经在xk处,现在我们想知道下一步怎么跨才能跳到梯度的零点。突然发现好像有点难。。。。这时候牛顿法出来了,找不到真实梯度(比较复杂)的零点不要紧,我们可以看下xk附近点的近似梯度面,看看这个近似梯度的零点在哪里不就好了。行,那我们来试试。

先对f(x)在xk处二阶泰勒展开

1f4c1620b6a9f3ce5f344cd2fbb3639b.png

接着对上式两边同时求梯度,得到

0282c56e7d4c04d8611c7e17a1f9c03d.png

上式的右边即为xk附近点的近似梯度,现在我们要找这个近似梯度的零点。太简单了,只要令这个近似梯度为0,反解出x就好。经过推导,我们可以得到:

25f7510adffea47b3fe7a3b8f12ab7e8.png

好了,现在我们站到了xk+1处,可是xk+1只是近似梯度为0,所以我们还想更进一步,怎么办?简单啊,把刚才对xk做的事情再对xk+1做一遍不就好了,这样我们就来到了xk+2处,如果不满意,我们可以继续做下去,得到xk+3 , xk+4 , xk+5........,直到这个点满足我们所要的精度。以上就是牛顿法求解无约束最优化问题的大概思路,具体算法见附录

需要说明的是,因为牛顿法是二阶收敛,所以比梯度下降要快。具体可以参考牛顿法为什么比梯度下降法求解需要的迭代次数更少?

使用牛顿法需要注意的地方可以参考对牛顿法的几点补充

2拟牛顿法

刚才已经介绍了牛顿法,可是真正使用的时候却出现了一些问题。比如牛顿法每次迭代都需要计算当前点的海森矩阵,同时还要计算它的逆,好麻烦啊,有没有简单的一些方法?比如直接计算出当前点海森矩阵的逆?那我们就来看一看行不行。

假设现在我们已经到了xk+1这个点,现在想跑向xk+2,按照牛顿法需要计算xk+1这个点的梯度和海森矩阵的逆。现在让我们来对xk+1这个点进行二阶泰勒展开

7378e779ea8365c3547ebba81719db80.png

然后对两边同时求梯度,得到xk+1附近点的近似梯度

135c402570041c3783809155b0b81e72.png

令x=xk,再对上式进行整理,可以得到以下两个式子

09edddc7b0292456f397784be1aad1f9.png

或者

225287cb41318e657210166cfd1236f1.png

现在我们已经得到了xk+1处海森矩阵和海森矩阵逆的约束条件,如果我们能找到一个计算方便的矩阵也满足这两个条件之一(如果再加上正定性就更棒了),那我们是不是可以认为这个矩阵近似于xk+1处海森矩阵(BFGS算法)或者海森矩阵逆(DFP算法),然后将它用到牛顿法里去迭代xk+2。接着重复以上步骤找到xk+2海森矩阵或者海森矩阵逆的近似,迭代到xk+3,,,

以上即为拟牛顿法的基本思路,看完这个再去看DFP或者BFGS算法到底再做什么事情就很好懂了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值