牛顿法、梯度下降法与拟牛顿法

  • 0 引言
  • 1 关于泰勒展开式
    • 1.1 原理
    • 1.2 例子
  • 2 牛顿法
    • 2.1 x 为一维
    • 2.2 x 为多维
  • 3 梯度下降法
  • 4 拟牛顿法
    • 4.1 拟牛顿条件
    • 4.2 DFP 算法
    • 4.3 BFGS 算法
    • 4.4 L-BFGS 算法

0 引言

机器学习中在求解非线性优化问题时,常用的是梯度下降法和拟牛顿法,梯度下降法和拟牛顿法都是牛顿法的一种简化

牛顿法是在一个初始极小值点做二阶泰勒展开,然后对二阶泰勒展开式求极值点,通过迭代的方式逼近原函数极值点

在牛顿法迭代公式中,需要求二阶导数,而梯度下降法将二阶导数简化为一个固定正数方便求解

拟牛顿法也是在求解过程中做了一些简化,不用直接求二阶导数矩阵和它的逆

1 关于泰勒展开式

1.1 原理

如果我们有一个复杂函数 f ( x ) f(x) f(x), 对这个复杂函数我们想使用 n 次多项式(多项式具有好计算,易求导,且好积分等一系列的优良性质)去拟合这个函数,这时就可以对 f ( x ) f(x) f(x)进行泰勒展开,求某一点 x 0 x_0 x0​附近的 n 次多项式:

注意:
n 次多项式只是在 x 0 x_0 x0​ 较小的邻域内能较好拟合 f ( x ) f(x) f(x),也就是说,泰勒展开式其实是一种局部近似的方法,只近似 x = x 0 x=x_0 x=x0​那一点的函数性

1.2 例子

现在要求 f ( x ) = c o s ( x ) f(x)=cos(x) f(x)=cos(x) 在 x 0 = 0 x_0=0 x0​=0 处的二阶泰勒展开,因为我们去掉了高阶项,所以只是近似

直接套用公式
f ( x 0 ) = f ( 0 ) = c o s ( 0 ) = 1 f(x_0)=f(0)=cos(0)=1 f(x0​)=f(0)=cos(0)=1
f ′ ( x 0 ) = f ′ ( 0 ) = − s i n ( 0 ) = 0 f'(x_0)=f'(0)=-sin(0)=0 f′(x0​)=f′(0)=−sin(0)=0
f ′ ′ ( x 0 ) = f ′ ′ ( 0 ) = − c o s ( 0 ) = − 1 f''(x_0)=f''(0)=-cos(0)=-1 f′′(x0​)=f′′(0)=−cos(0)=−1
所以展开后的公式为
f ( x ) ≈ f ( x 0 ) + f ′ ( x 0 ) ∗ x + f ′ ′ ( x 0 ) ∗ x 2 / 2 = 1 − 0.5 ∗ x 2 f(x)≈f(x_0)+f'(x_0)*x+f''(x_0)*x^2/2=1-0.5*x^2 f(x)≈f(x0​)+f′(x0​)∗x+f′′(x0​)∗x2/2=1−0.5∗x2

从下方运行程序可以看出,离展开点越近的点,拟合程度越高,越远的点,越离谱

2 牛顿法

2.1 x 为一维

现在假设我们有目标函数 f ( x ) f(x) f(x),我们希望求此函数的极小值,牛顿法的基本思想是:随机找到一个点设为当前极值点 x k x_k xk​,在这个点对 f ( x ) f(x) f(x) 做二次泰勒展开,进而找到极小点的下一个估计值。在 x k x_k xk​ 附近的二阶泰勒展开为:

现在想求 φ ( x ) \varphi(x) φ(x) 的极值点,由极值的必要条件可知, φ ( x ) \varphi(x) φ(x) 应满足导数为 0,即:
φ ′ ( x ) = 0 \varphi'(x)=0 φ′(x)=0

