原文链接:点击

平时总看到牛顿法怎样怎样,一直不得要领,今天下午查了一下维基百科,写写我的认识,很多地方是直观理解,并没有严谨的证明。在我看来,牛顿法至少有两个应用方向,1、求方程的根,2、最优化。牛顿法涉及到方程求导,下面的讨论均是在连续可微的前提下讨论。

1、求解方程。

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

原理是利用泰勒公式,在x0x_0x0​处展开,且展开到一阶,即:f(x)=f(x0)+(x-x0)f′(x0)f(x) = f(x_0)+(x-x_0)f'(x_0)f(x)=f(x0​)+(x-x0​)f′(x0​)
求解方程f(x)=0f(x)=0f(x)=0,即f(x0)+(x−x0)∗f′(x0)=0f(x_0)+(x-x_0)*f'(x_0)=0f(x0​)+(x−x0​)∗f′(x0​)=0 求解上式得到
x=x1=x0-f(x0)f′(x0)x =x_1=x_0-\frac{f(x_0)}{f'(x_0)}x=x1​=x0​-f′(x0​)f(x0​)​
可以令x=x1x=x_1x=x1​(这是为了我们使用迭代法求解),得到
x1=x0-f(x0)f′(x0)\color{blue}x_1=x_0-\frac{f(x_0)}{f'(x_0)}x1​=x0​-f′(x0​)f(x0​)​
因为这是利用泰勒公式的一阶展开,f(x)=f(x0)+(x-x0)f′(x0)f(x) = f(x_0)+(x-x_0)f'(x_0)f(x)=f(x0​)+(x-x0​)f′(x0​)和原始的f(x)f(x)f(x)并不是完全相等,而是近似相等,这里求得的x1x_1x1​并不能让f(x)=0f(x)=0f(x)=0,只能说f(x1)f(x_1)f(x1​)的值比f(x0)f(x_0)f(x0​)更接近f(x)=0f(x)=0f(x)=0。
于是乎,迭代求解的想法就很自然了,进而推出第n+1次迭代公式:
xn+1=xn-f(xn)f′(xn)\color{blue}x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}xn+1​=xn​-f′(xn​)f(xn​)​
通过迭代,这个式子必然在f(x∗)=0f(x^*)=0f(x∗)=0的时候收敛。

整个过程如下图:

2、牛顿法用于最优化

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

这次为了求解f'=0的根,把f(x)的泰勒展开,展开到2阶形式:

这个式子是成立的,当且仅当 Δx 无线趋近于0。此时上式等价与:

求解:

得出迭代公式:

一般认为牛顿法可以利用到曲线本身的信息,比梯度下降法更容易收敛(迭代更少次数),如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。

在上面讨论的是2维情况,高维情况的牛顿迭代公式是:

其中H是hessian矩阵,定义为:

高维情况依然可以用牛顿迭代求解,但是问题是Hessian矩阵引入的复杂性,使得牛顿迭代求解的难度大大增加,但是已经有了解决这个问题的办法就是Quasi-Newton methond,不再直接计算hessian矩阵,而是每一步的时候使用梯度向量更新hessian矩阵的近似。

   1、牛顿法应用范围

                         牛顿法主要有两个应用方向:1、目标函数最优化求解。例:已知 f(x)的表达形式,,求 ,及g(x)取最小值时的 x ?,即

由于||f(x)||通常为误差的二范数,此时这个模型也称为最小二乘模型,即

2、方程的求解(根)。例:求方程的解:g(x) = 0,求 x ?

这两个应用方面都主要是针对g(x)为非线性函数的情况。2中,如果g(x)为线性情况下的求解通常使用最小二乘法求解。

                         牛顿法的核心思想是对函数进行泰勒展开。

           2、牛顿法用于方程求解

对f(x)进行一阶泰勒公式展开:

  

此时,将非线性方程 g(x) = 0 近似为线性方程:

  

若 f’(x) != 0,则下一次迭代解为:

     

牛顿迭代示意图(因此Newton迭代法也称为切线法):

3、牛顿法用于函数最优化求解

对f(x)进行二阶泰勒公式展开:

   

此时,将非线性优化问题 min f(x) 近似为为二次函数的最优化求解问题:

   

对于(5)式的求解,即二次函数(抛物线函数)求最小值,对(5)式中的函数求导:

   

  

从本质上来讲,最优化求解问题的迭代形式都是:

其中k为系数,为函数的梯度(即函数值上升的方向),那么为下降的方向,

最优化问题的标准形式是:求目标函数最小值,只要每次迭代沿着下降的方向迭代那么将逐渐达到最优,

而牛顿将每次迭代的步长定为:

4、补充

                          a、严格来讲,在“3、牛顿法用于函数最优化求解”中对函数二阶泰勒公式展开求最优值的方法称为:Newton法

而在“2、牛顿法用于方程求解”中对函数一阶泰勒展开求零点的方法称为:Guass-Newton(高斯牛顿)法

b、在上面的陈述中,如果x是一个向量,那么公式中:

应该写成:为Jacobi(雅克比)矩阵。

应该写成:为Hessian(海森)矩阵。

c、牛顿法的优点是收敛速度快,缺点是在用牛顿法进行最优化求解的时候需要求解Hessian矩阵。

因此,如果在目标函数的梯度和Hessian矩阵比较好求的时候应使用Newton法。

牛顿法在进行编程实现的时候有可能会失败,具体原因及解决方法见《最优化方法》-张薇 东北大学出版社 第155页。

5、Newton法与Guass-Newton法之间的联系

                        对于优化问题 ,即,当理论最优值为0时候,这个优化问题就变为了函数求解问题:

                                                             

                          结论:当最优化问题的理论最小值为0时,Newton法求解就可变为Guass-Newton法求解。        

另外:对f(x)进行二阶泰勒展开:

f(x)=f(xk)+Jxk+0.5xk′Hxkf(x)=f({x_k})+J{x_k}+0.5{x_k'}H{x_k}f(x)=f(xk​)+Jxk​+0.5xk′​Hxk​

f(x)乘以f(x)的转置并忽略二次以上的项:


fT(x)f(x)={​fT(xk)+(Jxk)T+(0.5xk′Hxk)T{f^T}(x)f(x)=\{​{f^T}({x_k})+{(J{x_k})^T}+{(0.5{x_k'}H{x_k})^T}fT(x)f(x)={​fT(xk​)+(Jxk​)T+(0.5xk′​Hxk​)T

∗{f(xk)+Jxk+0.5xk′Hxk}*\{f({x_k})+J{x_k}+0.5{x_k'}H{x_k}\}∗{f(xk​)+Jxk​+0.5xk′​Hxk​}

因此,当xkx_kxk​在最优解附近时,即满足f(xk)f(x_k)f(xk​),此时可认为:H=JTJH=J^TJH=JTJ

6、扩展阅读

                        a、修正牛顿(Newton)法

b、共轭方向法与共轭梯度法

c、拟牛顿法(避免求解Hessian矩阵):DFP算法、BFGS算法

【数学与算法】牛顿法的两种应用:求根和最优化相关推荐

  1. 水平集方法引入主动轮廓模型算法中的两种方法

    水平集方法引入主动轮廓模型算法中的两种方法 1.传统的基于主动轮廓模型和水平集理论的方法 2.变分水平集方法 在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流 ...

  2. Java练习:两种方式求1+1/2!+1/3!+1/4!+...前20项的和、用for,while,do-while分别实现1+1/2!+1/3!+1/4!+...前20项的和

    Java两种方式求 1+1/2!+1/3!+1/4!+... 前20项的和: 感叹号 !是阶乘的意思,如 2! .3! .4! 分别是:1*2 . 1*2*3 .1*2*3*4  第一种算法,如下代码 ...

  3. Python两种方式求多个数的最大公因数(HCF)和最小公倍数(LCM)

    Python两种方式求多个数的最大公因数(HCF)和最小公倍数(LCM) 最大公因数 1. 列表排序 2. 将列表分为两部分 3. 求最大公因数的质因子 4. 得到结果 5. 完整程序 最小公倍数 另 ...

  4. 数学-矩阵计算(4)两种布局

    之前会发现在有的求导上最后结果需要转置,而有的不需要,很困惑,然后才发现了这个维基上面的解释(这才是写该博文的主要价值,注意到不同的布局问题,其他部分只是为了完整性而写的),而且下面也有很多很不错的参 ...

  5. sum 去重_总结leetcode上【排列问题】【组合问题】【子集问题】回溯算法去重的两种写法!...

    本周小结!(回溯算法系列三)续集 在 本周小结!(回溯算法系列三) 中一位录友对 整颗树的本层和同一节点的本层有疑问,也让我重新思考了一下,发现这里确实有问题,所以专门写一篇来纠正,感谢录友们的积极交 ...

  6. 【CV/Matlab系列】基于Matlab的白平衡算法实现(两种方法)

    DATE: 2020.11.22 文章目录 1.前言 2.白平衡算法 2.1 原始图像 2.2 灰色世界法 2.3 完美反射算法 1.前言 在之前大学毕设时,设计了一种基于Matlab的白平衡算法,采 ...

  7. PCA(2):PCA算法实现的两种方式

    因为样本个数和特征维度的是不相等de,所以组成的矩阵不是方阵. 第一种方式:特征分解思路(特征值分解要求分解的矩阵是方阵) 基于样本特征维度,先求协方差矩阵---->再特征分解(因为协方差矩阵是 ...

  8. 经典算法之基数排序两种实现

    /************************ author's email:wardseptember@gmail.com date:2017.12.7 基数排序两种实现方法 ********* ...

  9. 417,BFS和DFS两种方式求岛屿的最大面积

    想了解更多数据结构以及算法题,可以关注微信公众号"数据结构和算法",每天一题为你精彩解答.也可以扫描下面的二维码关注 给定一个包含了一些0和1的非空二维数组grid . 一个岛屿是 ...

  10. 牛客 Tree(最小深度总和)(两种方法求重心)难度⭐⭐⭐

    题目链接 牛妹有一张连通图,由n个点和n-1条边构成,也就是说这是一棵树,牛妹可以任意选择一个点为根,根的深度deprootdep_{root}deproot​​为0,对于任意一个非根的点,我们将他到 ...

最新文章

  1. ERROR in app.js from UglifyJs RangeError: Maximum call stack size exceeded
  2. HALCON示例程序classify_image_class_mlp.hdev如何使用MLP分类器分割RGB图像
  3. 数据库SQL语言分类(DDL/DML/DQL/TCL/DCL)
  4. 一文弄懂AOP各种概念
  5. LintCode,hihoCoder,LeetCode有什么区别?
  6. 平方取中法随机数函数
  7. ffmpeg 解码b帧_ffmpeg 解码h264数据丢帧
  8. zabbix详解(十四)——zabbix钉钉报警实战
  9. 我的树莓派3配置脚本
  10. Java使用ttf字体下载网站
  11. win7安装SP1补丁
  12. Mendeley--免费的文献管理工具,给论文自动插入参考文献
  13. 图像_camera_基础知识_YUV色彩模型与RGB色彩模型详解
  14. 心若向阳, 岁月无恙
  15. Esp8266 进阶之路33【大神篇】如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?
  16. LeetCode LCP 03. 机器人大冒险(前缀和)
  17. 地图上制作线路的动画_使用百度地图API制作线路轨迹播放
  18. iOS App thinning【( 通过 LinkMap、mach-o寻找优化点)】1、段迁移rename_section减小__TEXT 段大小(需关闭 Bitcode)2、查无用方法/类/宏/图
  19. SAP中销售处理到期发票清单VF04功能的应用
  20. linux下c使用lzma_使用 LZMA SDK

热门文章

  1. 【LeetCode从零单排】No129 Sum Root to Leaf Numbers
  2. mysql 批量插入数据过多的解决方法
  3. MySql中把一个表的数据插入到另一个表中的实现代码--转
  4. 【宝藏女孩】独行40国,风控女孩的环球之旅
  5. 《Credit Risk Scorecard》第八章: Scorecard Implementation
  6. 京东小程序上线,剑指何方?
  7. 如何利用大数据做金融风控? 原创 2016年11月24日 17:42:03 标签: 大数据 / 金融 / 风控 1594 导语:如何通过海量数据与欺诈风险进行博弈? 随着金融科技、科技金融等概念的
  8. 从互联网的旁观者,转为互联网的建设者,推动者!!!
  9. 实战SSM_O2O商铺_04自下而上逐步整合SSM
  10. MyBatis-12MyBatis动态SQL之【choose when otherwise】