共轭梯度算法 详细

共轭梯度算法

介绍

在数值线性代数中,共轭梯度算法是一种求解对称正定线性方程 组 A x = b 的迭代方法。

事实上,求解 A x = b 等价于求解 m i n   1 2 x T A x + b T x ,于是解方程问题就转化为了求解二次规划问题(QP)。

共轭梯度算法是介于梯度下降与牛顿法之间的一个方法,是一个一阶方法。它克服了梯度下降法收敛慢的缺点,又避免了存储和计算牛顿法所需要的二阶导数信息。

n 维的优化问题中,共轭梯度法最多 n 次迭代就能找到最优解(是找到,不是接近),但是只针对二次规划问题。

共轭梯度算法的思想就是找到 n 个两两共轭的共轭方向,每次沿着一个方向优化得到该方向上的极小值,后面再沿着其它方向求解极小值的时候,不会影响前面已经得到的沿那些方向上的极小值,所以理论上对 n 个方向都求解出极小值就能得到 n 维问题的极小值。

算法推到过程

目标函数:

m i n   1 2 x T A x + b T x

其中 A 为对称正定矩阵。

如果已经有 n 个关于 A 共轭的基向量 p 0 , p 1 , , p n 1 ,它们相互共轭(即 < p i , p j >= p i T A p j = 0 , i j )且线性无关。因此有 x R n ,有 x = i = 0 n 1 a i p i

目标函数可以改写为:

m i n a 0 , , a n 1 1 2 ( i = 0 n 1 a i p i ) T A ( j = 0 n 1 a j p j ) b T ( i = 0 n 1 a i p i ) = m i n a 0 , , a n 1 1 2 i = 1 n 1 j = 1 n 1 a i a j p i T A p j i = 0 n 1 a i b T p i = m i n a 0 , , a n 1 1 2 i = 0 n 1 ( a i 2 p i T A p i a i b T p i )

由于上式中各个部分独立,于是等价于优化问题:
m i n a i   1 2 a i 2 p i T A p i a i b T p i i = 0 , 1 , , n 1

求解可得:
a i = b T p i p i T A p i

所以给定 p 0 , p 1 , , p n 1 就可以计算优化问题的解 x = i = 0 n 1 b T p i p i T A p i p i ,即为原线性方程组的解。

接下来的问题就是如何得到 p 0 , p 1 , , p n 1 ,这可以通过Gram-Schmit算法从一组线性无关向量 r 0 , r 1 , , r n 1 得到。

于是需要解决下面两个问题:

  1. 如何构造一组线性无关向量 r 0 , r 1 , , r n 1
  2. 如何由 r 0 , r 1 , , r n 1 计算 p 0 , p 1 , , p n 1

如何构造一组线性无关向量 r 0 , r 1 , , r n 1

做如下构造:

r i = b A x i x i = k < i a k p k i = 0 , 1 , , n 1

其中 x 0 = 0 x n = k < n a k p k 为优化问题的解

下证 r 0 , r 1 , , r n 1 线性无关:

不妨设 r i 0 , i = 0 , 1 , , n 1 ,否则若 r i = b A x i = 0 ,则 x i 为优化问题解。用数学归纳法证明

  1. r 0 0 ,所以 r 0 本身线性无关
  2. r 0 , r 1 , , r i 线性无关,注意到

r i + 1 = b A x i + 1 = b A ( x i + a i p i ) = r i a i A p i

于是有

r i + 1 = r i a i A p i = r i 1 a i 1 A p i 1 a i A p i = = r 0 k = 0 i a k A p k

上式两边和 p k , k < i + 1 做内积有
p k T r i + 1 = p k T r 0 a p k T A p k = p k T b b T p k = 0

故可知 r i + 1 s p a n { p 0 , p 1 , , p i }

由于 p 0 , p 1 , , p i r 0 , r 1 , , r i 正交化通过Gram-Schmit算法构造,有

s p a n { p 0 , p 1 , , p i } = s p a n { r 0 , r 1 , , r i }

故有 r i + 1 s p a n { r 0 , r 1 , , r i }

又由于 r i + 1 0 ,所以 r 0 , r 1 , , r i + 1 线性无关

由数学归纳法知 r 0 , r 1 , , r n 1 线性无关

如何由 r 0 , r 1 , , r n 1 计算 p 0 , p 1 , , p n 1

p 0 = r 0 ,假设已知 p 0 , p 1 , , p i 1 ,由Gram-Schmit过程知:

p i = r i k < i β k p k

其中
β k = < p k , r i > < p k , p k > = p k T A r i p k T A p k

既有
(1) p i = r i k < i p k T A r i p k T A p k p k

现在化简 β k ,因为 β k 的分子分母都要进行矩阵和向量乘法,需要很高计算量。

注意到:

(2) r i + 1 = b A x i + 1 = b A ( x i + a i p i ) = r i a i A p i

以及 k < i

(3) p k T r k = p k T ( b A x i ) = p k T b p k T A ( j < i a j p j ) = p k T b a k p k T A p k = 0

(4) p k T A r i = ( A p k ) T r i = ( 2 ) = 1 a k ( r k r k + 1 ) T r i

(5) r k T r i = ( 1 ) ( p k + j < k β j p j ) T r i = ( 3 ) 0

所以有

p k T A r i = 0 k < i 1 p i 1 T A r i = 1 a i 1 r i T r i

p k T A p k = p k T A ( r k j < k β j p j ) = p k T A r k = ( 4 ) 1 a k ( r k r k 1 ) T r k = ( 5 ) 1 a k r k T r k

所以

p i = r i + r i T r i r i 1 T r i 1 p i 1

a i = b T p i p i T A p i = ( r i + A x i ) T p i p i T A p i = r i T p i + ( k < i a k p k ) T A p i p i T A p i = r i T ( r i k < i β k p k ) p i T A p i = ( 3 ) = r i T r i p i T A p i

算法

  1. 初始条件: x 0 = 0 , r 0 = b , p 0 = r 0
  2. 迭代: a = r i T r i p i T A p i , x i + 1 = x i + a i p i , r i + 1 = r i a i A p i , p i + 1 = r i + r i + 1 T r i + 1 r i T r i p i

猜你喜欢

转载自blog.csdn.net/qq_20186593/article/details/80261145
今日推荐