φ ′ ( x ) = f ′ ( x k ) + f ′ ′ ( x k ) ( x − x k ) = 0 \varphi'(x)=f'(x_k)+f''(x_k)(x-x_k)=0 φ′(x)=f′(xk​)+f′′(xk​)(x−xk​)=0
这样就可以求得 x 的值
x = x k − f ′ ( x k ) f ′ ′ ( x k ) x=x_k-\frac{f'(x_k)}{f''(x_k)} x=xk​−f′′(xk​)f′(xk​)​
于是给定初始值 x 0 x_0 x0​,就可以通过迭代的方式逼近 f ( x ) f(x) f(x)的极值点:
x k + 1 = x k − f ′ ( x k ) f ′ ′ ( x k ) x_{k+1}=x_k-\frac{f'(x_k)}{f''(x_k)} xk+1​=xk​−f′′(xk​)f′(xk​)​

如下图,首先在 x n x_n xn​ 处泰勒展开,得到 f ( x ) f(x) f(x) 的近似函数 g n ( x ) g_n(x) gn​(x) ,求得 g n ( x ) g_n(x) gn​(x) 的极值点 x n + 1 x_{n+1} xn+1​

随后在 x n + 1 x_{n+1} xn+1​ 出泰勒展开,得到 g n + 1 ( x ) g_{n+1}(x) gn+1​(x) 函数,继续求 g n + 1 ( x ) g_{n+1}(x) gn+1​(x) 的极值点

一直迭代最后就会逼近 f ( x ) f(x) f(x) 的极值点

2.2 x 为多维

上面讨论的是参数 x 为一维的情况,当 x 有多维时,二阶泰勒展开式可以做推广,此时:
φ ( x ) = f ( x k ) + ∇ f ( x k ) ∗ ( x − x k ) + 1 2 ∗ ( x − x k ) T ∗ ∇ 2 f ( x k ) ∗ ( x − x k ) \varphi(x)=f(x_k)+\nabla{f(x_k)}*(x-x_k)+ \frac{1}{2}*(x-x_k)^T*\nabla^2{f(x_k)}*(x-x_k) φ(x)=f(xk​)+∇f(xk​)∗(x−xk​)+21​∗(x−xk​)T∗∇2f(xk​)∗(x−xk​)
其中 ∇ f \nabla{f} ∇f为 f f f 的梯度向量, ∇ 2 f \nabla^2{f} ∇2f为 f f f的海森矩阵(Hessian matrix),其定义为:

φ ( x ) \varphi(x) φ(x)对 x 向量求导并令其为 0 有:
∇ f ( x k ) + ∇ 2 f ( x k ) ∗ ( x − x k ) = 0 \nabla{f(x_k)}+\nabla^2{f(x_k)}*(x-x_k)=0 ∇f(xk​)+∇2f(xk​)∗(x−xk​)=0
于是有:
x = x k − [ ∇ 2 f ( x k ) ] − 1 ∇ f ( x k ) x=x_k-[\nabla^2{f(x_k)}]^{-1}\nabla{f(x_k)} x=xk​−[∇2f(xk​)]−1∇f(xk​)
通过迭代的方式能找到函数的极值点
牛顿法缺点:

  • 函数必须具有一二阶偏导数,海森矩阵必须正定
  • 计算相当复杂,除梯度外还需要计算二阶偏导数和逆矩阵

3 梯度下降法

在一维牛顿法中,迭代公式为:
x k + 1 = x k − f ′ ( x k ) f ′ ′ ( x k ) x_{k+1}=x_k-\frac{f'(x_k)}{f''(x_k)} xk+1​=xk​−f′′(xk​)f′(xk​)​
这个公式缺点:

  • 需要求二阶导数,有些函数求二阶导数之后就相当复杂了;
  • 因为 f ′ ′ ( x n ) f''(x_n) f′′(xn​)的大小不定,所以 g ( x ) g(x) g(x)开口方向不定,我们无法确定最后得到的结果究竟是极大值还是极小值

为了解决这两个问题,我们放弃二阶精度,即去掉 f ′ ′ ( x n ) f''(x_n) f′′(xn​),改为一个固定的正数1/h:
φ ( x ) = f ( x k ) + f ′ ( x k ) ( x − x k ) + 1 2 h ( x − x k ) 2 \varphi(x)=f(x_k)+f'(x_k)(x-x_k)+\frac{1}{2h}(x-x_k)^2 φ(x)=f(xk​)+f′(xk​)(x−xk​)+2h1​(x−xk​)2
该抛物线是一条开口向上的抛物线,通过求它的极值可以保证得到的是极小值。 φ ( x ) \varphi(x) φ(x) 的极小值点为
x k − h f ′ ( x k ) x_k-hf'(x_k) xk​−hf′(xk​)
迭代公式为
x k + 1 = x k − h f ′ ( x k ) x_{k+1} = x_k-hf'(x_k) xk+1​=xk​−hf′(xk​)
对于高维空间就是
x k + 1 = x k − h ∇ ( x k ) x_{k+1} = x_k-h\nabla(x_k) xk+1​=xk​−h∇(xk​)

4 拟牛顿法

拟牛顿法的基本思想是:不用二阶偏导数而构造出可以近似海森矩阵的正定对称阵,在“拟牛顿”的条件下优化目标函数。不同的构造方法就产生了不同的拟牛顿法。

一些记号:
∇ f \nabla{f} ∇f 记为 g 表示梯度, g k g_k gk​表示 ∇ f ( x k ) \nabla{f(x_k)} ∇f(xk​)

∇ 2 f \nabla^2{f} ∇2f 海森矩阵,记为 H, K k K_k Kk​表示 ∇ 2 f ( x k ) \nabla^2{f(x_k)} ∇2f(xk​)

用 B 表示对海森矩阵 H 本身的近似,D表示对海森矩阵的逆 H − 1 H^{-1} H−1的近似, 即 B ≈ H , D ≈ H − 1 B≈H, D≈H^{-1} B≈H,D≈H−1

4.1 拟牛顿条件

在经过 k+1 次迭代后得到 x k + 1 x_{k+1} xk+1​,此时目标函数 f ( x ) f(x) f(x)在 x k + 1 x_{k+1} xk+1​处作泰勒二阶展开,得到:
f ( x ) ≈ f ( x k + 1 ) + ∇ f ( x k + 1 ) ∗ ( x − x k + 1 ) + 1 2 ∗ ( x − x k + 1 ) T ∗ ∇ 2 f ( x k + 1 ) ∗ ( x − x k + 1 ) f(x)≈f(x_{k+1})+\nabla{f(x_{k+1})}*(x-x_{k+1})+ \frac{1}{2}*(x-x_{k+1})^T*\nabla^2{f(x_{k+1})}*(x-x_{k+1}) f(x)≈f(xk+1​)+∇f(xk+1​)∗(x−xk+1​)+21​∗(x−xk+1​)T∗∇2f(xk+1​)∗(x−xk+1​)

两边对 x 求梯度有:
∇ f ( x ) ≈ ∇ f ( x k + 1 ) + H k + 1 ∗ ( x − x k + 1 ) (1) \nabla{f(x)} ≈ \nabla{f(x_{k+1})}+H_{k+1}*(x-x_{k+1}) \tag{1} ∇f(x)≈∇f(xk+1​)+Hk+1​∗(x−xk+1​)(1)
在式(1)中取 x = x k x=x_k x=xk​ ,整理可得:
g k + 1 − g k ≈ H k + 1 ∗ ( x k + 1 − x k ) (2) g_{k+1}-g_{k}≈H_{k+1}*(x_{k+1}-x_k)\tag{2} gk+1​−gk​≈Hk+1​∗(xk+1​−xk​)(2)
引入记号:
s k = x k + 1 − x k , y k = g k + 1 − g k s_k=x_{k+1}-x_k,y_k=g_{k+1}-g_{k} sk​=xk+1​−xk​,yk​=gk+1​−gk​
式 (2) 可以写为:
y k ≈ H k + 1 ∗ s k = > 简记为: y k ≈ B k + 1 ∗ s k y_k≈H_{k+1}*s_k =>简记为:y_k≈B_{k+1}*s_k yk​≈Hk+1​∗sk​=>简记为:yk​≈Bk+1​∗sk​
或者
s k ≈ H k + 1 − 1 ∗ g k = > 简记为: s k ≈ D k + 1 ∗ y k s_k≈H^{-1}_{k+1}*g_k=>简记为:s_k≈D_{k+1}*y_k sk​≈Hk+1−1​∗gk​=>简记为:sk​≈Dk+1​∗yk​
这就是所谓的拟牛顿条件,它对迭代过程中的海森矩阵做约束。

4.2 DFP 算法

参考:牛顿法与拟牛顿法学习笔记(三)DFP 算法

4.3 BFGS 算法

参考:牛顿法与拟牛顿法学习笔记(四)BFGS 算法

4.4 L-BFGS 算法

牛顿法与拟牛顿法学习笔记(五)L-BFGS 算法
参考:
泰勒展开式的理解
牛顿法与拟牛顿法学习笔记(一)牛顿法
梯度下降和EM算法:系出同源,一脉相承
Markdown公式、特殊字符、上下标、求和/积分、分式/根式、字体

牛顿法、梯度下降法与拟牛顿法相关推荐

  1. 什么是牛顿法(Newton methods)?什么是拟牛顿法(Quasi Newton methods)?牛顿法和梯度下降法的区别是什么?

    什么是牛顿法(Newton methods)?什么是拟牛顿法(Quasi Newton methods)?牛顿法和梯度下降法的区别是什么? 牛顿法的最初提出是用来求解方程的根的.对于最优化问题,其极值 ...

  2. 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法

    最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法 最小二乘法+牛顿法+拟牛顿法+梯度下降法+梯度上升法+共轭梯度法 上述几种方法,除了最小二乘法是直接使用公式取得之外,另外几种方法都是 ...

  3. 梯度下降法、随机梯度下降法、批量梯度下降法及牛顿法、拟牛顿法、共轭梯度法

    http://ihoge.cn/2018/GradientDescent.html http://ihoge.cn/2018/newton1.html 引言 李航老师在<统计学习方法>中将 ...

  4. 机器学习案例系列教程——优化方法总结(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)

    梯度下降法 梯度下降法是最早最简单,也是最为常用的最优化方法.梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解.一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的.梯度 ...

  5. 算法细节系列(3):梯度下降法,牛顿法,拟牛顿法

    算法细节系列(3):梯度下降法,牛顿法,拟牛顿法 迭代算法原型 话不多说,直接进入主题.在我看来,不管是梯度下降法还是牛顿法,它们都可以归结为一个式子,即 x=ϕ(x) x = \phi(x) 也就是 ...

  6. 优化算法之梯度下降法、牛顿法、拟牛顿法和拉格朗日乘数法

      在机器学习中,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解最优化问题. - 无约束最优化问题:梯度下降法.牛顿法.拟牛顿法: - 有约束最优化问题:拉格朗 ...

  7. 常用的优化算法:梯度下降法,牛顿法,拟牛顿法,共轭梯度法

    目录 0.几个数学概念 1. 梯度下降法(Gradient Descent) 2. 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods) 3. 共轭 ...

  8. 最优化方法总结——梯度下降法、最速下降法、牛顿法、高斯牛顿法、LM法、拟牛顿法

    目录 1 最优化方法的结构 2 常用最优化方法对比分析 3 相关计算公式 1 最优化方法的结构 最优化问题的一般形式为: 其中为决策变量,是目标函数,为约束集或可行域.特别地,如果,则最优化问题成为无 ...

  9. 梯度下降法,牛顿迭代,牛顿法,拟牛顿法总结对比

    1.梯度下降 梯度下降是优化方法中最基础也是最重要的一类.其思想也很简单: f(x)=f(x0)+f′(x0)(x−x0)+⋯f(x) = f(x_0) + f'(x_0)(x-x_0) + \cdo ...

最新文章

  1. python四个带 key 参数的函数(max、min、map、filter)
  2. Python基础练习题合集
  3. buck电路pscad仿真_典型电路—电容10UF 和0.1UF并联使用的技巧常见于电源电路中,你知道其中的原理吗?...
  4. [iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端三)
  5. 如何给5岁孩子解释DCT?
  6. redmine 无法登录 mysql 服务器_Redmine 数据库连接错误
  7. 绘制自己组合的k线图_短线投资者必备的四种双K线组合抄底技巧,次次选中黑马股,精准率超高...
  8. linux 查看运行平台,linux查看程序运行相关命令
  9. 免费临时邮箱大全,专注个人隐私保护
  10. 后端开发技术栈(含视频、书籍推荐)
  11. Python调用百度地图api查询经纬度
  12. 华为鸿蒙用不用清理内存卡,华为这6个设置必须要关,否则天天清理内存也没用,关了再用5年...
  13. activeMQ初识到使用(二)
  14. mysql 分数段_编写sql实现分数排名 mysql
  15. Introduction to Linear Optimization 2.1 多面体和凸集
  16. IT 开发人员工作三年后如何规划自己的职业生涯
  17. PPASR流式与非流式语音识别
  18. Android FDE 加密过程
  19. Shodan Hacking
  20. 计算机网络——不同网段下的主机通信

热门文章

  1. C++ 强制类型转换:static_cast、dynamic_cast、const_cast 和 reinterpret_cast
  2. python 爬取淘宝网课
  3. 数据结构C语言顺序表入门简单题目你会了吗?
  4. SQL Server Management Studio(SMSS)删除连接记录
  5. 新概念1、2英语学习计划
  6. easyUI折叠表格-默认展开操作-去除扩展符号(+)-清除滚轮--实例加效果图
  7. CCS 使用报错合集 -mcu:cc26xx
  8. 铨顺宏RFID:射频技术应用在服装资产管理上有什么作用
  9. SpringBoot:概述,注解,搭建,部署
  10. Qiime2最全安装教程--包教包会,可私信远程免费帮装