机器学习的本质是建立优化模型,通过优化方法,不断迭代参数向量,找到使目标函数最优的参数向量,最终建立模型。但是在机器学习的参数优化过程中,很多函数是非常复杂的,不能直接求出。五次及以上多项式方程没有根式解,这个是被伽罗瓦用群论做出的最著名的结论,工作生活中还是有诸多类似求解高次方程的真实需求(比如行星的轨道计算,往往就是涉及到很复杂的高次方程)没有根式解不意味着方程解不出来,我们必须转向一些近似解法,通常用到的优化方法:梯度下降方法、牛顿法、拟牛顿法等,这些优化方法的本质就是在更新参数。

牛顿迭代法又称为牛顿-拉弗森方法,实际上是由牛顿、拉弗森各自独立提出来的。牛顿-拉弗森方法提出来的思路就是利用切线是曲线的线性逼近这个思想,如下图所示:

随便找一个曲线上的A点(为什么随便找,根据切线是切点附近的曲线的近似,应该在根点附近找,但是很显然我们现在还不知道根点在哪里),做一个切线,切线的根(就是和x轴的交点)与曲线的根,还有一定的距离。牛顿、拉弗森们想,没关系,我们从这个切线的根出发,做一根垂线,和曲线相交于B点,继续重复刚才的工作:

之前说过,B点比之前A点更接近曲线的根点,牛顿、拉弗森们很兴奋,继续重复刚才的工作:

第四次就已经很接近曲线的根了:

经过多次迭代后会越来越接近曲线的根(下图进行了50次迭代,哪怕经过无数次迭代也只会更接近曲线的根,用数学术语来说就是,迭代收敛了):

牛顿-拉弗森方法的代数解法

容易得出,点的切线方程为,要求,即相当于求的解,即

迭代过程可参考下图:

        牛顿迭代法是用数值的方法来求解非线性方程组的根或其极大极小值,基本思想是:对于非线性函数f(x),根据泰勒公式得到x附近某个点展开的多项式可用来近似函数f(x)的值,该多项式对应的函数为F(x),求得F(x)的极小值作为新的迭代点,然后继续在新的迭代点泰勒公式展开,直到求得的极小值满足一定的精度。

假设函数f(x)二次可微,则二次泰勒展开,

g(x)多项式则为f(x)的近似,求函数f(x)极值则可以转化为求导函数为0,对g(x)求导并令其为0,

得到,

即得到迭代公式,

新的点不断逼近极值,直到一次导数小于某误差。代码中实现的核心的代码是x = (x + n/x)/2

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

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

Hessian矩阵是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。牛顿法是迭代算法,每一步需要求解目标函数的Hessian矩阵的逆矩阵,计算过程复杂。拟牛顿法通过正定矩阵近似Hessian矩阵的逆矩阵或Hessian矩阵,简化计算过程。在数学中, 海森矩阵(Hessian matrix或Hessian)是一个自变量为向量的实值函数的二阶偏导数组成的方块矩阵, 此函数如下:

如果f的所有二阶导数都存在, 那么ff的海森矩阵即:

(也有人把海森定义为以上矩阵的行列式)海森矩阵被应用于牛顿法解决的大规模优化问题。

梯度下降和牛顿法对比

梯度下降每次只从你当前所处位置选一个坡度最大的方向走一步;牛顿法在选方向时,不仅会考虑坡度是否够大,还会考虑你走了一步后,坡度是否会变得更大,所以说牛顿法比梯度下降法看的更远一些,能更快地走到最底部。

牛顿法:是通过求解目标函数的一阶导数为0时的参数,进而求出目标函数最小值时的参数。另外牛顿法收敛速度很快。海森矩阵的逆在迭代过程中不断减小,可以起到逐步减小步长的效果。缺点:海森矩阵的逆计算复杂,代价比较大,因此有了拟牛顿法。

梯度下降法:是通过梯度方向和步长,直接求解目标函数的最小值时的参数。越接近最优值时,步长应该不断减小,否则会在最优值附近来回震荡

  • 梯度下降法是一阶优化算法,牛顿法是二阶优化算法;
  • 牛顿法的收敛速度相比梯度下降法常常较快;
  • 牛顿法每次需要更新一个二维矩阵,计算代价很大,实际使用中常使用拟牛顿法;
  • 牛顿法对初始值有一定要求,在非凸优化问题中(如神经网络训练),牛顿法很容易陷入鞍点(牛顿法步长会越来越小),而梯度下降法则很容易逃离鞍点(因此在神经网络训练中一般使用梯度下降法,高维空间的神经网络中存在大量鞍点);
  • 梯度下降法在靠近最优点时会震荡,因此步长调整在梯度下降法中是必要的;

拟牛顿法

牛顿法(Newton method)和拟牛顿法(quasi Newton method)是求解无约束最优化问题的常用方法,有收敛速度快的优点。牛顿法是迭代算法,每一步都需求解目标函数的海塞矩阵(Hessian Matrix),计算比较复杂。拟牛顿法通过正定矩阵近似海塞矩阵的逆矩阵或海塞矩阵,简化了这一计算过程。

    拟牛顿法是求解非线性优化问题最有效的方法之一,于20世纪50年代由美国Argonne国家实验室的物理学家W.C.Davidon所提出来。Davidon设计的这种算法在当时看来是非线性优化领域最具创造性的发明之一。不久R. Fletcher和M. J. D. Powell证实了这种新的算法远比其他方法快速和可靠,使得非线性优化这门学科在一夜之间突飞猛进。

  拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度(类似于弦截法,导数需要近似);而且有时候目标函数的H矩阵无法保证正定。拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。

       拟牛顿法的基本思想是:不用求二阶偏导数而构造出可以近似海赛矩阵(或海赛矩阵的逆)的正定对称阵。不同的构造方法对应能够产生不同的拟牛顿法。(可以理解成,"拟牛顿法"是来近似"牛顿法"的,所以在“牛顿法”前面加了一个“拟”字。拟牛顿法可不止一种,它包含多种方法:如DFP算法、BFGS算法、Broyden类算法。)

