无约束二次规划——共轭梯度法

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

二次型

二次型可以理解为初中学习的二次函数 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)=21xTAxbTx+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)=21xTAxbTx
一般我们解决的是凸二次规划,这就要求 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=(2111)

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

记不记得高中的圆锥曲线,对于正定矩阵,其等高线是一个椭圆,当然高维空间就是椭球或者超椭球,负定就是翻下去。可以从图像中看到正定矩阵就像是一张被完全抬起来的桌布,拥有一个全局最小值。我们目前所处理的二次规划问题的函数基本都长成这个样子。

二次型的两种等高线图

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.38270.92390.92390.3827)(0.5858003.4142)(0.38270.92390.92390.3827)(x1x2)(12)(0.38270.92390.92390.3827)(0.38270.92390.92390.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.38270.92390.92390.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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薯一个蜂蜜牛奶味的愿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值