上篇文章介绍了线性共轭梯度法。简单回顾一下,线性共轭梯度法是一种不需要矩阵求逆或矩阵分解,以迭代的方式求解线性方程的方法,而且可以保证在N次迭代内收敛,其中N是变量的维度。对于维度较大的问题,辅以良好的预处理步骤,算法可以在很少的步数内收敛,得到一个比较好的近似解。
在线性共轭梯度法提出约10年后,Fletcher和Reeves将其推广到非线性优化问题中,称为非线性共轭梯度法。这种新方法可以替代之前讲过的线搜索和信赖域方法,并且仍然在高维度问题中展现出非凡的性能。
Fletcher-Reeves CG
我们把Fletcher和Reeves最早提出的非线性共轭梯度法称为Fletcher-Reeves CG(FR-CG)算法。按照惯例,我们应该先介绍该方法提出的动机,并一步步推导其计算公式。但据我所知,FR-CG似乎不是从某个目标推导出来的,而是直接在CG(线性共轭梯度法)上改进而来的。直接替换CG算法中某些值的计算方法,如下所示
与共轭梯度法(一):线性共轭梯度中的式(5.23)相比,只修改了两处。一是计算
的方式,用线搜索(一):步长的选取中介绍的线搜索算法来搜索
方向上可接受的步长。之所以这样做,是因为在非线性问题中,我们已经无从构造一组共轭向量了,而且也不可能保证N次迭代内收敛。FR-CG更像是一种线搜索方法,通过所谓共轭梯度的方式计算优化方向,然后用步长搜索算法计算一个可接受的步长。二是用梯度
替代残差
,因为在CG中,残差恰好就是梯度,这里只不过将其推广而已。换句话说,式(5.40)不过是CG推广到普通非线性函数后的结果,CG则是其在二次函数下的特例。
不过,强行推广到普通非线性函数就能奏效吗?那可未必。首先,我们要确认式(5.40)的每次迭代都能生成使得目标函数下降的方向。其次,我们还要探究该方法是否能保证全局收敛。
第一个问题等价于证明
,我们代入式(5.40)的第4行,得到
如果第
次迭代求得了确切解,即
是
方向上的最优步长,那么下一次迭代的梯度方向一定与上次迭代方向垂直,即
,于是