DennyQi's Log

03 有约束凸优化问题 Constrained Convex Optimization

在这一部分我们讨论有条件约束的凸优化问题。其中,根据凸优化问题的定义,约束必须是仿射的。

Karush–Kuhn–Tucker Conditions(KKT Conditions)

数学分析中我们得到了对于函数f(x)f(x)和一系列等式约束hi(x)=0,i[k]h_i(x)=0,i \in [k]xx取极值的必要条件为存在乘子λ1,,λk\lambda_1,\cdots,\lambda_k使得f(x)+i[k]λihi(x)=0\nabla f(x)+\sum\limits_{i \in [k]}\lambda_i\nabla h_i(x)=0。它可以简写为拉格朗日函数L(x,λ)=f(x)+i[k]λihi(x)L(x,\lambda)=f(x)+\sum\limits_{i \in [k]}\lambda_i h_i(x),要求L(x,λ)=0\nabla L(x,\lambda)=0。它的直观是,f(x)\nabla f(x)xx处的切空间垂直,每个hi(x)\nabla h_i(x)也都与切空间垂直,因此极值点处的梯度向量要落在各个约束函数在该点的梯度向量张成的空间里。(这里我们要求hi(x)h_i(x)是线性独立的。)对于凸函数,拉格朗日条件是充分必要的。

对于一般的约束,既存在等式约束hi(x)=0h_i(x)=0,还存在一系列不等式约束gi(x)0g_i(x) \leq 0。此时我们想要把不等式的约束转化为等式的约束。如果把对于极值点xx^*处所有不紧的约束gi(x)0g_i(x)\leq 0扔掉会如何?这样只会留下hi(x)=0h_i(x)=0以及一部分gj(x)=0g_j(x)=0,余下的满足gk(x)<0g_k(x^*)<0。由于连续性,在极值点周围的小邻域内依然成立gk(x)<0g_k(x^*)<0,所以在这个邻域内只留下紧的gj(x)=0g_j(x)=0和原先的hi(x)=0h_i(x)=0求约束下的极值,依然会得到xx^*。也就是说,xx^*在新的约束下依然是一个极小值点,因此扔掉不紧的约束后我们xx^*依然会出现在我们的解集中。

现在我们要把上面的过程形式化地写出来,这样就得到了不等号约束下的极小值点的必要条件,称为KKT条件。如果xx^*是极小值点,那么存在λ1,,λk\lambda_1,\cdots,\lambda_k以及μ1,,μm\mu_1,\cdots,\mu_m,满足f(x)+i[k]λihi(x)+j[m]μjgj(x)=0\nabla f(x^*)+\sum\limits_{i\in[k]}\lambda_i\nabla h_i(x^*)+\sum\limits_{j\in [m]}\mu_j\nabla g_j(x^*)=0(驻点条件),j[m],μj0\forall j \in [m],\mu_j \geq 0 ,μjgj(x)=0,\mu_jg_j(x^*)=0(互补松弛条件)。这样,如果gjg_j不紧,μj\mu_j就会自动取00,余下的就是拉格朗日条件了。注意到我们必须特别地限制μj0\mu_j\geq 0,在拉格朗日条件中并没有这一条,因为我们可以证明如果没有这一条性质我们是能够在某些情形下导出矛盾的,μj0\mu_j \geq 0的要求本身就被蕴含在了xx^*是极小值点里。同样的,在凸函数情形下KKT条件是充要条件。

在用KKT条件求解最小值时,我们一般需要分类讨论每个gjg_j是否是紧的(共2m2^m种情况),或者等价地讨论每个μj\mu_j是否为0。


在无条件的凸优化问题中,我们知道凸函数取到极值的充分必要条件是f(x)=0\nabla f(x)=0。而正是因为这个条件的闭式解通常难以求解,我们才诉诸数值计算,或是使用梯度下降、牛顿法等算法来逼近最优值。同样地,在有条件的凸优化问题中,我们有了KKT条件(对于凸函数同样是充分必要的),这个条件本质上也要解函数梯度为零的方程,因此我们同样需要诉诸其它手段。

Projected Gradient Descent(投影梯度下降)

对应于无条件凸优化中的梯度下降法, 在有条件约束时我们有“投影梯度下降法”。

