Bfgs最適化

BFGS(Broyden-Fletcher-Goldfarb-Shanno)是最常用於實踐的二階最適化算法之一。它用於尋找給定函數的局部最小值,並且特別適用於凸函數。BFGS 算法通過疊代更新搜尋方向和步長來尋找最小值。

以下是 BFGS 算法的概述:

  1. 初始化:選擇一個起始點 x0,並設置一個較小的步長。

  2. 計算梯度:在點 x0 處計算梯度 g0 = ∇f(x0)。

  3. 搜尋方向:初始化搜尋方向 p0 = -g0。

  4. 線性搜尋:在方向 p0 上進行線性搜尋,找到步長 α 使得 f(x0 - αp0) 盡可能小。

  5. 更新點:計算新的點 x1 = x0 - αp0。

  6. 更新梯度:計算 g1 = ∇f(x1)。

  7. 更新 Hessian 估計:使用 BFGS 更新公式更新 Hessian 估計矩陣 H。

  8. 檢查 convergence:如果滿足 convergence 條件,則停止算法;否則,轉到下一步。

  9. 更新搜尋方向:使用更新的 Hessian 估計計算新的搜尋方向 p1。

  10. 重復:使用 p1 進行下一次疊代,直到達到 convergence。

BFGS 算法的關鍵在於如何有效地更新 Hessian 估計。BFGS 更新公式是一個神經網絡,它通過保持一個低秩因子來近似 Hessian 矩陣。這種方法使得算法在處理大型問題時非常高效。

BFGS 算法通常比其他最適化算法(如梯度下降法)更快地找到最小值,並且它對於處理具有許多變量的問題特別有效。然而,BFGS 算法只找到局部最小值,並且它要求函數的梯度可微。