无约束二次规划——共轭梯度法
二次型
二次型可以理解为初中学习的二次函数 y = a x 2 + b x + c y=ax^2+bx+c y=ax2+bx+c的矩阵版本:
f ( x ) = 1 2 x T A x − b T x + c f(x)=\frac{1}{2}x^TAx-b^Tx+c f(x)=21xTAx−bTx+c
因为 c c c对 x x x的最优值没有影响,所以一般情况将其写成:
f ( x ) = 1 2 x T A x − b T x f(x)=\frac{1}{2}x^TAx-b^Tx f(x)=21xTAx−bTx
一般我们解决的是凸二次规划,这就要求 A A A是一个半正定矩阵,如果 A A A是一个正定矩阵,那么其就是一个严格凸二次规划,有唯一的最小值。这里举一个例子:
f ( x ) = 1 2 ( x 1 x 2 ) ( 2 1 1 3 ) ( x 1 x 2 ) − ( 1 2 ) ( x 1 x 2 ) f(x)=\frac{1}{2} \left( \begin{array}{c} x_1 & x_2 \end{array} \right)\left( \begin{array}{c} 2 & 1\\ 1&3 \end{array} \right) \left( \begin{array}{c} x_1 \\ x_2 \end{array} \right)-\left( \begin{array}{c} 1 & 2 \end{array} \right)\left( \begin{array}{c} x_1 \\ x_2 \end{array} \right) f(x)=21(x1x2)(2113)(x1x2)−(12)(x1x2)
当 A A A是一个对称正定矩阵的时候, f ( x ) f(x) f(x)的最优解可以通过求导等于零计算出,即:
A x = b Ax=b Ax=b
但是当维数很大的时候求解这个方程组在以前是个很困难的事情,所以人们想用迭代的方式去求解,也就产生了共轭梯度法。
对正定的理解
首先需要理解为什么是正定的,带有正定矩阵的函数是什么样子的。
这里我们使用MATLAB画图,做出 A A A分别为正定,半正定,负定和不定矩阵的图像,函数为了简单,统一形式为:
f ( x 1 , x 2 ) = x T A x f(x_1,x_2)=x^TAx f(x1,x2)=xTAx
1.正定矩阵
A = ( 2 0 0 3 ) A=\left( \begin{array}{c} 2 & 0\\ 0&3 \end{array} \right) A=(2003)


2.半正定矩阵
A = ( 2 1 0 0 ) A=\left( \begin{array}{c} 2 & 1\\ 0&0 \end{array} \right) A=(2010)


3.负定矩阵
A = ( − 2 − 1 − 1 − 1 ) A=\left( \begin{array}{c} -2 & -1\\ -1&-1 \end{array} \right) A=(−2−1−1−1)


4.不定矩阵
A = ( 2 0 0 − 2 ) A=\left( \begin{array}{c} 2 & 0\\ 0&-2 \end{array} \right) A=(200−2)


记不记得高中的圆锥曲线,对于正定矩阵,其等高线是一个椭圆,当然高维空间就是椭球或者超椭球,负定就是翻下去。可以从图像中看到正定矩阵就像是一张被完全抬起来的桌布,拥有一个全局最小值。我们目前所处理的二次规划问题的函数基本都长成这个样子。
二次型的两种等高线图
1.正椭圆
第一种等高线图是比较中规中矩的,椭圆的长短轴和坐标轴平行。具体来说就是没有 x 1 x_1 x1和 x 2 x_2 x2的耦合项,表现在 A A A矩阵中就是只有对角元素有值:
A = ( 3 0 0 1 ) A=\left( \begin{array}{c} 3 & 0\\ 0&1 \end{array} \right) A=(3001)
这里可以做如下函数的图像参考:
f ( x ) = ( x 1 x 2 ) ( 3 0 0 1 ) ( x 1 x 2 ) − ( 1 2 ) ( x 1 x 2 ) f(x)=\left( \begin{array}{c} x_1 & x_2 \end{array} \right)\left( \begin{array}{c} 3 & 0\\ 0&1 \end{array} \right) \left( \begin{array}{c} x_1 \\ x_2 \end{array} \right)-\left( \begin{array}{c} 1 & 2 \end{array} \right)\left( \begin{array}{c} x_1 \\ x_2 \end{array} \right) f(x)=(x1x2)(3001)(x1x2)−(12)(x1x2)


2.斜椭圆
这个等高线中椭圆的长短轴和坐标轴就不是平行的了,也就是在矩阵中的其他位置有数字了:
A = ( 3 1 1 1 ) A=\left( \begin{array}{c} 3 & 1\\ 1&1 \end{array} \right) A=(3111)
这里可以做如下函数的图像参考:
f ( x ) = ( x 1 x 2 ) ( 3 1 1 1 ) ( x 1 x 2 ) − ( 1 2 ) ( x 1 x 2 ) f(x)=\left( \begin{array}{c} x_1 & x_2 \end{array} \right)\left( \begin{array}{c} 3 & 1\\ 1&1 \end{array} \right) \left( \begin{array}{c} x_1 \\ x_2 \end{array} \right)-\left( \begin{array}{c} 1 & 2 \end{array} \right)\left( \begin{array}{c} x_1 \\ x_2 \end{array} \right) f(x)=(x1x2)(3111)(x1x2)−(12)(x1x2)