如果我们暂时抛开约束不看,直接应用普通的梯度下降法来求解有约束情形的问题,那么唯一产生的问题是我们有可能在某一步迭代中跑到了可行域外面。于是对于跑到外面的情况,我们强行把它拉回可行域内,采用的方法就是找到可行域内里当前点最近(欧氏距离最小)的点——当前点在可行域上的投影。这就是投影梯度下降法。严格地,为了求解minxXf(x)\min\limits_{x \in X}f(x),我们从x0x_0出发做迭代:xk+1=projectX(xktkf(xk))x_{k+1}=\text{project}_X(x_k-t_k\nabla f(x_k))。什么时候停止呢?我们可以把迭代写成这样的形式,xkxk+1=xkprojectX(xktkf(xk))x_k-x_{k+1}=x_k-\text{project}_X(x_k-t_k\nabla f(x_k)),令右式等于tkg(xk)t_kg(x_k),从而配凑出xk+1=xktkg(xk)x_{k+1}=x_k-t_kg(x_k)这个形式——这与一般梯度下降的迭代形式相同,并且我们通过凸函数的简单性质容易证明g(x)g(x)在这里恰好扮演了一个“梯度”的角色。可以证明ff取到有条件极值当且仅当g(x)=0g(x)=0。于是我们只需当g(x)=0g(x)=0或充分小时结束算法即可。

一个有意思的事实是,这个算法的本质就是近端梯度下降算法。我们定义一个关于可行域的indicator IX(x)I_X(x),当xXx \in X时取0,否则取++\infty。这样minxXf(x)\min\limits_{x \in X}f(x)等价于minx{f(x)+IX(x)}\min\limits_{x}\{f(x)+I_X(x)\},后者是一个无条件极值问题。应用近端梯度下降,把IX(x)I_X(x)看成h(x)h(x),发现算子proxIX(y)=argmin{12xy22+IX(x)}\text{prox}_{I_X}(y)=\arg\min\limits \{\dfrac{1}{2}\|x-y\|_2^2+I_X(x)\}恰好就是投影projextX(y)\text{projext}_X(y),就可以把投影梯度下降改写为近端梯度下降:xk+1=proxtkIX(xktkf(xk))x_{k+1}=\text{prox}_{t_kI_X}(x_k-t_k\nabla f(x_k))。根据近端梯度下降的收敛分析,直接得到投影梯度下降的收敛分析:对于LL-smooth的凸函数ff,取步长t<1Lt<\dfrac{1}{L}时有f(xk)f(x)xx0222tkf(x_k)-f(x^*)\leq\dfrac{\|x^*-x_0\|_2^2}{2tk},可见函数值的差值有一个与迭代次数成反比的上界。特别地,当ffmm-strongly convex时,有xxk+122\|x^*-x_{k+1}\|_2^2 \leq (1mt)xxk22(1-mt)\|x^*-x_k\|_2^2,可见自变量距离指数递减。

当然,投影梯度下降算法使用的前提是投影是容易计算的。对于复杂的可行域,投影是难以计算的。但是在方形的、球形的(椭球形的)、仿射的等等这些特殊的可行域上,投影是容易计算的。这时候就可以使用投影梯度下降法。

Newton’s Method for Equality Constrained Problems(带等式约束的牛顿法)

对于带有等式约束的凸函数最小值问题,我们也希望应用牛顿迭代来求最小值。我们已经看到,无论是在纯牛顿法还是阻尼牛顿法中,最关键的是找到下降方向。而在无约束的情形时,二阶近似函数的极小值点方向一定是下降方向。下面我们就要证明,带约束下的二阶近似函数的极小值点方向同样是带约束的下降方向。

严格地,原问题是在Ax=bAx=b的约束下求f(x)f(x)的最小值。假设xx是可行域内的点,现在我们每一次对f(x)f(x)作近似f^(x+v)=f(x)+f(x)v+12v2f(x)v\hat{f}(x+v)=f(x)+\nabla f(x)^\top v+\dfrac{1}{2}v^\top \nabla^2 f(x)v,想求出能使得f^(x+v)\hat{f}(x+v)取到极小值点的vv,同时满足A(x+v)=bA(x+v)=b。我们发现约束等价于Av=0Av=0,因此我们沿vv方向走任何距离都依然落在可行域内。而余下的问题就是求带等式约束的二次函数最小值问题。直接应用Lagrange条件即可,得到2f(x)v+Aλ=f(x)\nabla^2 f(x)v+A^\top \lambda =-\nabla f(x)。要证明vv是下降方向,就是要证f(x)v<0\nabla f(x)^\top v<0,将Lagrange条件得到的结论代入,结合Av=0Av=0,就得到f(x)v=v2f(x)v<0\nabla f(x)^\top v=-v^\top \nabla^2 f(x)v<0(最后一步需要用到解的唯一性的分析),因此vv确实是下降方向。由此我们看到了从可行域内的一个点出发,我们可以求得一个下降方向,并且下降方向上所有点都在可行域内。那么只需在下降方向上做线搜索我们就能保证下降。什么时候停下呢?这时候我们不再能用f(x)=0\nabla f(x)=0作为终止条件了,而应该用Lagrange条件——f(x)+Aλ=0\nabla f(x)+A^\top \lambda=0——作为终止条件。代入下降方向vv,得到2f(x)v=0\nabla^2 f(x)v=0。根据解的唯一性分析,我们发现这当且仅当v=0v=0。因此此时牛顿法的终止条件应当是v\|v\|足够小。

