擬牛頓法(quasi-Newton method)
/ KWAY-zye NOO-tun /
牛頓法快,是因為它知道曲率——海森矩陣——但對大問題而言,每步計算並求逆那個大矩陣既昂貴又往往不可能。擬牛頓法是巧妙的折衷:保留牛頓法那種具曲率資訊的速度,卻從不計算海森矩陣。它改為在過程中「學習」曲率的近似,純粹從你本來就在算的梯度中推斷,就像你只憑路面坡度在兩點間如何變化,就能推測路怎麼彎。
關鍵觀察是割線思想:若你知道兩個相鄰點 x_k 與 x_{k+1} 的梯度,那麼梯度的變化就透露了你移動方向上的曲率。令 s_k = x_{k+1} - x_k(步進)、y_k = grad f(x_{k+1}) - grad f(x_k)(梯度變化)。真正的海森矩陣 H 大致滿足 H s_k = y_k(割線方程)。擬牛頓法保有一個近似海森的矩陣 B_k(或其逆),每步用一個便宜的公式「更新」它,使新矩陣滿足割線方程,然後走一個類牛頓步 p = -B_k^{-1} grad f(x_k)。每次更新是個低秩的改動,只需 O(n^2) 運算——遠少於組出並分解真正海森的 O(n^3)——而且只用梯度,完全不碰二階導數。
擬牛頓法(BFGS 是著名的那個,L-BFGS 是其低記憶版表親)是中到大型光滑最佳化的實用主力,達到超線性收斂——比梯度下降的線性速度快、僅略遜於牛頓的二次速度——卻從不觸及海森矩陣。誠實的限制:收斂只是超線性、非二次;近似需要曲率條件(y_k^T s_k > 0)才能保持正定,這正是這些方法要配 Wolfe 線搜尋的原因;而對真正巨大的問題,連 O(n^2) 的矩陣都太大,這正是限記憶 L-BFGS 填補的缺口——它只存最近幾對 (s_k, y_k),而非整個矩陣。
在一條又長又窄、最速下降要鋸齒數千步的谷裡,BFGS 從單位矩陣當作海森初猜出發,僅在觀察梯度如何變化的幾步之後,就把谷地的拉長程度學得夠好,幾乎能直直走向谷底——超線性,且只用它本就算過的梯度。
從梯度變化建構曲率——牛頓般的速度,無須海森矩陣。
擬牛頓法是超線性收斂、非二次——它近似海森矩陣,所以在解附近無法媲美真牛頓的位數倍增。它還保有一個 n×n 矩陣(O(n^2) 記憶),對超大模型太多;這時就由限記憶 L-BFGS 接手,只存最近幾個梯度差向量。