Quasi-Newton Method
  Quasi-Newton Method每一步计算过程中仅涉及到函数值和函数梯度值计算,这样有效避免了Newton Method中涉及到的Hessian矩阵计算问题。于Newton Method不同的是Quasi-Newton Method在每点处构建一个如下的近似模型:
 
从上面的近似模型我们可以看出,该模型用B_k代替了Newton Method中近似模型中涉及到的Hessian矩阵。因此Quasi-Newton Method中方向计算公式如下所示:
         (24)
  这里有必要解释一下用于近似Hessian矩阵的B_k可行性,及一个指导性方案。根据Taylor(泰勒)级数可知如下公式:

由于函数▽f(.)连续,因此上式可以表示为:

                           (25)
  因此每一选择Hessian矩阵的近似B_ k+1时,可以像式(24)那样模仿真实的Hessian矩阵的性质。得到下式:
          (26)
其中:

s_k = x_k+1 – x_k y_k = ▽f(x_k+1) – ▽f(x_k) (27)

同时要求B_k+1为对称正定矩阵。

BFGS Method

  从Quasi-Newton Method方向公式 (24) 中,可以看到每一步计算方向的过程中均涉及到B_k+1矩阵求逆的问题,为了避免该计算,通过分析公式(26)可知,我们可以构建一个近似H_k+1,该近视满足如下方程:

   H_k+1*y_k = s_k     (28)

同时要求H_k+1为对称正定矩阵。因此BFGS Method中,每个点处的方向由如下公式计算:

   p_k = –H_k*▽f(x_k)   (29)

  在此基础上,BFGS方向迭代公式如下所示:

                         (30)
其中ρ_k为一个标量:
     
有了上面(30)的H_k迭代公式后,还有一个问题就是初始的H_0如何计算,目前常用的方法是初始的H_0直接设为单位矩阵I。因此BFGS Method用于解无约束最优化的过程可以表示为如下过程:

LBFGS Method
  上一节所介绍的BFGS Method比较适合解决中小规模无约束最优化问题,但是BFGS算法产生的Hessian近似矩阵H_k为n * n的,同时该矩阵非稀疏,因此当n的规模较大时将面临两个问题:
1) 存储问题:n规模较大时,n*n矩阵对内存的消耗将较大;
2) 计算问题:n规模较大,同时n*n矩阵非稀疏时,计算复杂度将较高;
为了解决以上问题,引申出了Limited-Memory Quasi-Newton Method,目前使用较多的LBFGS算法即属于该类算法。为了减少H_k矩阵的存储,LBFGS算法利用最近几代的curvature 信息来构建Hessian矩阵的近似。由BFGS Method我们知道:

   x_k+1 = x_k + a_k * H_k*▽f(x_k)

其中a_k为步长,H_k为Hessian矩阵的近似,可以通过如下迭代公式计算:

 H_k+1 = V_k* H_k*V_k+ρ_k * s_k* s_k   (31)

其中:
  
从上面的H_k的迭代计算公式可知,H_k会慢慢由稀疏矩阵转变为稠密矩阵,因此存储该矩阵以及进行该矩阵和向量的相乘运算的消耗将较大。为了避免该问题,LBFGS算法在BFGS算法的基础上从两点进行了改进:
1)估算每一步对应的Hessian近似矩阵时,给出一个当前步的初始Hessian矩阵估计H_k0
2) 利用过去当前代及过去m-1代的curvature信息修正初始Hessian矩阵估计H_k0,得到最终的Hessian矩阵近似估计H_k。
计算式如下所示:

                     (32)
上述计算式(32),可以通过公式(31)递归计算获取。公式(32)可以用以下算法表示:
     
  从上面计算H_k的公式(32)可知,要估算每个点x_k处的Hessian矩阵近似,需要给出初始估计H_k0,H_k0一般通过以下公式计算:
     
有了上面的方向计算算法后,LBFGS算法用于解无约束最优化问题,可以表示为如下算法:

1 选择一个初始点x_0,并选择收敛判断条件 ε> 0,以及常量m(代表过去代数)一般为6
2 k left 0 H_0 left I,因此r = H_0 *▽f(x_0) =▽f(x_0)
3 while ||▽f(x_k)|| > ε
4   计算从当前点x_k走到下一个点x_k+1的方向
      p_k = –r
5 采用line search策略计算步长a_k
6 x_k+1 = x_k + a_k * p_k
7 if k > m
   删除LBFGS计算H_k时用不上的向量对(s_k-m, y_k-m)
8 计算并保存 s_k = x_k+1 – x_k y_k = ▽f(x_k+1) – ▽f(x_k)
9 采用LBFGS Hessian矩阵近似算法计算 r
10 k left k+1

4.算法总结
  用于解无约束优化算法的Quasi-Newton Method中的LBFGS算法到这里总算初步介绍完了,不过这里笔者要承认的是这篇文档省略了许多内容,包括算法收敛性的证明以及收敛速度证明等许多内容。因此读者若希望对这一块有一个更深入的认识可以参考以下两本书:
1) Numerical Methods for Unconstrained Optimization and Nonlinear Equations(J.E. Dennis Jr. Robert B. Schnabel)
2) Numerical Optimization(Jorge Nocedal Stephen J. Wright)

转载于:https://www.cnblogs.com/wuwuwu/p/6335191.html

Quasi-Newton Method--LBFGS相关推荐

  1. 牛顿法(Newton‘s method)和拟牛顿法(quasi Newton method)

    简述 在看伊恩·古德费洛的深度学习,4.3节基于梯度的优化方法时提到 仅使用梯度信息的优化算法称为 一阶优化算法 ,如梯度下降. 使用Hessian矩阵的优化算法称为 二阶最优化算法 ,如牛顿法. 牛 ...

  2. 【最优化算法】基于【MATLAB】的拟牛顿法【Quasi Newton method】分析与推导

  3. 牛顿法 Newton Method

    上一次我们讨论了具有 Q-线性收敛性的普通的 gradient descent 方法,今天我们要介绍一种收敛速度更快的算法:Newton Method(或者叫 Newton's Method). 可能 ...

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

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

  5. Newton Method in Maching Learning

    牛顿方法:转自http://blog.csdn.net/andrewseu/article/details/46771947 本讲大纲: 1.牛顿方法(Newton's method) 2.指数族(E ...

  6. 优化算法——牛顿法(Newton Method)

    一.牛顿法概述 除了前面说的梯度下降法,牛顿法也是机器学习中用的比较多的一种优化算法.牛顿法的基本思想是利用迭代点处的一阶导数(梯度)和二阶导数(Hessen矩阵)对目标函数进行二次函数近似,然后把二 ...

  7. 牛顿法(Newton Method)的原理和实现步骤

    牛顿法的法的目的 牛顿法不仅可以用来求解函数的极值问题,还可以用来求解方程的根,二者在本质上是一个问题,因为求解函数极值的思路是寻找导数为0的点,这就是求解方程. 牛顿法的法的原理 一元函数的情况 根 ...

  8. 机器学习复习6-优化器等 面试看这一篇就妥妥够了

    该文对优化器进行了全面的梳理和整理,包括原理分析,面试看这一篇就妥妥够了! 预备知识 一.正定和半正定矩阵 (了解) 半正定矩阵包括了正定矩阵. 不定矩阵:特征值有正有负 二.牛顿法和拟牛顿法(二阶优 ...

  9. 这 725 个机器学习术语表,太全了!

    下面是几位机器学习权威专家汇总的725个机器学习术语表,非常全面了,值得收藏! 英文术语 中文翻译 0-1 Loss Function 0-1损失函数 Accept-Reject Sampling M ...

  10. 这725个机器学习术语表,太全了!

    大家好,我是阳哥 这是几位机器学习权威专家汇总的725个机器学习术语表,非常全面了,值得收藏! 英文术语 中文翻译 0-1 Loss Function 0-1损失函数 Accept-Reject Sa ...

最新文章

  1. 「对抗深度强化学习」是如何解决自动驾驶汽车系统中的「安全性」问题的?...
  2. java使用Jxl和Poi读写Excel
  3. 在WebStorm里配置watcher实现编辑less文件时自动生成.map和压缩后的.css文件
  4. can not open file Permission denied at securecrt_linux_crack.pl line 57
  5. 装饰器模式与代理模式的区别_JS设计模式(三):装饰器模式、代理模式
  6. python高效开发实战配套源文件_分享12个python使用技巧,助你轻松掌握Python高效开发...
  7. Lesson5 一阶自治微分方程
  8. iOS 打电话 发短信功能的实现
  9. android httpclient webview,android – 访问WebView中的http响应头?
  10. 【动漫推荐】Specail A--特优生
  11. 真人秀制作网站_真人秀正在毁掉中国的明星
  12. 数学建模常用模型简介其他模型大全汇总
  13. 轻松办公信息化,六大OA产品优劣点评
  14. 如何限制在制品?| Kanban
  15. Android 8.0版本更新下载
  16. 计算机网络相关知识总结
  17. win10打开软件中文乱码怎么修复
  18. 同一网段和不同网段中的两台主机通信的过程
  19. aec java ios_Java並發編程之原子操作類
  20. 型B2C电子商务网站组织架构分析

热门文章

  1. PostgreSQL在Linux和Windows安装和入门基础教程
  2. Python生成二维码脚本
  3. jupyter lab R
  4. 8位算术逻辑运算实验
  5. 【C++基础入门】C++全栈体系(一)
  6. Google Scholar特别好用的镜像网站链接
  7. python空间点赞_用Python登录好友QQ空间点赞的示例代码
  8. 服务器cpu 单核过高的影响,一次单核CPU占用过高问题的处理
  9. 计算机软件服务行业规范,行业标准信息服务平台
  10. javaweb课程设计:基于websocket的网络聊天室(所有的资源和代码还有详细步骤我都会提供)