对于带等式约束的牛顿法,我们做收敛分析可以把整个问题归约到无约束的牛顿法。对于约束Ax=bAx=bf(x)f(x)最小值,我们可以消元解除约束。我们取AA的列空间的最大线性独立基构成矩阵FF,取AA中一点x0x_0,这样整个Ax=bAx=b的解集就可以表示为{x0+Fz,z}\{x_0+Fz, \forall z\}AAFF的零空间相等),所以问题等价于f(x0+Fz)f(x_0+Fz)关于zz的最小值。令g(z)=f(x0+Fz)g(z)=f(x_0+Fz),我们发现(硬算)对gg用牛顿法,每一步得到的下降方向vgv_g都恰好等于FvfFv_f,回溯条件也完全相等。因此我们能归纳证明xk=x0+Fzkx_k=x_0+Fz_k。那么既然zkz_k会收敛,xkx_k也一定会收敛。

如果f(x)f(x)的定义域是全集,那么自然我们随便解出Ax=bAx=b的一个特解就能找到可行域内的一个点作为算法初始的点。但如果f(x)f(x)本身定义域有天然的限制(比如logx\log x),那么初始点可能是不容易找的。这样就没法直接应用上面的算法了。在分析的时候,我们也不能假设有一个可行的点x0x_0,把f(x)f(x)写作f(x0+v)f(x_0+v)。那么现在我们假设从任意一个点xx出发,我们的目标是找到在约束Ax=bAx=bf(x)f(x)的最小值点。而我们知道最小值点就是满足Lagrange条件的点,也即Lagrang函数的驻点L(x,λ)=0\nabla L(x^*,\lambda^*)=0。我们相当于要求解这个方程——这正是牛顿法要做的,对L(x+v,λ+w)\nabla L(x+v,\lambda+w)做二阶近似,求L(x,λ)+2L(x,λ)[vw]=0\nabla L(x,\lambda)+\nabla^2 L(x,\lambda)\begin{bmatrix}v\\w\end{bmatrix}=0的根,不断迭代。而恰好,我们能证明根(v,w)(v,w)恰好是函数L\|\nabla L\|的下降方向!因此我们只需对L\|\nabla L\|函数做无约束的牛顿法即可,这就是我们解决初始点不可行的牛顿法的最终方法。一个需要注意的点是, 由于这是带约束的优化问题,我们不能满足于最终的解“近似满足”约束,而必须“严格满足”约束。如果像一般的牛顿法一样求解L\|\nabla L\|的最小值,有可能最终只能得到AxAx充分接近bb。因此我们必须要求算法的终止条件是Ax=bAx=b严格成立。这会不会使得算法无法终止呢?事实上我们可以用rk=Axkbr_k=Ax_k-b来估计距离可行域的偏差程度,设步长为tkt_k,我们计算得到rk+1=(1tk)rkr_{k+1}=(1-t_k)r_k,这意味着只要选取步长小于1,偏差就将快速收敛,并且一旦有一次满足了rk=0r_k=0就一定有rk+1=0r_{k+1}=0,也就是说只要有一次落在可行域内,之后的迭代都会一直在可行域内了。

和原来的牛顿法做比较,我们相当于是带着λ\lambda一起在做迭代。从更高的观点看,我们发现如同线性规划有对偶问题一样,λ\lambda正是这一凸优化问题的对偶问题的自变量。我们之后就会更加详细地讨论凸优化的对偶问题。

Interior Point Methods(内点法)

现在我们要考虑不等式约束的情况。对于要最小化的f(x)f(x),同时要满足Ax=bAx=b的等式约束和mm个不等式约束gj(x)0g_j(x)\leq 0

