共轭梯度法推导

学习自知乎:https://www.zhihu.com/question/27157047 and wikipedia and 非线性规划课

简介

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

事实上,求解Ax=b等价于求解: min||Axb||22min||Ax−b||22 。于是解方程问题就转化为了求解二次规划问题(QP)。

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

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

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

算法推导过程

目标函数的标准形式:

minxRn12xTQxbTxminx∈Rn12xTQx−bTx

Q-conjugate: 对于正定矩阵Q,如果非零向量x,y是Q-conjugate的,那么

xTQy=0xTQy=0

我们需要找到n个相互Q-conjugate的基向量d1,d2,,dnd1,d2,…,dn,它们相互共轭且线性无关

因此空间中任意向量x都可以用这组基向量表示:

x=ni=1aidix=∑i=1naidi

因此我们的目标函数可以改写为:

mina1,...,anRn12(i=1naidi)TQ(j=1najdj)bT(i=1naidi)=mina1,...,anRn12i=1nj=1naiajdTiQdji=1naibTdimina1,...,an∈Rn12(∑i=1naidi)TQ(∑j=1najdj)−bT(∑i=1naidi)=mina1,...,an∈Rn12∑i=1n∑j=1naiajdiTQdj−∑i=1naibTdi
了。

为了看的清楚点,我们把求和分开来写:

mina1,...,anRn12(a21dT1Qd1+a1bTd1)+12(a22dT2Qd2+a2bTd2)+...+12(a2ndTnQdn+anbTdn)mina1,...,an∈Rn12(a12d1TQd1+a1bTd1)+12(a22d2TQd2+a2bTd2)+...+12(an2dnTQdn+anbTdn)
的最小值,然后第二项,即可。

第一项是一个二次函数,求最小值我们直接求导即可:

a1=bTd1dT1Qd1a1=bTd1d1TQd1 ,同样可得:

ai=bTdidTiQdiai=bTdidiTQdi

所以最优解x=ni=1aidix∗=∑i=1naidi,将上式代入可得

x=ni=1bTdidTiQdidix∗=∑i=1nbTdidiTQdidi

现在,我们只需要构建Q-conjugate向量组 d1,d2,,dnd1,d2,…,dn。下面给出完整的共轭梯度算法。

完整算法

输入:正定矩阵Q(A),初始向量x0x0,向量b

输出:最优解对应的向量xk+1xk+1

r0:=bQx0r0:=b−Qx0 (r_i为第i次迭代的误差)

d0:=r0d0:=r0 (d_i是我们要求的共轭向量)

k:=0k:=0 (k表示第几次迭代)

repeat

  αk:=rTkrkdTkQdkαk:=rkTrkdkTQdk (该项为学习率,是求出来的,对应的是之前说的a_i)

  xk+1:=xk+αkdkxk+1:=xk+αkdk

  rk+1:=rkαkQdkrk+1:=rk−αkQdk

  如果rk+1rk+1足够小,则提前退出循环 (也就是认为已经找到最优解了)

  βk:=rTk+1rk+1rTkrkβk:=rk+1Trk+1rkTrk

  dk+1:=rk+1+βkdkdk+1:=rk+1+βkdk (Gram-Schmidt过程求d_k)

  k:=k+1

end repeat

The result is xk+1xk+1

你可能感兴趣的:(机器学习)