優化算法-BFGS


  BGFS是一種准牛頓算法, 所謂的"准"是指牛頓算法會使用Hessian矩陣來進行優化, 但是直接計算Hessian矩陣比較麻煩, 所以很多算法會使用近似的Hessian, 這些算法就稱作准牛頓算法(Quasi Newton Algorithm).

  1. 牛頓算法(Newton Algorithm)

  牛頓算法考慮了函數的二階單數, 是一種二階優化方法, 並且是所有其他二階優化方法的鼻祖. 作為對比, 梯度下降(Gradient Descent)只考慮了函數的一階導數, 是一階優化方法. 

  推導過程:

  我們考慮函數的二階泰勒展開式: \(\mathit{f_{quad}}(\mathit{\boldsymbol{\theta}})=\mathit{f_k}+\mathit{\boldsymbol{g}_k^T}(\mathit{\boldsymbol{\theta}-\boldsymbol{\theta}_k})+\frac{1}{2}(\mathit{\boldsymbol{\theta}-\boldsymbol{\theta}_k})^{\mathit{T}}\boldsymbol{H}_{\mathit{k}}(\mathit{\boldsymbol{\theta}-\boldsymbol{\theta}_k})\), 其中\(\mathit{\boldsymbol{\theta}}\)為需要優化的參數, \(\boldsymbol{g}_k\)為\(\nabla \mathit{f}(\mathit{\boldsymbol{\theta}_k})\)

  上式可以重寫作:$$\mathit{f_{quad}}(\mathit{\theta}) = \mathit{\boldsymbol{\theta}^T}\boldsymbol{A}\mathit{\boldsymbol{\theta}}+\boldsymbol{b}^T\mathit{\boldsymbol{\theta}}+\mathit{c}$$

  其中

    式子-1

  二次函數的最小值取為\(x=-\frac{b}{2a}\)

  所以式子-1在\(\mathit{\boldsymbol{\theta}}\)取以下值時達到最小

  

  亦即Newton算法每次迭代時只需要對\(\mathit{\boldsymbol{\theta}_k}\)加上以下項

  

  牛頓方法的步驟為

  2. BFGS算法

  Newton算法在計算時需要用到Hessian矩陣\(\boldsymbol{H}\), 計算Hessian矩陣非常費時, 所以研究者提出了很多使用方法來近似Hessian矩陣, 這些方法都稱作准牛頓算法, BFGS就是其中的一種, 以其發明者Broyden, Fletcher, Goldfarb和Shanno命名.

  BFGS算法使用以下方法來近似Hessian矩陣, \(\boldsymbol{B}_k \approx \boldsymbol{H}_k\):

  

  初始時可以取\(\boldsymbol{B}_0=\boldsymbol{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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM