有条件凸优化问题

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

Karush–Kuhn–Tucker Conditions(KKT Conditions)

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

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

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

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


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

Projected Gradient Descent(投影梯度下降)

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

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

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

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

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

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

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

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

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

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

Interior Point Methods(内点法)

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

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

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

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

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

posted @ 2023-12-23 16:33  DennyQi  阅读(29)  评论(0编辑  收藏  举报