参考:https://blog.csdn.net/wangyangzhizhou/article/details/78547539
参考:https://zhuanlan.zhihu.com/p/77497823
参考:https://www.matongxue.com/madocs/205.html
参考:https://blog.csdn.net/pipisorry/article/details/24574293

机器学习-牛顿迭代法原理和公式推导相关推荐

  1. 牛顿迭代法原理及C++实现

    牛顿迭代法 牛顿迭代法的思想是将非线性函数(原方程)线性化(切线方程),以线性方程的解逐步逼近非线性方程的解. 算法步骤 步骤1:设x*是f(x)= 0 的根,选取x0作为x*初始近似值,并设f(x) ...

  2. 机器学习-梯度下降算法原理及公式推导

    目录 1.梯度下降直观理解解释 2.算法上的解释 3.常用的梯度下降法 4.梯度下降算法调优 5.其他优化算法对比 在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降算法(Gradient D ...

  3. python牛顿法算立方根_牛顿迭代法求解立方根

    //计算一个数字的立方根,不使用库函数 //详细描述: //接口说明 //原型: //public static double getCubeRoot(double input) //输入:doubl ...

  4. 二元牛顿迭代法matlab,2-8牛顿迭代法matlab

    4 实验七 牛顿迭代法 [实验目的] 1.了解牛顿迭代法的基本概念. 2.了解牛顿迭代法的收敛性和收敛速度. 3.学习掌握MATLAB 软件有关的命令. [实验内容] 用牛顿迭代法求方程0123=-+ ...

  5. 用matlab写牛顿迭代法,牛顿迭代法的MATLAB实现

    20 牛顿迭代法的MATLAB实现 云 磊 (襄樊学院,湖北 襄阳 441053) 摘要:牛顿迭代法是方程求根中的一种较快捷的迭代方法,但遇到较复杂的方程时计算量较大.文章采用了MATLAB编程来实现 ...

  6. 多元函数的极值牛顿迭代法

    多元函数的极值&牛顿迭代法 多元函数的极值 牛顿迭代法 多元函数的极值 多元函数求极值的方法其他网页已经写了很多,在此不多叙述.在此不多赘述.简单给出结论: (1)一元函数求极值:对于一阶连续 ...

  7. 牛顿迭代法求平方根原理

    牛顿迭代法可以求解n次方的根,但这里只讨论用它来求平方根. 牛顿迭代法求平方根过程 Java代码实现 /*** 求一个数的平方根* @param number* @return*/public sta ...

  8. 【算法】牛顿迭代法求平方根的原理和误差分析

    前言 在<算法(第四版)>中的P23页,给出了经典的利用牛顿迭代法求平方根的算法,牛顿迭代法在数值计算中应用十分广泛,但是在看书中的代码时,我最困惑的是其中对收敛条件的判断,经过查阅资料和 ...

  9. 牛顿迭代法的公式推导

    牛顿迭代法求平方根 求n的平方根,先假设一猜测值X0 = 1,然后根据以下公式求出X1,再将X1代入公式右边,继续求出X2-通过有效次迭代后即可求出n的平方根,Xk+1 先让我们来验证下这个巧妙的方法 ...

最新文章

  1. (笔记)电路设计(十四)之放大器的应用
  2. java通过System.getProperty获取系统属性
  3. Android之Bmob移动后端云服务器
  4. Lesson 7 (3) 深入理解PyTorch与PyTorch库架构
  5. cnpm 网络不能连接_(二十七)通俗易懂理解——Resnet残差网络
  6. iOS中POST请求
  7. 机器学习的挑战:黑盒模型正面临这3个问题
  8. 微软原生 Notepad 融入 VS Code 才是出路?
  9. Unity3d中的属性(Attributes)整理【转载】
  10. C#socket编程序(二)
  11. devc++编程 error: jump to case label错误笔记
  12. html颜色转换rgba,RGB颜色在线转换
  13. 条件数、奇异值与海森矩阵
  14. 【STM32+cubemx】0013 HAL库开发:SPI总线访问气压计BMP280/BME280
  15. 北京十大著名拆迁律师事务所(精品拆迁律师)
  16. Nordic nrf 蓝牙 ble 透传应用
  17. 北京一所211大学计算机考研从一门改三门!北京化工大学改考
  18. 几何语言点C是ab的中点,数学几何定理符号语言
  19. 耕、林、园地分类搞不定?PIE-Engine机器学习带你攻克难题
  20. 安装linux+windows双系统后无法进入Windows

热门文章

  1. 模拟电路学习一之三极管重新认识
  2. 自动化测试框架有哪些?怎么选?今天我来告诉你
  3. 点滴体会:如何提高英语听力技巧
  4. 发刊词 | 智能控制开关专辑
  5. 现代密码学上机程序c语言,现代密码学与加解密技术实验报告
  6. 光模块的传输距离受哪些方面的因素影响?
  7. Matlab 一种获取树高的方法
  8. [转载]如何脑洞大开地使用OneNote_习惯累积沉淀_新浪博客
  9. 邯郸网络服务器机柜型号,珠海服务器机柜批发
  10. UOJ #31. 【UR #2】猪猪侠再战括号序列