梯度下降法的缺点
一般我们刚接触最优化,肯定会学到梯度下降法,那这个问题很显然可以用梯度下降的方法来求解,为什么还要开发其他算法呢?其实一张图就可以明白:


这里可以看到,梯度下降法需要走的路比共轭梯度要曲折的多,随着维数的增加,椭圆的倾斜等等,梯度下降寻找的路会更加复杂,而对于共轭梯度法,如果自变量有 n n n个,那么它能在不多于 n n n步之内找到最小值。所以梯度下降法可以用吗,当然可以,但是对于二次规划问题,有比它更快更好更直接的方法去求解。梯度下降法使用的很广泛,是一种万能算法,而共轭梯度在提出来的时候就是专门解决这类问题的,普通西装肯定没有定制的西装合身,所以可以把共轭梯度法看成一种私人定制。
坐标轮换法的思想
从正椭圆出发
搜索方向使用坐标轴的方向,这样可以轻易的看出,这种简化的共轭梯度法能够很快的找到最小点,而且有 n n n个坐标轴,就能在至多 n n n步之后找到最小值。
斜椭圆与特征向量
如果是一个斜椭圆,怎么处理,很简单,我们使用坐标变换将坐标系旋转到椭圆长短轴的位置不就可以了,对于这个函数:
f ( x ) = ( x 1 x 2 ) ( 3 1 1 1 ) ( x 1 x 2 ) − ( 1 2 ) ( x 1 x 2 ) f(x)=\left( \begin{array}{c} x_1 & x_2 \end{array} \right)\left( \begin{array}{c} 3 & 1\\ 1&1 \end{array} \right) \left( \begin{array}{c} x_1 \\ x_2 \end{array} \right)-\left( \begin{array}{c} 1 & 2 \end{array} \right)\left( \begin{array}{c} x_1 \\ x_2 \end{array} \right) f(x)=(x1x2)(3111)(x1x2)−(12)(x1x2)
可以先找到特征值和特征向量,将其变成:
f ( x ) = ( x 1 x 2 ) ( 0.3827 − 0.9239 − 0.9239 − 0.3827 ) ( 0.5858 0 0 3.4142 ) ( 0.3827 − 0.9239 − 0.9239 − 0.3827 ) ( x 1 x 2 ) − ( 1 2 ) ( 0.3827 − 0.9239 − 0.9239 − 0.3827 ) ( 0.3827 − 0.9239 − 0.9239 − 0.3827 ) ( x 1 x 2 ) f(x)=\left( \begin{array}{c} x_1 & x_2 \end{array} \right)\left( \begin{array}{c} 0.3827 & -0.9239\\ -0.9239&-0.3827 \end{array} \right) \left( \begin{array}{c} 0.5858 & 0\\ 0&3.4142 \end{array} \right)\left( \begin{array}{c} 0.3827 & -0.9239\\ -0.9239&-0.3827 \end{array} \right)\left( \begin{array}{c} x_1 \\ x_2 \end{array} \right)-\left( \begin{array}{c} 1 & 2 \end{array} \right)\left( \begin{array}{c} 0.3827 & -0.9239\\ -0.9239&-0.3827 \end{array} \right) \left( \begin{array}{c} 0.3827 & -0.9239\\ -0.9239&-0.3827 \end{array} \right) \left( \begin{array}{c} x_1 \\ x_2 \end{array} \right) f(x)=(x1x2)(0.3827−0.9239−0.9239−0.3827)(0.5858003.4142)(0.3827−0.9239−0.9239−0.3827)(x1x2)−(12)(0.3827−0.9239−0.9239−0.3827)(0.3827−0.9239−0.9239−0.3827)(x1x2)
设新的变量为 a = ( 0.3827 − 0.9239 − 0.9239 − 0.3827 ) ( x 1 x 2 ) a = \left( \begin{array}{c} 0.3827 & -0.9239\\ -0.9239&-0.3827 \end{array} \right)\left( \begin{array}{c} x_1 \\ x_2 \end{array} \right) a=(0.3827−0.9239−0.9239−0.3827)(x1x2),则就可以变成一个新的二次规划问题:
f ( a ) = ( a 1 a 2 ) ( 0.5858 0 0 3.4142 ) ( a 1 a 2 ) − ( 1 2 ) ( 0.3827 − 0.9239 − 0.9239 − 0.3827 ) ( a 1 a 2 ) f(a)=\left( \begin{array}{c} a_1 & a_2 \end{array} \right)\left( \begin{array}{c} 0.5858 & 0\\ 0&3.4142 \end{array} \right) \left( \begin{array}{c} a_1 \\ a_2 \end{array} \right)

本文详细讲解了共轭梯度法在无约束二次规划中的应用,涉及正定矩阵的几何理解、二次型的等高线图、梯度下降法的局限性、坐标轮换法和共轭方向法的实施。重点展示了如何通过共轭向量对正定矩阵进行对角化,以及共轭梯度法的迭代步骤和优化技巧。

6143

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



