本文为作者原创,原载于我们的主页,转载于此。
这是一个关于共轭梯度法的笔记。请大家注意的是,这是个笔记,并不是一个教程,因此少不了跳跃和欠解释的地方。对CG方法了解不多的同学请移步这里。
一个关于对称矩阵的线性方程组等价于求解如下极小值问题:
这很容易说明,我们微分目标函数得
所以意味着.
设为问题的解,为偏离极小值点的位移,即
我们定义残差或负梯度,容易看出,正比于偏离梯度零点的位移:
最速下降法:搜索方向为本轮迭代初始点的梯度方向,搜索到梯度与搜索方向正交的位置开始下一轮迭代。
共轭梯度法:搜索方向为本轮迭代初始点的梯度方向(残差方向)用A-内积做正交化,扣除掉之前所有搜索方向的分量给出,搜索到梯度与搜索方向正交的位置开始下一轮迭代。
首先考虑一个简单情形,即A=I时。此时f退化,且x的不同分量解耦,f的极小值问题分解为各分量上的极小值问题。我们只需要在各分量方向上找到极小值,问题就得解了。具体的说,我们从任意一个初始点出发,在方向上寻找极小值,然后从这个极小值出发继续在寻找方向的极小,以此类推最后到达全局极小值。
A为正定对称矩阵的一般情形,其实只是上述情形中的x表述在一个新坐标系下的结果(下文详细解释)。为了求解这种情形,我们考察上述方法的求解轨迹在新坐标系里的对应。
首先,A=I时的各个正交搜索方向在新坐标系里对应着一组A-正交的方向,因此我们需要设法找出这样一组正交方向,然后各自求解这些方向上的极小值。
求解特定方向上极小值的方法不变,极小点就是这个方向上梯度正交于搜索方向时的点(原因很简单,这说明搜索方向上梯度分量为零)。
最后一点,如何找到这样一组A-正交方向?
一般方法是找一组现成的完备基,进行A-正交化。问题是计算量比较大。
记迭代到第i步时,所搜索过的这样一组A-正交的搜索方向单位矢量为,它们撑起的子空间
即第步前已经搜索过的子空间。
共轭梯度法的一个关键之处在于它可以从每次迭代的中快速构造出新的搜索方向,而不需要对进行完整的正交化手续(即不需依次扣除中,…方向的分量)。原因在于自然的和正交,因此构造只需要从中扣除掉分量即可。
因此,共轭梯度算法有两处关键,一处为通过利用A-正交关系来把搜索问题转换到一个特殊坐标系,使得各搜索方向上的极小值问题解耦;一是利用和是A-正交的这一规律来充分简化A-正交搜索方向的构造。
接下来我们详细论证这个算法。
设
其中表示矩阵求逆后做转置,很拗口,不过这个不重要。
于是我们有
可见已经被分解为一系列独立的子问题,正是将问题解耦所用的坐标变换。
在新的坐标系中,整个极小值问题可以通过在一组正交方向上依次寻找极小点来解决。但求解需要对做分解,并非一个计算上经济的解决方法。这一个变换的真正意义在于,我们可以通过它来找到求解轨迹在坐标系中的对应。
是线性变换,因此中的一组直线仍被变换为中的一组直线。坐标系中,我们依次沿着一组正交方向求解极小值,因此只需要找到这组方向在坐标系中的对应(一组未必正交的方向),就可以等价的直接在这组方向之上寻找极小值,而不需要经过坐标变换。
考虑这组正交方向单位矢
可见,这一组正交的方向在变换到坐标系中后,虽然不是中通常意义的正交矢量组,却可以在A-内积意义下成为一组A-正交矢量。这里的A-内积,指的是以对称矩阵定义的内积运算
需要注意的是,上述结论是可逆的,如果,同样也可以得出,对应着坐标系中两个正交的方向。因此,可以直接在坐标系下,寻找一组A-正交的方向,然后在这一组方向上依次极小化目标函数,就可以找到整个问题的极小值。
算法的更新规则为
其中为第步搜索方向上的位移长度,它的大小可以通过应该和正交这一要求定出
算法将参数空间划分成了一个层级结构,下面我们来看看这个结构的性质。
根据上述更新规则,可以发现可以由另外几个矢量组撑起。首先,由的更新规则可以发现,由和线性组合而成,另一方面,我们有初始条件,归纳而知,可以由线性组合出来。于是我们有
接着我们考虑的更新规则。可以看到,.于是我们可以从或构造出
接下来我们再考虑各子空间和向量之间的正交关系。首先,在的补空间里。这点是明显的,因为每一个优化步都会优化掉在相应方向上的分量,因而剩余的就只位于的补空间里。于是我们有
这样和之间的A-正交关系就很明显了。由于,而只包含分量,因而
即和子空间也是A-正交的。这意味着正交于
到这里就可以解释为什么我们有了:
至此我们完成了第二个关键点的论证,且更清楚的了解了参数空间,尤其是子空间的结构。