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