专栏首页机器学习与python集中营【面试题】牛顿法和梯度下降法有什么不同?

【面试题】牛顿法和梯度下降法有什么不同?

机器学习

深度学习

长按二维码关注

牛顿法和梯度下降法有什么不同?

参考答案:

解析:

牛顿法(Newton's method)

牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f (x)的泰勒级数的前面几项来寻找方程f (x) = 0的根。牛顿法最大的特点就在于它的收敛速度很快。

具体步骤:

首先,选择一个接近函数 f (x)零点的 x0,计算相应的 f (x0) 和切线斜率f ' (x0)(这里f ' 表示函数 f 的导数)。

然后我们计算穿过点(x0,f(x0))并且斜率为f '(x0)的直线和x轴的交点的x坐标,也就是求如下方程的解:

我们将新求得的点的 x 坐标命名为x1,通常x1会比x0更接近方程f (x) = 0的解。 因此我们现在可以利用x1开始下一轮迭代。迭代公式可化简为如下所示:

已经证明,如果f'是连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值x0位于这个邻近区域内,那么牛顿法必定收敛。

并且,如果f'(x)不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。

由于牛顿法是基于当前位置的切线来确定下一次的位置,所以牛顿法又被很形象地称为是"切线法"。牛顿法的搜索路径(二维情况)如下图所示:

关于牛顿法和梯度下降法的效率对比:

a)从收敛速度上看 ,牛顿法是二阶收敛,梯度下降是一阶收敛,前者牛顿法收敛速度更快。但牛顿法仍然是局部算法,只是在局部上看的更细致,梯度法仅考虑方向,牛顿法不但考虑了方向还兼顾了步子的大小,其对步长的估计使用的是二阶逼近。

b)根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

注:红色的牛顿法的迭代路径,绿色的是梯度下降法的迭代路径。

牛顿法的优缺点总结:

优点:二阶收敛,收敛速度快;

缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。

本文分享自微信公众号 - 机器学习与python集中营(yasuozet01),作者:草yang年华

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python绘图还在用Matplotlib?out了 !发现一款手绘可视化神器!

    来源:https://github.com/chenjiandongx/cutecharts

    小草AI
  • python绘图骚操作之plotly(一)——plotly的基本绘图方式

    Plotly是一个非常著名且强大的开源数据可视化框架,它通过构建基于浏览器显示的web形式的可交互图表来展示信息,可创建多达数十种精美的图表和地图,本文就将以j...

    小草AI
  • 欧式距离、曼哈顿距离、切比雪夫距离三种距离的可视化展示

    在看空间统计相关的文档资料的时候,看到了几个有关距离丈量方法的术语词汇,诸如:欧式距离、曼哈顿距离、切比雪夫距离…… 老外习惯于使用名字来命名算法,可是对于门外...

    小草AI
  • 机器学习中牛顿法凸优化的通俗解释

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    红色石头
  • 生成式对抗网络GAN在语音自然语言处理中的应用|

    生成对抗网络(GAN)是训练模型的新思想,生成器和鉴别器相互对抗以提高生成质量。最近,GAN在图像生成方面取得了惊人的成果,并在此基础上迸发了大量新的思想,技术...

    新智元
  • React Native iOS 剖析 WebView && 解决 Error loading page Domain: WebKitErrorDomain Error Code: 101 The U

    今天在对接一个网页时加载网页总是碰到 Error loading page Domain: WebKitErrorDomain Error Code: 101...

    onety码生
  • python第三十七课——模块

    3.模块(m) 概念:在python中.py结尾的文件,我们就称为模块,可以将类、函数、属性...等内容定义在模块中 分类: 1).标准库模块:安装完py...

    hankleo
  • Parrot 4.5 发布:基于 Debian 的 Linux 发行版

    Parrot 是一个基于 Debian 的 GNU/Linux 发行版,其设计上主要考虑安全性和隐私性。

    Debian社区
  • 一口价!组合域名51work.cn8万元被秒

    近段时间域名圈传来的交易消息未曾停过,这不一枚“51”开头的组合域名51work.cn以一口价80000元被秒,这个价格真是诱惑人啊!

    躲在树上的域小名
  • numpy中的nonzero()的用法

    当使用布尔数组直接作为下标对象或者元组下标对象中有布尔数组时,都相当于用nonzero()将布尔数组转换成一组整数数组,然后使用整数数组进行下标运算。

    学到老

扫码关注云+社区

领取腾讯云代金券