我们现在想把不等式约束这个硬约束转化为“软约束”,也就是通过修改要优化的目标函数来间接地让它满足这些不等式约束——我们要构造这样的目标函数,使得为了最小化新的目标函数xx会自动地满足不等式的约束。我们把由所有的不等式约束gj(x)0g_j(x)\leq 0限制的点集记为Sˉ\bar S,其内部SS就是所有严格满足不等式约束gj(x)<0g_j(x)<0的点。那么我们可以仿照投影梯度法中的indicator定义“Barrier Function(障碍函数)”I_\bar S,使得xSˉx \in \bar SI_\bar S=0,否则I_\bar S=+\infty。构造新的目标函数F(x)=f(x)+I_\bar S,它只需要满足等式约束Ax=bAx=b,容易验证使得F(x)F(x)取极小值的xx恰好也会使f(x)f(x)取极小值。

然而对于这个新函数F(x)F(x),我们并不能直接应用投影梯度法或是牛顿法,因为F(x)F(x)失去了光滑性等性质,变成了性质很差的函数。为此,我们想用一个光滑函数来近似I_\bar S,这样就可以使用一般的等式约束的求极值方法了!一个常用的barrier function是利用对数,B(x)=j[m]log(gj(x))B(x)=-\sum\limits_{j \in [m]}\log(-g_j(x)),容易观察到这个函数在任何一个gj(x)g_j(x)逼近0的时候都将趋于++\infty。为了让它表现得更接近I_\bar S,我们再给它乘一个系数1t\dfrac{1}{t},当tt足够大时1tB(x)\dfrac{1}{t}B(x)会在gj(x)g_j(x)接近0时依然趋向无穷,而其它时候总是接近0。同时,B(x)B(x)还是凸函数,因此我们要求的依然是凸优化问题。这样,利用我们之前讨论过的方法我们就能够求解带不等式约束的凸优化问题了!这就是Barrier Method(障碍法)。由于这个算法始终要求xx落在SS内,所以称为一种“内点法”。(还有一些细节要注意。和原来有所不同的是,由于B(x)B(x)中含有对数,其定义域不是全空间,我们在线搜索时需要保证迭代后的xx落在定义域内。)

注意上面的问题中如果tt取的只是某个固定的有限值,那么算法得到的结果并不严格等于我们想要的结果,因为B(x)B(x)并不严格等于I_\bar S。事实上,固定某个tt以后求出的最优解xx^*是个关于tt的函数x(t)x^*(t),称为central point(中心点)。x(t)x^*(t)划过的轨迹称为central path(中心路径)。只有当tt\to \infty时,中心点才趋向原问题的最优解xx^*。然而我们可以用Lagrange条件分析得到f(x(t))f(x)mtf(x^*(t))-f(x^*)\leq\dfrac{m}{t},这就对偏差做出了保证。在实践中,我们通常不会上来就选一个非常大的tt,因为这相对于较小的tt会使得求解更加困难。我们通常会采用一种称为path-following method(路径跟踪法)的方法,第一次选取一个较小的t1t_1执行算法,然后以x(t1)x^*(t_1)为起点,令t2=ρt1t_2=\rho t_1再次执行(一般选取ρ\rho[10,20][10,20]范围内),直到偏差足够小。由于每次得到的结果都落在中心路径上(“跟踪”)逼近最终的xx^*,并且tt会指数增长,我们期待这个算法会以非常高的效率求出最优解。

最后一个问题是,初始点必须满足Ax=bAx=b以及gj(x)0g_j(x)\leq 0,那么如何选取初始点?一个方法是,把这本身转化为一个不等式约束的凸优化问题:把xx向量拓展一维变为(x,s)(\vec{x},s),要求Ax=bAx=bgj(x)sg_j(x)\leq s,此时最小化ss,只要s0s\leq 0,我们就找到了一个xx^*作为初始点——而这个新问题的初始点是容易找的,因为只需求出Ax=bAx=b的一个特解x0x_0,令s=maxjgj(x0)s=\max\limits_j g_j(x_0)即可。但是如果gj(x)g_j(x)本身的定义域不是全空间,那么问题又变得麻烦了。上述问题还有另一个方法,我们把原问题转化为在Ax=b,gj(x)s,s=0Ax=b,g_j(x)\leq s,s=0的约束下求f(x)f(x)的最小值,这可以用初始点不可行的牛顿法!也就是说我们把问题转化为在Ax=bAx=bs=0s=0的约束下求f(x)+1tB(x)f(x)+\dfrac{1}{t}B(x)的最小值。对于gjg_j有定义域限制的情形,取z=(z0,,zm)z=(z_0,\cdots,z_m)分别添加到f(x)f(x)和每个gj(x)g_j(x)上,附加上限制z=0z=0,如果已知这个问题的一个初始点,不可行初始值的牛顿法就会自动找到相依的偏移量ziz_i使得x+zix+z_i落在gjg_j的定义域内。