共轭梯度法
学习自知乎:https://www.zhihu.com/question/27157047 and wikipedia and 非线性规划课
简介
在数值线性代数中,共轭梯度法是一种求解对称正定线性方程组Ax=b的迭代方法。
事实上,求解Ax=b等价于求解: min∣∣Ax−b∣∣22min||Ax-b||_2^2min∣∣Ax−b∣∣22 ,将其展开后可以得到:minxTATAx−bTAx+bTbmin \quad x^TA^TAx-b^TAx+b^TbminxTATAx−bTAx+bTb ,也就是等价于求解min12xTATAx−bTAxmin\quad \frac{1}{2}x^TA^TAx-b^TAxmin21xTATAx−bTAx 。于是解方程问题就转化为了求解二次规划问题(QP)。
共轭梯度法是介于梯度下降法与牛顿法之间的一个方法,是一个一阶方法。它克服了梯度下降法收敛慢的缺点,又避免了存储和计算牛顿法所需要的二阶导数信息。
在n维的优化问题中,共轭梯度法最多n次迭代就能找到最优解(是找到,不是接近),但是只针对二次规划问题。
共轭梯度法的思想就是找到n个两两共轭的共轭方向,每次沿着一个方向优化得到该方向上的极小值,后面再沿其它方向求极小值的时候,不会影响前面已经得到的沿哪些方向上的极小值,所以理论上对n个方向都求出极小值就得到了n维问题的极小值。
算法推导过程
目标函数的标准形式:
minx∈Rn12xTQx−bTx\min_{x\in R^n}\frac{1}{2}x^TQx-b^Txminx∈Rn21xTQx−bTx
Q-conjugate: 对于正定矩阵Q,如果非零向量x,y是Q-conjugate的,那么
xTQy=0x^TQy=0xTQy=0
我们需要找到n个相互Q-conjugate的基向量d1,d2,…,dn{d_1,d_2,…,d_n}d1,d2,…,dn,它们相互共轭且线性无关。
因此空间中任意向量x都可以用这组基向量表示:
x=∑i=1naidix=\sum_{i=1}^na_id_ix=∑i=1naidi
因此我们的目标函数可以改写为:
mina1,...,an∈Rn12(∑i=1naidi)TQ(∑j=1najdj)−bT(∑i=1naidi)=mina1,...,an∈Rn12∑i=1n∑j=1naiajdiTQdj−∑i=1naibTdi \min_{a_1,...,a_n\in R^n}\frac{1}{2}(\sum_{i=1}^na_id_i)^TQ(\sum_{j=1}^na_jd_j)-b^T(\sum_{i=1}^na_id_i) \\ =\min_{a_1,...,a_n\in R^n}\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^na_ia_jd_i^TQd_j-\sum_{i=1}^na_ib^Td_i a1,...,an∈Rnmin21(i=1∑naidi)TQ(j=1∑najdj)−bT(i=1∑nai