本文的閱讀等級:高級
共軛梯度法 (conjugate gradient method) 是一個適用於實對稱正定矩陣的線性方程數值解法。顧名思義,共軛梯度法的核心是共軛 (conjugacy) 和梯度 (一階導數)。共軛能夠加快收斂,梯度則提供正交基底。因為這兩個特性,共軛梯度法的結構簡單優美,儲存量及運算量少,並且無須設定參數。對於大尺寸矩陣,我們往往無法使用直接法求解,譬如 Cholesky 分解 (見“Cholesky 分解”),這時候可以採用以迭代方式計算的共軛梯度法。此外,對於大型非線性最佳化問題,共軛梯度法也是最有效的數值算法之一。
令 為一個
階實對稱矩陣,
為非零向量。假設
是
的一組基底。令
。明顯地,
是
階可逆矩陣。線性方程
的精確解
可表示為
,
其中 。線性方程
等號兩邊左乘
,並代入上式可得等價式
,
其中係數矩陣 仍為對稱矩陣,
是待解的向量。若
是對角矩陣,
,
,則
。
因為 ,若
是正定矩陣,則
(見“特殊矩陣 (6):正定矩陣”)。換句話說,正定矩陣保證可逆,故
,
精確解可表示為
。
前述推演引申出下列定義:對於一個實對稱矩陣 ,若
,我們說
和
對於
共軛 (conjugate) 或
─正交 (
-orthogonal)。本文考慮
是正定矩陣,但此性質並不納入共軛的基本定義。若
,則任何兩個向量皆為共軛。若
,則共軛等價於正交。我們稱
對於
為共軛向量集,若
,
(在不造成混淆的情況下,以下簡稱共軛向量集)。對於實對稱正定矩陣
,若
為非零共軛向量集,則它們是線性獨立向量。證明於下:假設數組
使得
。等號兩邊左乘
,
。因為
,證明
。在向量空間
,一旦獲得完整的非零共軛向量集
,透過矩陣─向量乘法與內積運算即可求出精確解。
如欲採用迭代法計算近似解,我們必須改寫精確解的表達式。給定初始猜測解 ,以及非零共軛向量集
,令
,
且
,
。
因此,。下列遞迴式成立:
。
利用共軛性很容易解出 。考慮
,
即得
,
其中 ,稱為殘差 (residual)。
下面這個性質說明共軛向量集的價值所在。令 。考慮二次型
。
當 ,
有極小值
。限定
,我們可以證明遞迴式產生的
,
,最小化
。令
階矩陣
。設
,上面的約束優化問題等價於尋找
使最小化
。
因為 ,求導可得 (見“矩陣導數”,SV-10)
。
最小化 的充要條件為
,即
屬於
的零空間 (nullspace)
,也就是說,
,因為
(見“線性代數基本定理 (二)”)。我們用歸納法來證明
(即
),
。若
,
是空集合,命題自然成立。假設
。寫出
的遞迴式,
。
等號兩邊左乘 ,再套用
的公式,
。
對於 ,
,使用先前假設
,以及共軛性,可得
。
合併以上結果,證明 。
因為 ,由上述性質可推論
。理論上,使用至多
次計算可得精確解
。接下來的工作是找出適當的非零共軛向量集
使得子空間
包含較接近
的近似解。最佳化理論提供了一些線索。將目標函數改寫如下:
最小化 等價於最小化
。
求導可得
,
故線性方程 的唯一解等於二次優化問題
的唯一解。給定初始猜測解
,梯度下降法 (gradient descent) 使用下列遞迴公式更新近似解 (見“最佳化理論與正定矩陣”):
其中 表示朝精確解的前進方向,
是一個夠小的正數,稱為步長 (step size),使得
。若
,則
即為線性方程的解。我們可以設
[1],這個方法稱為最陡下降法 (steepest descent)。然而,當
的條件數 (condition number) 大時,
未必指向靠近精確解的方向,最陡下降法的收斂速度因此變得很慢 (見“條件數”)。為了克服這個問題,共軛梯度法提出一個非常精巧的想法:以共軛向量
取代殘差 (負梯度)
,這麼做的原因是限定
,遞迴式
得到的
可使
有最小值。
下面介紹共軛梯度法。給定初始猜測解 ,令
。重抄近似解和殘差的遞迴公式:
其中 。設想共軛向量
可表示為
的線性組合,但為了減少計算,我們採用下列遞迴算式:
,
其中 稱為動量 (momentum),滿足共軛性
,由此解出
。如果
,則共軛梯度法退化為最陡下降法。
定義 Krylov 子空間
且 。若共軛梯度法於
尚未停止,下列性質成立:
,
。
根據性質(1)和(2), 可推得
,
,也就是說,殘差
為正交集。性質(3)表明
為共軛向量集。
我們用歸納法同時證明這三個性質。當 ,性質(1-3)顯然成立。假設對於
,性質(1-3)成立。考慮
。根據假設,性質(1)給出
,由性質(2)可知
,因此
。此外,因為
,即
,推論
,否則
。所以,
。
接著證明性質(2),考慮 。性質(1)表明
,性質(2)假設
,故
,也就證明
。
欲證明性質(3),考慮 。若
,由
的公式可知
。若
,
,因為
且
;
,源自性質(3)的假設。所以,
,
。
為減少計算量,利用以上性質化簡 和
。因為
,即
,
,可得
,故
。
因為 ,推知
(見附註[1]),共軛梯度法的第一次調整量與最陡下降法相同。使用
,
的分子為
,分母為
,故
。
我們將共軛梯度法整理於下:對於一 階實對稱正定矩陣
和非零向量
,設定初始解
(一般設為零)。
共軛梯度法
,
- 對於
-
-
-
- 若
,停止計算。
-
-
若不考慮數值計算引進的捨入誤差,共軛梯度法於第 次迭代後得到精確解,
。為控制收斂,設相對殘量
的容許誤差為
。一般而言,共軛梯度法可快速逼近至精確解,收斂速度取決於
的條件數。如果
的條件數過大 (即接近病態),通過前處理 (preconditioning) 可改善收斂性能。具體地說,將
以等價的
取代,其中
是實對稱正定矩陣使得
有較小的條件數[2]。下圖顯示共軛梯度法 (紅色線段) 與最陡下降法 (綠色線段) 的收斂軌跡,兩個算法產生相同的
,但共軛梯度法迭代二次 (
) 便得到解。
共軛梯度法具有兩個標誌性質:(1) 朝向精確解的推進方向有共軛性,,
,(2) 殘差有正交性,
,
。最後我們說明何以共軛梯度法被歸於 Krylov 子空間法。共軛梯度法設定近似解
,可知
,且殘差滿足
,此即 Petrov-Galerkin 條件
(見“Krylov 子空間法──線性方程的數值解法 (二):GMRES 與 FOM”)。共軛梯度法與 FOM 有相同的定義條件,差異在於前者的 Krylov 子空間基底為共軛向量集並以遞迴式計算近似解
,後者則以 Lanczos 算法取代 Arnoldi 算法 (因為
) 求得 Krylov 子空間的一組單範正交基底 (orthonormal basis) 之後再計算線性方程解
。
附註:
[1] 寫出
,
對 求導可得
。
設上式為零,解出
。
[2] 維基百科:Preconditioner
感謝, 十分有幫助!
谢谢,也对我帮助很大!