注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中的凸优化部分的内容进行翻译学习。

4 凸优化问题

利用凸函数和集合的定义,我们现在可以考虑凸优化问题。 正式的定义为:一个凸优化问题在一个最优化问题中的形式如下:

minimizef(x)subjecttoxC minimize\quad f(x) \\ subject\quad to\quad x\in C

其中ff为凸函数,CC为凸集,xx为优化变量。然而,由于这样写可能有点不清楚,我们通常把它写成

minimizef(x)subjecttogi(x)0,i=1, ,mhi(x)=0,i=1, ,p \begin{aligned} minimize\quad &f(x) \\ subject\quad to\quad &g_i(x)\le 0,\quad i=1,\cdots,m \\ &h_i(x)=0,\quad i=1,\cdots,p \end{aligned}

其中ff为凸函数,gig_i为凸函数,hih_i为仿射函数,xx为优化变量。

注意这些不等式的方向很重要:凸函数gig_i必须小于零。这是因为gig_i0sublevel0-sublevel集是一个凸集,所以可行域,是许多凸集的交集,其也是凸集(回忆前面讲过的仿射子空间也是凸集)。如果我们要求某些凸函数gig_i的不等式为gi0g_i\ge 0,那么可行域将不再是一个凸集,我们用来求解这些问题的算法也不再保证能找到全局最优解。还要注意,只有仿射函数才允许为等式约束。直觉上来说,你可以认为一个等式约束hi=0h_i= 0等价于两个不等式约束hi0h_i\le 0hi0h_i\ge 0。然而,当且仅当hih_i同时为凸函数和凹函数时,这两个约束条件才都是有效的,因此hih_i一定是仿射函数。

优化问题的最优值表示成pp^*(有时表示为ff^*),并且其等于目标函数在可行域7^7内的最小可能值。

7 数学专业的学生可能会注意到,下面出现的最小值更应该用符号infinf。这里我们不需要担心这些技术问题,为了简单起见,我们使用符号minmin

p=min{f(x):gi(x)0,i=1,,m,hi(x)=0,i=1,,p} p^* = min\{f(x):g_i(x)\le 0,i=1,\dots,m,h_i(x)=0,i=1,\dots,p\}

当问题是不可行(即可行域是空的)时或无下界(即存在这样的可行点使得f(x)f(x)\rightarrow -\infin)时,我们允许pp^*取值为++\infin-\infin。当f(x)=pf(x^*)=p^*时,我们称xx^*是一个最优点(optimal point)。 注意,即使最优值是有限的,也可以有多个最优点。

4.1 凸问题的全局最优性

在说明凸问题中的全局最优性结果之前,让我们正式定义局部最优和全局最优的概念。直观地说,如果一个函数目标值附近没有令该函数值较低的可行点,则该可行点 (译者注:即该函数目标值的原像) 被称为局部最优。 类似地,如果一个函数的全局都没有比目标值更低的可行点,则该可行点称为全局最优。 为了更形式化一点,我们给出了以下两个定义。

定义4.14.1 如果在可行域(即,满足优化问题的约束条件)内存在某些R>0R > 0的数,使得所有可行点zz,当满足xz2R\parallel x-z\parallel_2\le R时,均可以得到f(x)f(z)f(x)\le f(z),则我们称点xx是局部最优的。

定义4.24.2 如果在可行域所有可行点zz,都满足f(x)f(z)f(x)\le f(z),则我们称点xx是全局最优的。

现在我们来讨论凸优化问题的关键元素,它们的大部作用都来自于此。其核心思想是对于一个凸优化问题,所有局部最优点都是全局最优的。

让我们用反证法来快速证明这个性质。假设xx是局部最优点而不是全局最优点,即,存在这样一个可行点yy使得f(x)>f(y)f(x)>f(y)。根据局部最优性的定义,不存在xz2R\parallel x-z\parallel_2\le Rf(z)<f(x)f(z) < f(x)的可行点zz。现在假设我们选择这个点

z=θy+(1θ)xθ=R2xy2 z = \theta y +(1-\theta)x\quad有\quad\theta=\frac{R}{2\parallel x-y\parallel_2}

则:

xz2=x(R2xy2y+(1R2xy2)x)2=R2xy2(xy)2=R2R \begin{aligned} \parallel x-z\parallel_2 &= \parallel x-(\frac{R}{2\parallel x-y\parallel_2}y+(1-\frac{R}{2\parallel x-y\parallel_2})x)\parallel_2 \\ &= \parallel \frac{R}{2\parallel x-y\parallel_2}(x-y)\parallel_2 \\ &= \frac R2\le R \end{aligned}

