|
|
|
|
移动端

2.5.3 牛顿法

《深度学习与计算机视觉:算法原理、框架应用与代码实现》第2章 深度学习和计算机视觉中的基础数学知识,本章会尽量从定性的角度讲解一些与深度学习、计算视觉紧密联系的基础数学概念,不一定会很严谨细致,但力求简单、形象。本节为大家介绍牛顿法。

作者:叶韵来源:机械工业出版社|2017-11-16 18:23

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

2.5.3  牛顿法

1.牛顿-拉普森(Newton-Raphson,NR)算法

介绍优化中的牛顿法之前,先来介绍一下用于数值计算的牛顿-拉普森算法。牛顿-拉普森算法是用来寻找实值方程的近似解的一种数值算法,算法表达如下:

算法2-4  牛顿-拉普森算法

给定欲求的方程f(x)=0和初始点x0

重复:

Δx  =  -f(xt)/f'(xt)

xt+1  =  xt  +  Δx

停止,如果|f(x)|  <  ε

下面从一个一维例子形象理解一下,如图2-49所示。

可以看到,牛顿法其实就是给函数在当前所在位置做一个一阶展开,然后用这个一阶近似的解作为下一次迭代的位置。

2.牛顿法

了解了牛顿-拉普森算法,再来了解一下牛顿法,还是用一个一维例子来讲解,如图2-50所示。

在图2-50中,上面一排表示f(x)的曲线,下面一排表示f(x)的导数f'(x)的曲线。例子中使用的是一个凸函数,所以找到极值就相当于找到f'(x)=0的解所在位置,因此把牛顿-拉普森算法套用过来在f'(x)上一用就可以了。下面只需要把算法2-4稍加修改:

算法2-5  牛顿法求极值(一维)

给定f(x)和初始点x0

重复:

xt+1  =  xt  -  f' (xt)/f"(xt)

停止,如果|f'(x)|  <  ε

我们举例子是从牛顿-拉普森算法说起,其实也可以从泰勒展开的角度看待牛顿法。考虑x+Δx处,将f(x+Δx)用泰勒展开到二阶:

这个展开相当于在x附近用二次函数对f(x)做了个近似。在这个近似中,f(x), f'(x)和f"(x)相当于系数,自变量是Δx。对于一个二次函数,通过高中知识知道,对于ax2+bx+c,极值在对称轴x=-b/2a处。所以在公式2-42的近似中,当

时,在f(x)附近展开的二次近似函数的值f(x+Δx)就是最小值。如果f(x)本身就是个二次函数的话,那么这一次计算就已经找到了f(x)的极值。如果f(x)不是二次函数呢?那就可以在x+Δx处再做一次二次函数近似,找到新的Δx作为迭代步长,直至逼近真正的极值,这正是牛顿法。

所以从这个角度理解,牛顿法就是每次迭代的时候,在所在位置对要求解的函数做一个二次近似,然后直接用这个近似的最小值作为下一次迭代的位置。把单纯梯度看作线性近似的话,当迭代步长不大的时候,二阶的近似通常比线性近似好一些,否则就很难说。

前面举的都是一维的例子,不过思路都是一样,推广到高维的算法如下:

算法2-6  牛顿法求极值

给定f(x)和初始点x0

重复:

xt+1  =  xt  -  ▽f(xt)/Hf(xt)

停止,如果|▽f(x)|  <  ε

其中Hf(x)是二阶偏导矩阵,又称为海森(Hessian)矩阵,定义如下:

所以可以看到,虽然高维度和一维的牛顿法思路本质上没什么不同,但是海森矩阵在高维度下的计算很大,并且在分母上需要求逆,所以计算起来不现实。这是限制牛顿法在实际应用中使用的一个重要因素。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

敏捷Acegi、CAS:构建安全的Java系统

本书是关于Acegi、CAS的权威教程,是Java/Java EE安全性开发者的必备参考书。无论是Java EE安全性编程模型的背景和基础知识,还是Acegi、CA...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