共轭梯度法的简单直观理解
参考资料
本文是参考以下内容,结合自己的理解做的笔记。请尽量直接访问下述网页。
- 矩阵与数值计算(11)——共轭梯度法
- 共轭梯度法(一):线性共轭梯度
- 无痛版共轭梯度法介绍(更新到第五章)
- 共轭梯度法通俗讲义
第4个资料尤其清晰完备,很多都是参考它的。
What is: 什么是共轭梯度法?(简单直观理解)
共轭梯度法可以看作是梯度下降法(又称最速下降法)的一个改进。
对梯度下降来说
x ⃗ i + 1 = x ⃗ i − α ∇ f \vec x_{i+1}=\vec x_i - \alpha\nabla f xi+1=xi−α∇f
其中 α \alpha α控制了一步要走多远,因此被称为步长,在机器学习里面又称为学习率。
梯度下降法x移动的方向正是函数f的负梯度方向,这代表了局部上f减小最快的方向。
但是局部上减小最快的方向并不代表全局上指向最终解的方向。所以梯度下降法会出现像醉汉下山一样走出zig-zag的路线。如下图

图1 梯度下降法在2维解空间(也就是解向量只有两个维度)走出的路径示意图。
注:假如A是正定对称阵,其2维解空间必定是椭圆的。
为什么会走出这一Z形线呢?因为梯度下降的方向恰好与f垂直,也就是说和等高线垂直。沿着垂直于等高线的方向,一定能让函数减小,也就是最快地下了一个台阶。但是最快下台阶并不意味着最快到达目标位置(即最优解),因为你最终的目标并不是直对着台阶的。
为了修正这一路线,采用另一个方向:即共轭向量的方向。
我们先暂且给出共轭梯度法最后的形式,方便字母的定义:
x ⃗ i + 1 = x ⃗ i − α d ⃗ i \vec x_{i+1}=\vec x_i - \alpha \vec d_i xi+1=xi−αdi
对照梯度下降法,每次向下走的方向不是梯度了,而是专门的一个方向 d ⃗ \vec d d。除此之外和梯度下降法几乎一样。
在推进下一步之前,我们来看看什么是向量共轭。
共轭向量
下面先简要介绍共轭向量
所谓共轭向量,在数学上即:
p i T A p j = 0 p_i^TAp_j=0 piTApj=0
其中A是一个对称正定矩阵。
p i p_i pi和 p j p_j pj是一对共轭的向量。
可见,共轭是正交的推广化,因为向量正交的定义为:
p i T p j = 0 p_i^Tp_j=0 piTpj=0
共轭比正交中间只多了个矩阵A,而矩阵的几何意义正是对一个向量进行线性变换(可见Gilber Strang的线代公开课)。因此共轭向量的意思就是一个向量经过线性变换(缩放剪切和旋转)之后与另一个向量正交。
共轭方向
言归正传,如何找到一个更好的方向呢?我们首先可以看看最完美的方向是什么样的。
下面这张图展示的就是最完美的方向。图中向量e代表的是误差。向量d就是方向向量。

误差e即当前迭代所得到的解与精确解的差值:
e ⃗ i = x ⃗ i − x ⃗ ∗ \vec e_i=\vec x_i- \vec x^* ei=xi−x∗
可惜我们并不能找到误差向量e,因为我们不知道精确解。
那么退而求其次,我们就找误差向量的共轭向量。因为图中可以看出,误差向量是与方向向量垂直的,即正交。刚才说了,共轭就是正交的推广。一个向量乘以一个矩阵之后与另一个方向正交,就是共轭。
即找到
d ⃗ T A e ⃗ = 0 \vec d ^T A \vec e =0 dTAe=0
但是这个公式里面仍然含有e,我们必须想办法去掉它,换成一个我们可以计算的量。
在推进下一步之前,我们先来看看误差与残差这两个概念的区别。
误差与残差
前面写道:
误差error 即当前迭代所得到的解与精确解的差值:
e ⃗ i = x ⃗ i − x ⃗ ∗ \vec e_i=\vec x_i- \vec x^* ei=xi−x∗
但是这种定义显然是没法直接用的,因为我们不知道精确解 x ∗ x^* x∗
那么退而求其次,我们想到,当误差收敛为0的时候,必然满足方程Ax=b,那么由此就可以定义出残差residual:
r ⃗ i = b ⃗ − A x ⃗ i \vec r_i=\vec b-A\vec x_i r

最低0.47元/天 解锁文章
4086

被折叠的 条评论
为什么被折叠?