另外,通过ff的凸性,我们可得:

f(z)=f(θy+(1θ)x)θf(y)+(1θ)f(x)<f(x) f(z)=f(\theta y +(1-\theta)x)\le\theta f(y)+(1-\theta)f(x)< f(x)

此外,由于可行域的集合是凸集,同时xxyy都是可行的,因此z=θy+(1θ)z =\theta y +(1-\theta)也会是可行的。因此,zz是一个可行点,满足xz2R\parallel x-z\parallel_2\le R以及f(z)<f(x)f(z) < f(x)。这与我们的假设相矛盾,表明xx不可能是局部最优的。

4.2 凸问题的特殊情况

由于各种原因,通常考虑一般凸规划公式的特殊情况比较方便。对于这些特殊情况,我们通常可以设计出非常高效的算法来解决非常大的问题,正因为如此,当人们使用凸优化技术时,你可能会看到这些特殊情况。

  • 线性规划。 如果目标函数ff和不等式约束gig_i都是仿射函数,那么凸优化问题就是一个线性规划(linear program,LP) 问题。换句话说,这些问题都有如下形式:

minimizecTx+dsubjecttoGxhAx=b \begin{aligned} minimize\quad &c^Tx+d \\ subject\quad to\quad &Gx\preceq h \\ &Ax=b \end{aligned}

其中,xRnx\in R^n是优化变量,cRn,dR,GRm×n,hRm,ARp×n,bRpc\in R^n,d\in R,G\in R^{m\times n},h\in R^m,A\in R^{p\times n},b\in R^p这些变量根据具体问题具体定义,符号‘\preceq’代表(多维向量中)各个元素不相等。

  • 二次规划。 如果不等式约束(跟线性规划)一样是仿射的,而目标函数ff是凸二次函数,则凸优化问题是一个二次规划(quadratic program,QP) 问题。换句话说,这些问题都有如下形式:

minimize12xTPx+cTx+dsubjecttoGxhAx=b \begin{aligned} minimize\quad &\frac 12x^TPx+c^Tx+d \\ subject\quad to\quad &Gx\preceq h \\ &Ax=b \end{aligned}

其中,xRnx\in R^n是优化变量,cRn,dR,GRm×n,hRm,ARp×n,bRpc\in R^n,d\in R,G\in R^{m\times n},h\in R^m,A\in R^{p\times n},b\in R^p这些变量根据具体问题具体定义,但是这里我们还有一个对称半正定矩阵PR+nP\in R^n_+

  • 二次约束二次规划。 如果目标函数ff和不等式约束条件gig_i都是凸二次函数,那么凸优化问题就是一个**二次约束的二次规划(quadratically constrained quadratic program,QCQP)**问题,形式如下:

minimize12xTPx+cTx+dsubjectto12xTQix+riTx+si0,i=1,,mAx=b \begin{aligned} minimize\quad &\frac 12x^TPx+c^Tx+d \\ subject\quad to\quad &\frac 12x^TQ_ix+r_i^Tx+s_i\le 0,\quad i=1,\dots,m \\ &Ax=b \end{aligned}

跟二次规划一样,其中的xRnx\in R^n是优化变量,并且有cRn,dR,ARp×n,bRp,PR+nc\in R^n,d\in R,A\in R^{p\times n},b\in R^p,P\in R^n_+,与之不同的是这里还有QiS+n,riRn,siRQ_i\in S^n_+,r_i\in R^n,s_i\in R,其中i=1,...,mi=1,...,m

  • 半定规划。 最后一个示例比前面的示例更复杂,所以如果一开始不太理解也不要担心。但是,半定规划在机器学习许多领域的研究中正变得越来越流行,所以你可能在以后的某个时候会遇到这些问题,所以提前了解半定规划的内容还是比较好的。我们说一个凸优化问题是半定规划(SDP) 的,则其形式如下所示:

minimizetr(CX)subjecttotr(AiX)=bi,i=1, ,pX0 \begin{aligned} minimize\quad &tr(CX) \\ subject\quad to\quad &tr(A_iX)=b_i,\quad i=1,\cdots,p \\ &X\succeq 0 \end{aligned}

其中对称矩阵XSnX\in S^n是优化变量,对称矩阵C,A1, ,ApSnC,A_1,\cdots,A_p\in S^n根据具体问题具体定义,限制条件X0X\succeq 0意味着XX是一个半正定矩阵。以上这些看起来和我们之前看到的问题有点不同,因为优化变量现在是一个矩阵而不是向量。如果你好奇为什么这样的公式可能有用,你应该看看更高级的课程或关于凸优化的书。

