Algorithms
L-BFGS 是如何工作的?
本文的目的是通過最大化正則化對數似然來優化一些參數。然後他們計算偏導數。然後作者提到他們使用 L-BFGS 優化方程,這是一種標準的準牛頓程序,用於優化許多變量的平滑函數(沒有更多細節)。
它是如何工作的 ?
基本上將 L-BFGS 視為一種尋找目標函數(局部)最小值的方法,利用目標函數值和目標函數的梯度。但是,該級別的描述涵蓋了除 L-BFGS 之外的許多優化方法。您可以在 Nocedal 和 Wright “數值優化,第 2 版” http://www.springer.com/us/book/9780387303031的第 7.2 節中閱讀更多相關信息。https://en.wikipedia.org/wiki/Limited-memory_BFGS提供了關於 L-BFGS 的非常粗略的討論。
一階方法意味著使用梯度(一階導數)(可能還有目標函數值),但不使用 Hessian(二階導數)。例如,考慮梯度下降和最速下降等。
二階方法意味著使用梯度和 Hessian(也可能是目標函數值)。二階方法可以基於
- “精確” Hessian 矩陣(或梯度的有限差分),在這種情況下,它們被稱為牛頓方法或
- Quasi-Newton 方法,通過施加“割線”(Quasi-Newton)條件,基於多次迭代的梯度差異來近似 Hessian。有許多不同的準牛頓方法,它們以不同的方式估計 Hessian。最受歡迎的一種是 BFGS。BFGS Hessian 近似既可以基於梯度的完整歷史,在這種情況下稱為 BFGS,也可以僅基於最近的 m 個梯度,在這種情況下稱為有限內存 BFGS,縮寫為作為 L-BFGS。L-BFGS 的優點是只需要保留最近的 m 個梯度,其中 m 通常在 5 到 20 左右,這比存儲完整的 n*(n+1)/2 個元素所需的存儲要求小得多(三角形)Hessian 估計,如 BFGS 所要求的,其中 n 是問題維度。與(完整的)BFGS 不同,Hessian 的估計從未明確形成或存儲在 L-BFGS 中(儘管 BFGS 的一些實現僅形成和更新 Hessian 近似的 Choelsky 因子,而不是 Hessian 近似本身);相反,Hessian 估計所需的計算是在沒有明確形成的情況下完成的。對於非常大的問題(當 n 非常大時),使用 L-BFGS 代替 BFGS,但性能可能不如 BFGS。因此,在能夠滿足 BFGS 的內存需求時,BFGS 優於 L-BFGS。另一方面,L-BFGS 在性能上可能不會比 BFGS 差多少。Hessian 的估計從未明確形成或存儲在 L-BFGS 中(儘管 BFGS 的一些實現僅形成和更新 Hessian 近似的 Choelsky 因子,而不是 Hessian 近似本身);相反,Hessian 估計所需的計算是在沒有明確形成的情況下完成的。對於非常大的問題(當 n 非常大時),使用 L-BFGS 代替 BFGS,但性能可能不如 BFGS。因此,在能夠滿足 BFGS 的內存需求時,BFGS 優於 L-BFGS。另一方面,L-BFGS 在性能上可能不會比 BFGS 差多少。Hessian 的估計從未明確形成或存儲在 L-BFGS 中(儘管 BFGS 的一些實現僅形成和更新 Hessian 近似的 Choelsky 因子,而不是 Hessian 近似本身);相反,Hessian 估計所需的計算是在沒有明確形成的情況下完成的。對於非常大的問題(當 n 非常大時),使用 L-BFGS 代替 BFGS,但性能可能不如 BFGS。因此,在能夠滿足 BFGS 的內存需求時,BFGS 優於 L-BFGS。另一方面,L-BFGS 在性能上可能不會比 BFGS 差多少。估計 Hessian 所需的計算是在沒有明確形成的情況下完成的。對於非常大的問題(當 n 非常大時),使用 L-BFGS 代替 BFGS,但性能可能不如 BFGS。因此,在能夠滿足 BFGS 的內存需求時,BFGS 優於 L-BFGS。另一方面,L-BFGS 在性能上可能不會比 BFGS 差多少。估計 Hessian 所需的計算是在沒有明確形成的情況下完成的。對於非常大的問題(當 n 非常大時),使用 L-BFGS 代替 BFGS,但性能可能不如 BFGS。因此,在能夠滿足 BFGS 的內存需求時,BFGS 優於 L-BFGS。另一方面,L-BFGS 在性能上可能不會比 BFGS 差多少。
即使在這種描述級別,也有許多變體。例如,這些方法可以完全不受保護,在這種情況下任何事情都會發生,並且它們可能不會收斂到任何事情,即使是在凸問題上也是如此。或者他們可以得到保護。受保護的方法通常基於信任區域或線搜索,旨在確保收斂到某些東西。非常重要的是,僅知道一種方法是 L-BFGS 本身並不能告訴您使用了哪種類型的保護(如果有的話)。這有點像說汽車是四門轎車——但當然並非所有四門轎車的性能或可靠性都相同。它只是優化算法的一個屬性。