注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中的凸优化部分的内容进行翻译学习。
4 凸优化问题
利用凸函数和集合的定义,我们现在可以考虑凸优化问题。 正式的定义为:一个凸优化问题在一个最优化问题中的形式如下:
minimizef(x)subjecttox∈C
其中f为凸函数,C为凸集,x为优化变量。然而,由于这样写可能有点不清楚,我们通常把它写成
minimizesubjecttof(x)gi(x)≤0,i=1,⋯,mhi(x)=0,i=1,⋯,p
其中f为凸函数,gi为凸函数,hi为仿射函数,x为优化变量。
注意这些不等式的方向很重要:凸函数gi必须小于零。这是因为gi的0−sublevel集是一个凸集,所以可行域,是许多凸集的交集,其也是凸集(回忆前面讲过的仿射子空间也是凸集)。如果我们要求某些凸函数gi的不等式为gi≥0,那么可行域将不再是一个凸集,我们用来求解这些问题的算法也不再保证能找到全局最优解。还要注意,只有仿射函数才允许为等式约束。直觉上来说,你可以认为一个等式约束hi=0等价于两个不等式约束hi≤0和hi≥0。然而,当且仅当hi同时为凸函数和凹函数时,这两个约束条件才都是有效的,因此hi一定是仿射函数。
优化问题的最优值表示成p∗(有时表示为f∗),并且其等于目标函数在可行域7内的最小可能值。
7 数学专业的学生可能会注意到,下面出现的最小值更应该用符号inf。这里我们不需要担心这些技术问题,为了简单起见,我们使用符号min。
p∗=min{f(x):gi(x)≤0,i=1,…,m,hi(x)=0,i=1,…,p}
当问题是不可行(即可行域是空的)时或无下界(即存在这样的可行点使得f(x)→−∞)时,我们允许p∗取值为+∞和−∞。当f(x∗)=p∗时,我们称x∗是一个最优点(optimal point)。 注意,即使最优值是有限的,也可以有多个最优点。
4.1 凸问题的全局最优性
在说明凸问题中的全局最优性结果之前,让我们正式定义局部最优和全局最优的概念。直观地说,如果一个函数目标值附近没有令该函数值较低的可行点,则该可行点 (译者注:即该函数目标值的原像) 被称为局部最优。 类似地,如果一个函数的全局都没有比目标值更低的可行点,则该可行点称为全局最优。 为了更形式化一点,我们给出了以下两个定义。
定义4.1 如果在可行域(即,满足优化问题的约束条件)内存在某些R>0的数,使得所有可行点z,当满足∥x−z∥2≤R时,均可以得到f(x)≤f(z),则我们称点x是局部最优的。
定义4.2 如果在可行域所有可行点z,都满足f(x)≤f(z),则我们称点x是全局最优的。
现在我们来讨论凸优化问题的关键元素,它们的大部作用都来自于此。其核心思想是对于一个凸优化问题,所有局部最优点都是全局最优的。
让我们用反证法来快速证明这个性质。假设x是局部最优点而不是全局最优点,即,存在这样一个可行点y使得f(x)>f(y)。根据局部最优性的定义,不存在∥x−z∥2≤R和f(z)<f(x)的可行点z。现在假设我们选择这个点
z=θy+(1−θ)x有θ=2∥x−y∥2R
则:
∥x−z∥2=∥x−(2∥x−y∥2Ry+(1−2∥x−y∥2R)x)∥2=∥2∥x−y∥2R(x−y)∥2=2R≤R
另外,通过f的凸性,我们可得:
f(z)=f(θy+(1−θ)x)≤θf(y)+(1−θ)f(x)<f(x)
此外,由于可行域的集合是凸集,同时x和y都是可行的,因此z=θy+(1−θ)也会是可行的。因此,z是一个可行点,满足∥x−z∥2≤R以及f(z)<f(x)。这与我们的假设相矛盾,表明x不可能是局部最优的。
4.2 凸问题的特殊情况
由于各种原因,通常考虑一般凸规划公式的特殊情况比较方便。对于这些特殊情况,我们通常可以设计出非常高效的算法来解决非常大的问题,正因为如此,当人们使用凸优化技术时,你可能会看到这些特殊情况。
-
线性规划。 如果目标函数f和不等式约束gi都是仿射函数,那么凸优化问题就是一个线性规划(linear program,LP) 问题。换句话说,这些问题都有如下形式:
minimizesubjecttocTx+dGx⪯hAx=b
其中,x∈Rn是优化变量,c∈Rn,d∈R,G∈Rm×n,h∈Rm,A∈Rp×n,b∈Rp这些变量根据具体问题具体定义,符号‘⪯’代表(多维向量中)各个元素不相等。
-
二次规划。 如果不等式约束(跟线性规划)一样是仿射的,而目标函数f是凸二次函数,则凸优化问题是一个二次规划(quadratic program,QP) 问题。换句话说,这些问题都有如下形式:
minimizesubjectto21xTPx+cTx+dGx⪯hAx=b
其中,x∈Rn是优化变量,c∈Rn,d∈R,G∈Rm×n,h∈Rm,A∈Rp×n,b∈Rp这些变量根据具体问题具体定义,但是这里我们还有一个对称半正定矩阵P∈R+n
-
二次约束二次规划。 如果目标函数f和不等式约束条件gi都是凸二次函数,那么凸优化问题就是一个**二次约束的二次规划(quadratically constrained quadratic program,QCQP)**问题,形式如下:
minimizesubjectto21xTPx+cTx+d21xTQix+riTx+si≤0,i=1,…,mAx=b
跟二次规划一样,其中的x∈Rn是优化变量,并且有c∈Rn,d∈R,A∈Rp×n,b∈Rp,P∈R+n,与之不同的是这里还有Qi∈S+n,ri∈Rn,si∈R,其中i=1,...,m。
-
半定规划。 最后一个示例比前面的示例更复杂,所以如果一开始不太理解也不要担心。但是,半定规划在机器学习许多领域的研究中正变得越来越流行,所以你可能在以后的某个时候会遇到这些问题,所以提前了解半定规划的内容还是比较好的。我们说一个凸优化问题是半定规划(SDP) 的,则其形式如下所示:
minimizesubjecttotr(CX)tr(AiX)=bi,i=1,⋯,pX⪰0
其中对称矩阵X∈Sn是优化变量,对称矩阵C,A1,⋯,Ap∈Sn根据具体问题具体定义,限制条件X⪰0意味着X是一个半正定矩阵。以上这些看起来和我们之前看到的问题有点不同,因为优化变量现在是一个矩阵而不是向量。如果你好奇为什么这样的公式可能有用,你应该看看更高级的课程或关于凸优化的书。
从定义可以明显看出,二次规划比线性规划更具有一般性(因为线性规划只是P=0时的二次规划的特殊情况),同样,二次约束二次规划比二次规划更具有一般性。然而,不明显的是,半定规划实际上比以前的所有类型都更一般,也就是说,任何二次约束二次规划(以及任何二次规划或线性规划)都可以表示为半定规划。在本文当中,我们不会进一步讨论这种关系,但是这个结论可能会让你对半定规划为何有用有一个小小的概念。
4.3 实例
到目前为止,我们已经讨论了凸优化背后大量枯燥的数学以及形式化的定义。接下来,我们终于可以进入有趣的部分:使用这些技术来解决实际问题。我们在课堂上已经遇到过一些这样的优化问题,而且几乎在每个领域,都有很多情况需要人们应用凸优化来解决一些问题。
-
支持向量机(SVM)。 支持向量机分类器是凸优化方法在机器学习中最常见的应用之一。如课堂上所讨论的,寻找支持向量分类器(在松弛变量的情况下)可以表示为如下所示的优化问题:
minimizesubjectto21∥w∥22+Ci=1∑mξiy(i)(wTx(i)+b)≥1−ξi,ξi≥0,i=1,...,mi=1,...,m
其中w∈Rn,ξ∈Rm,b∈R是优化变量,C∈R,x(i),y(i),i=1,⋯,m根据具体问题具体定义。这是一个二次规划的例子,我们下面通过将问题转换成上一节中描述的形式来展示它。特别的,当我们定义k=m+n+1时,则优化变量为:
x∈Rk=⎣⎡wξb⎦⎤
然后定义矩阵:
P∈Rk×k=⎣⎡I00000000⎦⎤,c∈Rk=⎣⎡0C⋅10⎦⎤,G∈R2m×k=[−diag(y)X0−I−I−y0],h∈R2m=[−10]
其中I是单位矩阵,1是所有元素都是1的向量,X和y跟课程中定义的一样:
X∈Rm×n=⎣⎢⎢⎢⎡x(1)Tx(2)T⋮x(m)T⎦⎥⎥⎥⎤,y∈Rm=⎣⎢⎢⎢⎡y(1)y(2)⋮y(m)⎦⎥⎥⎥⎤
你有理由相信在使用上述定义的矩阵时,上一节描述的二次规划与SVM优化问题是等价的。事实上,这里很容易看到支持向量机优化问题的二次优化目标项以及线性约束项,所以我们通常不需要把它化为标准形式“证明”它是一个二次规划(QP)问题,只有在遇到的现成解决方案中要求输入必须为标准形式时,我们才会这样做。
-
约束最小二乘法。 在课堂上,我们也遇到了最小二乘问题,在这个问题中,我们想要在已知某些矩阵A∈Rm×n以及b∈Rm时最小化∥Ax=b∥22。正如我们所看到的,这个特殊的问题可以通过正规方程得到解析解。但是,假设我们还希望将解决方案中的x限制在一些预定义的范围内。换句话说,假设我们要解最优化如下的问题:
minimizesubjectto21∥Ax−b∥22l⪯x⪯μ
x是优化变量,A∈Rm×n,b∈Rm,l∈Rn根据具体问题具体定义。这看起来像是一个简单的附加约束,但事实证明,这个问题将不再存在一个解析解。但是,你应该相信这个优化问题是一个二次规划问题,它的矩阵由如下式子定义:
P∈Rn×n=21ATA,c∈Rn=−bTA,d∈R=21bTb,G∈R2n×2n=[−I00I],h∈R2n=[−lu]
-
最大似然逻辑回归。 作业一要求你需要证明逻辑回归模型中数据的对数似然函数是凹的。逻辑回归的对数似然函数如下:
l(θ)=i=1∑n{y(i)lng(θTx(i))+(1−y(i))ln(1−g(θTx(i)))}
其中g(z)表示逻辑回归函数g(z)=1/(1+e−z),求出最大似然估计是使对数似然最大化的任务(或者等价的最小化负对数似然函数,其是一个凸函数),即:
minimize−l(θ)
优化变量为θ∈Rn,并且没有约束。
与前两个示例不同,将这个问题转化为标准形式优化问题并不容易。尽管如此,你们在作业中已经看到这是一个凹函数,这意味着你们可以非常有效地使用一些算法,如:牛顿法来找到全局最优解。
4.4 实现:使用CVX实现线性SVM
利用CVX、Sedumi、CPLEX、MOSEK等现有软件包可以解决许多凸优化问题。因此,在许多情况下,一旦你确定了凸优化问题,就不必担心如何实现算法来解决它,而这一点这对于快速原型开发特别有用。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.
下一篇:凸优化学习(五)——拉格朗日对偶