从定义可以明显看出,二次规划比线性规划更具有一般性(因为线性规划只是P=0P = 0时的二次规划的特殊情况),同样,二次约束二次规划比二次规划更具有一般性。然而,不明显的是,半定规划实际上比以前的所有类型都更一般,也就是说,任何二次约束二次规划(以及任何二次规划或线性规划)都可以表示为半定规划。在本文当中,我们不会进一步讨论这种关系,但是这个结论可能会让你对半定规划为何有用有一个小小的概念。

4.3 实例

到目前为止,我们已经讨论了凸优化背后大量枯燥的数学以及形式化的定义。接下来,我们终于可以进入有趣的部分:使用这些技术来解决实际问题。我们在课堂上已经遇到过一些这样的优化问题,而且几乎在每个领域,都有很多情况需要人们应用凸优化来解决一些问题。

  • 支持向量机(SVM)。 支持向量机分类器是凸优化方法在机器学习中最常见的应用之一。如课堂上所讨论的,寻找支持向量分类器(在松弛变量的情况下)可以表示为如下所示的优化问题:

minimize12w22+Ci=1mξisubjecttoy(i)(wTx(i)+b)1ξi,i=1,...,mξi0,i=1,...,m \begin{aligned} minimize \quad & \frac 12 \parallel w\parallel_2 ^2+C\sum^m_{i=1}\xi_i \\ subject\quad to \quad& y^{(i)}(w^Tx^{(i)}+b) \geq1-\xi_i,\quad &i=1,...,m\\ & \xi_i \geq 0, &i=1,...,m \end{aligned}

其中wRn,ξRm,bRw\in R^n,\xi\in R^m,b\in R是优化变量,CR,x(i),y(i),i=1, ,mC\in R,x^{(i)},y^{(i)},i=1,\cdots,m根据具体问题具体定义。这是一个二次规划的例子,我们下面通过将问题转换成上一节中描述的形式来展示它。特别的,当我们定义k=m+n+1k=m+n+1时,则优化变量为:

xRk=[wξb] x\in R^k=\left[ \begin{matrix} w \\ \xi \\ b \end{matrix} \right]

然后定义矩阵:

PRk×k=[I00000000],cRk=[0C10],GR2m×k=[diag(y)XIy0I0],hR2m=[10] P\in R^{k\times k}=\left[ \begin{matrix} I&0&0 \\ 0&0&0 \\ 0&0&0 \end{matrix} \right],\quad c\in R^k=\left[ \begin{matrix} 0 \\ C\cdot 1 \\ 0 \end{matrix} \right], \\ G\in R^{2m\times k}=\left[ \begin{matrix} -diag(y)X&-I&-y \\ 0&-I&0 \end{matrix} \right],\quad h\in R^{2m}=\left[ \begin{matrix} -1 \\ 0 \end{matrix} \right]

其中II是单位矩阵,11是所有元素都是11的向量,XXyy跟课程中定义的一样:

XRm×n=[x(1)Tx(2)Tx(m)T],yRm=[y(1)y(2)y(m)] X\in R^{m\times n}=\left[ \begin{matrix} x^{(1)T} \\ x^{(2)T} \\ \vdots \\ x^{(m)T} \end{matrix} \right],\quad y\in R^m=\left[ \begin{matrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m)} \end{matrix} \right]

你有理由相信在使用上述定义的矩阵时,上一节描述的二次规划与SVM优化问题是等价的。事实上,这里很容易看到支持向量机优化问题的二次优化目标项以及线性约束项,所以我们通常不需要把它化为标准形式“证明”它是一个二次规划(QP)问题,只有在遇到的现成解决方案中要求输入必须为标准形式时,我们才会这样做。

  • 约束最小二乘法。 在课堂上,我们也遇到了最小二乘问题,在这个问题中,我们想要在已知某些矩阵ARm×nA\in R^{m\times n}以及bRmb\in R^m时最小化Ax=b22\parallel Ax=b\parallel_2^2。正如我们所看到的,这个特殊的问题可以通过正规方程得到解析解。但是,假设我们还希望将解决方案中的xx限制在一些预定义的范围内。换句话说,假设我们要解最优化如下的问题:

minimize12Axb22subjecttolxμ \begin{aligned} minimize\quad&\frac 12\parallel Ax-b\parallel_2^2 \\ subject\quad to\quad &l\preceq x\preceq\mu \end{aligned}

