• 优化算法-BFGS


      BGFS是一种准牛顿算法, 所谓的"准"是指牛顿算法会使用Hessian矩阵来进行优化, 但是直接计算Hessian矩阵比较麻烦, 所以很多算法会使用近似的Hessian, 这些算法就称作准牛顿算法(Quasi Newton Algorithm).

      1. 牛顿算法(Newton Algorithm)

      牛顿算法考虑了函数的二阶单数, 是一种二阶优化方法, 并且是所有其他二阶优化方法的鼻祖. 作为对比, 梯度下降(Gradient Descent)只考虑了函数的一阶导数, 是一阶优化方法. 

      推导过程:

      我们考虑函数的二阶泰勒展开式: (mathit{f_{quad}}(mathit{oldsymbol{ heta}})=mathit{f_k}+mathit{oldsymbol{g}_k^T}(mathit{oldsymbol{ heta}-oldsymbol{ heta}_k})+frac{1}{2}(mathit{oldsymbol{ heta}-oldsymbol{ heta}_k})^{mathit{T}}oldsymbol{H}_{mathit{k}}(mathit{oldsymbol{ heta}-oldsymbol{ heta}_k})), 其中(mathit{oldsymbol{ heta}})为需要优化的参数, (oldsymbol{g}_k)为( abla mathit{f}(mathit{oldsymbol{ heta}_k}))

      上式可以重写作:$$mathit{f_{quad}}(mathit{ heta}) = mathit{oldsymbol{ heta}^T}oldsymbol{A}mathit{oldsymbol{ heta}}+oldsymbol{b}^Tmathit{oldsymbol{ heta}}+mathit{c}$$

      其中

        式子-1

      二次函数的最小值取为(x=-frac{b}{2a})

      所以式子-1在(mathit{oldsymbol{ heta}})取以下值时达到最小

      

      亦即Newton算法每次迭代时只需要对(mathit{oldsymbol{ heta}_k})加上以下项

      

      牛顿方法的步骤为

      2. BFGS算法

      Newton算法在计算时需要用到Hessian矩阵(oldsymbol{H}), 计算Hessian矩阵非常费时, 所以研究者提出了很多使用方法来近似Hessian矩阵, 这些方法都称作准牛顿算法, BFGS就是其中的一种, 以其发明者Broyden, Fletcher, Goldfarb和Shanno命名.

      BFGS算法使用以下方法来近似Hessian矩阵, (oldsymbol{B}_k approx oldsymbol{H}_k):

      

      初始时可以取(oldsymbol{B}_0=oldsymbol{I})

      因为Hessian矩阵的大小为(mathit{O}(mathit{D}^2)), 其中D为参数的个数, 所以有时Hessian矩阵会比较大, 可以使用L-BFGS(Limited-memory BFGS)算法来进行优化.

      参考文献:

      [1]. Machine Learning: A Probabilistic Perspective. p249-p252.

      [2]. Wekipedia: L-BFGS

  • 相关阅读:
    [编]在Web站点中创建和使用Rss源
    Command 模式 Step by Step
    正则表达式 教程
    (转)mysql处理高并发,防止库存超卖
    【转】Golang- import 导入包的几种方式:点,别名与下划线
    win10 c++ build tools的安装
    Reporting Services VS designer 的一个 bug
    使用 AppDomain 让不支持线程安全的代码轻松支持线程安全
    应该怎样设计和开发软件
    Razor 也可说是一个模板引擎,用不着学习 T4 了
  • 原文地址:https://www.cnblogs.com/kemaswill/p/3352898.html
Copyright © 2020-2023  润新知