共轭梯度法(CG)详解
Posted 陆嵩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了共轭梯度法(CG)详解相关的知识,希望对你有一定的参考价值。
共轭梯度法(CG)详解
文章目录
之前写过几个关于共轭梯度法的注记,譬如:
- https://blog.csdn.net/lusongno1/article/details/78550803
- https://blog.csdn.net/lusongno1/article/details/68942821
但事实上很多人反应,看得一头雾水,基于此,本篇文章旨在对于共轭梯度方法从优化的角度给一个干净的描述。
线性共轭梯度法
线性共轭梯度方法是 Hestenes 和 Stiefel 在 20 世纪 50 年代提出来的的一个迭代方法,用于求解正定系数矩阵的线性系统。
假定
A
A
A 是对称正定的矩阵,求解线性方程组
A
x
=
b
A x=b
Ax=b
等价于求解如下凸优化问题:
min
ϕ
(
x
)
≡
1
2
x
T
A
x
−
b
T
x
\\min \\phi(x) \\equiv \\frac12 x^T A x-b^T x
minϕ(x)≡21xTAx−bTx
该问题的梯度便是原线性系统的残差,
∇
ϕ
(
x
)
=
A
x
−
b
≡
r
(
x
)
\\nabla \\phi(x)=A x-b \\equiv r(x)
∇ϕ(x)=Ax−b≡r(x)
在
x
=
x
k
x=x_k
x=xk 点,
r
k
=
A
x
k
−
b
r_k=A x_k-b
rk=Axk−b。
共轭方向
定义 对于非零向量集合
p
0
,
p
1
,
⋯
,
p
t
\\left\\p_0, p_1, \\cdots, p_t\\right\\
p0,p1,⋯,pt 关于对称正定矩阵
A
A
A 是共轭的,若
p
i
T
A
p
j
=
0
,
for all
i
≠
j
.
p_i^T A p_j=0, \\quad \\text for all i \\neq j .
piTApj=0, for all i=j.
容易证明,共轭向量之间是线性独立的。
假设已经有了一组共轭向量,我们把未知量表示为它们的线性组合
x
=
∑
i
=
1
n
α
i
p
i
x=\\sum_i=1^n \\alpha^i p_i
x=∑i=1nαipi,我们希望能够寻找一组系数,去极小化
ϕ
(
x
)
=
∑
i
=
1
n
(
(
α
i
)
2
2
p
i
T
A
p
i
−
α
i
p
i
T
b
)
\\phi(x)=\\sum_i=1^n \\left(\\frac\\left(\\alpha^i\\right)^22 p_i^T A p_i-\\alpha^i p_i^T b\\right)
ϕ(x)=i=1∑n(2(αi)2piTApi−αipiTb)
求和中的每一项都是独立的,极小化之,那么我们就可以得到
α
i
=
p
i
T
b
p
i
T
A
p
i
\\alpha^i=\\fracp_i^T bp_i^T A p_i
αi=piTApipiTb
通过共轭方向,把一个 n 维问题,拆解成了 n 个一维问题。
从矩阵的角度来看这个问题,我们把自变量做一个变换,
x
^
=
S
−
1
x
\\hatx=S^-1 x
x^=S−1x
其中,
S
S
S 由共轭向量张成,
S
=
[
p
0
,
p
1
,
⋯
,
p
n
−
1
]
S=\\left[p_0, p_1, \\cdots, p_n-1\\right]
S=[p0,p1,⋯,pn−1]
那么二次问题变为,
ϕ
^
(
x
^
)
≡
ϕ
(
S
x
^
)
=
1
2
x
^
T
(
S
T
A
S
)
x
^
−
(
S
T
b
)
T
x
^
\\hat\\phi(\\hatx) \\equiv \\phi(S \\hatx)=\\frac12 \\hatx^T\\left(S^T A S\\right) \\hatx-\\left(S^T b\\right)^T \\hatx
ϕ^(x^)≡ϕ(Sx^)=21x^T(STAS)x^−(STb)Tx^
由共轭性,我们知道矩阵
S
T
A
S
S^T A S
STAS 是个对角矩阵,那么久变成了一个对角矩阵系数的极简方程。
共轭方向法
所谓的共轭方向法,就是给定初值点
x
0
x_0
x0 和一组共轭方向,我们通过如下方式迭代更新
x
k
x_k
xk: 以上是关于共轭梯度法(CG)详解的主要内容,如果未能解决你的问题,请参考以下文章 线性共轭梯度法求解正定二次函数极小点以及线性方程组的解--MATLAB源程序 线性共轭梯度法求解正定二次函数极小点以及线性方程组的解--MATLAB源程序
x
k
+
1
=
x
k
+
α
k
p
k
x_k+1=x_k+\\alpha_k p_k
xk+1=xk+αkpk
α
k
=
−
r
k
T
p
k
p
k
T
A
p
k
\\alpha_k=-\\fracr_k^T p_kp_k^T A p_k
αk=−pkTApkrkT