xx是优化变量,ARm×n,bRm,lRnA\in R^{m\times n},b\in R^m,l\in R^n根据具体问题具体定义。这看起来像是一个简单的附加约束,但事实证明,这个问题将不再存在一个解析解。但是,你应该相信这个优化问题是一个二次规划问题,它的矩阵由如下式子定义:

PRn×n=12ATA,cRn=bTA,dR=12bTb,GR2n×2n=[I00I],hR2n=[lu] P\in R^{n\times n}=\frac 12A^TA,\quad c\in R^n=-b^TA,\quad d\in R=\frac 12b^Tb, \\ G\in R^{2n\times 2n}=\left[ \begin{matrix} -I&0 \\ 0&I \end{matrix} \right],\quad h\in R^{2n}=\left[ \begin{matrix} -l \\ u \end{matrix} \right]

  • 最大似然逻辑回归。 作业一要求你需要证明逻辑回归模型中数据的对数似然函数是凹的。逻辑回归的对数似然函数如下:

l(θ)=i=1n{y(i)lng(θTx(i))+(1y(i))ln(1g(θTx(i)))} l(\theta)=\sum_{i=1}^n \{y^{(i)}lng(\theta^Tx^{(i)})+(1-y^{(i)})ln(1-g(\theta^Tx^{(i)}))\}

其中g(z)g(z)表示逻辑回归函数g(z)=1/(1+ez)g(z) = 1/(1 + e^{-z}),求出最大似然估计是使对数似然最大化的任务(或者等价的最小化负对数似然函数,其是一个凸函数),即:

minimizel(θ) minimize\quad -l(\theta)

优化变量为θRn\theta\in R^n,并且没有约束。

与前两个示例不同,将这个问题转化为标准形式优化问题并不容易。尽管如此,你们在作业中已经看到这是一个凹函数,这意味着你们可以非常有效地使用一些算法,如:牛顿法来找到全局最优解。

4.4 实现:使用CVX实现线性SVM

利用CVX、Sedumi、CPLEX、MOSEK等现有软件包可以解决许多凸优化问题。因此,在许多情况下,一旦你确定了凸优化问题,就不必担心如何实现算法来解决它,而这一点这对于快速原型开发特别有用。8^8

8 然而,根据优化问题的不同,这些现成的凸优化求解器会比最佳实现慢得多;因此,有时你可能不得不使用更定制的解决方案或实现自己的解决方案。

在这些软件包中,我们以CVX[2]注:参考资料[2]见文章最下方为例。CVX是一种自由的基于matlab的求解一般凸优化问题的软件包;它可以解决多种凸优化问题,如LP、QP、QCQP、SDP等。作为一个例子,我们通过使用习题集1中的数据为二分类问题实现一个线性SVM分类器来结束本节。对于使用其他非线性内核的一般设置,也可以使用CVX求解对偶公式。

% load data
load q1x.dat
load q1y.dat
% define variables
X = q1x;
y = 2*(q1y-0.5);
C = 1;
m = size(q1x,1);
n = size(q1x,2);
% train svm using cvx
cvx_begin
variables w(n) b xi(m)
minimize 1/2*sum(w.*w) + C*sum(xi)
y.*(X*w + b) >= 1 - xi;
xi >= 0;
cvx_end
% visualize
xp = linspace(min(X(:,1)), max(X(:,1)), 100);
yp = - (w(1)*xp + b)/w(2);
yp1 = - (w(1)*xp + b - 1)/w(2); % margin boundary for support vectors for y=1
yp0 = - (w(1)*xp + b + 1)/w(2); % margin boundary for support vectors for y=0
idx0 = find(q1y==0);
idx1 = find(q1y==1);
plot(q1x(idx0, 1), q1x(idx0, 2), ’rx’); hold on

凸优化学习(四)——凸优化问题

plot(q1x(idx1, 1), q1x(idx1, 2), ’go’);
plot(xp, yp, ’-b’, xp, yp1, ’--g’, xp, yp0, ’--r’);
hold off
title(sprintf(’decision boundary for a linear SVM classifier with C=%g’, C));
参考资料
[1] Stephen Boyd and Lieven Vandenberghe. Convex Optimization. Cambridge UP, 2004. Online: http://www.stanford.edu/~boyd/cvxbook/
[2] M. Grant and S. Boyd. CVX: Matlab software for disciplined convex programming (web page and software). http://cvxr.com/, September 2008.

下一篇:凸优化学习(五)——拉格朗日对偶

相关文章: