拉格朗日乘子法是为了解决有约束的优化(最大最小化)问题。
网上很多博客论坛将KKT条件与不等式优化的乘子法混淆了,并且有很多对于这个概念混沌的地方。我就写一篇梳理一遍思路。
已知一个问题的目标与参数的关系是,那么我们很容易知道当
时,最优的目标
.但是如果我们给这个优化过程添加一条约束:
,也就是
必须满足这一约束的情况下,求解原函数的最小值。则这个问题就得换种思路解决。我们在此时我们便引入了拉格朗日乘子法(Lagrange Multiplier Method),有的地方也叫拉格朗日乘数法。
先来看一个最简单的例子
单个等式约束条件下的拉格朗日乘子法,这种情况下最简单,我们一定要注意计算过程,不眼高手低,我举一个完整的例子该大家看:
![\max_{x,y} \; f(x,y)=x^2y \quad](https://i-blog.csdnimg.cn/blog_migrate/f2de3516b40fe7022fc6e1ed57a44f8a.png)
![s.t. \quad g(x,y): \ x^2+y^2-3 = 0](https://i-blog.csdnimg.cn/blog_migrate/93a5cca39c50b04d62396a3ddc7b2fd7.png)
我们设拉格朗日乘子为,则有如下拉格朗日函数:
![L(x,y,\lambda)=x^2y-\lambda(x^2+y^2-3)](https://i-blog.csdnimg.cn/blog_migrate/889def87e911fb5de6099c43b0454af6.png)
接下来对三个变量分别求偏微分:
![\nabla_{x,y,\lambda}L(x,y,\lambda)=\left( \frac{\partial L}{\partial x},\frac{\partial L}{\partial y},\frac{\partial L}{\partial \lambda} \right)](https://i-blog.csdnimg.cn/blog_migrate/5a2c6ea847f07d170a5ce843016f08e0.png)
![=(2xy+2 \lambda x,x^2+2 \lambda y,x^2+y^2-3)](https://i-blog.csdnimg.cn/blog_migrate/c75986000258e34bc6581b7052981dfd.png)
令偏微分都为0,则有:
![\nabla_{x,y,\lambda}L(x,y,\lambda)=0 \; \iff \begin{cases} 2xy+2\lambda x =0, \quad (i) \\ x^2+2 \lambda y=0, \quad (ii) \\ x^2+y^2-3=0, \quad (iii) \end{cases}](https://i-blog.csdnimg.cn/blog_migrate/c0375a95ab320bd9e3ee247714d2e432.png)
解出:
![(\pm \sqrt 2,1,-1);(\pm \sqrt 2,-1;1);(0, \pm \sqrt 3,0)](https://i-blog.csdnimg.cn/blog_migrate/0248394cd0d0feb11fcf9d274dffb3a9.png)
代入中解得最终
几种可能的值分别为
,则此为最大最小值的集合,可知
,上图已经完全解释了我这一串计算过程。
再看看不等式约束与KKT条件
情况会稍微复杂一点。对于不等式约束,只要满足一定的条件,依然可以使用拉格朗日乘子法解决,这里的条件便是KKT条件(Karush–Kuhn–Tucker conditions)。KKT条件是以人名命名的,所以不必关注其命名的背后含义。我看很多论坛博客上写的等式约束使用拉格朗日乘子法,不等式约束使用KKT条件法,这是不严谨的。KKT条件只是一个条件而已,并不是一种方法。等式和不等式约束优化问题所采用的方法都是拉格朗日乘子法。
我们看这样一个不等式约束的问题:
![\min_x \;f(x) \qquad s.t. \; g(x)\leq0](https://i-blog.csdnimg.cn/blog_migrate/1c13cf2af811883dd4c891d4e2aa6144.png)
其对应的拉格朗日函数如下所示:
![L(x,\lambda)=f(x)+ \lambda g(x)](https://i-blog.csdnimg.cn/blog_migrate/8c35034ad96799c36ab48c5f0b8e5e40.png%28x%2C%5Clambda%29%3Df%28x%29%2B%20%5Clambda%20g%28x%29%0A)
这时可行解必须落在约束区域以内,下图给了目标函数的等高线以及约束:
这里红色的区域代表的是不等式的区域,蓝色代表的原函数的等高线,这里我们可以将其想象成一个碗状的三维图形。值得一提的是,我们这里暂时只针对凸函数问题,所以我们可以看到这个蓝色圆心便是最优解。
那么现在我们只会有两种情况了:一种是原函数的最优解就已经在约束范围内;另一种是原函数的最优解在约束范围边界上或者之外。我们来看下面两图:
我们看第一个图就代表了第一种情况,蓝色圆心在红色圆内。这样约束条件没有起到约束作用,约束之后的最优解还是原来的最优解。对于第二个图,我们看到蓝色圆心在红色区域之外。当然这也包括了刚好在红色边界上的情况。为什么这两种情况归为一类呢?我们接着看:我们必须要满足约束条件,也就是我们必须要在红色范围内找到一个最优解。即使这个最优解并不是原函数最优的。由于原函数是一个凸函数,所以是平滑单个极值。那么理论上说,我们在极值往外任意方向上,都是离极值越近,那个值就越优。所以我们便可知,这个最优值会在约束的边界上。也就是的时候。这时候就又变成了等式约束了。
以上两种情况就是说,要么可行解落在约束边界上即得,要么可行解落在约束区域内部,此时约束不起作用,令
消去约束即可,所以无论哪种情况都会得到:
![λg(x)=0](https://i-blog.csdnimg.cn/blog_migrate/716142f4be1a2cb3baa8cdcfa82c3006.png)
而在这种情况下,我们的不等式约束是和等式约束同解的。这种情况,就是我们所说的KKT条件下。所以我们总结出此问题的KKT条件:
![\begin{cases} \nabla_x L(x,\lambda) =0, \quad (I) \\ λg(x)=0, \quad (II) \\ g(x) \leq 0, \quad (III) \\ \lambda \geq0, \quad (IV) \\ \end{cases}](https://i-blog.csdnimg.cn/blog_migrate/bfcdbeb2f2ca1acf8f0910c58e79c727.png)
总结:KKT是我们将不等式约束直接化成等式约束的必要条件,也是这个不等式约束的必要条件。在凸函数优化问题中,升级为充要条件。一般的,KKT条件很容易满足,我们论证一下就可以使用乘子法解决问题。在拉格朗日对偶中,KKT条件也是十分重要的条件,判断原问题与对偶问题是否有一致解。这个在《拉格朗日对偶》里面细说。
上式需要满足的要求是拉格朗日乘子,这个问题可以举一个形象的例子,假设你去爬山,目标是山顶,但有一个障碍挡住了通向山顶的路,所以只能沿着障碍爬到尽可能靠近山顶的位置,然后望着山顶叹叹气,这里山顶便是目标函数的可行解,障碍便是约束函数的边界,此时的梯度方向一定是指向山顶的,与障碍的梯度同向,下图描述了这种情况 :
当然更一般的问题:
![\min_{x\in R^n}\ f(x)](https://i-blog.csdnimg.cn/blog_migrate/d84c3b50b28cc8f30180a3297ba0cc17.png)
![s.t. \quad c_{i}(x)\leq0 \ ,\quad i=1,2,...,k](https://i-blog.csdnimg.cn/blog_migrate/bf45c2a60df200d2c2b2e724d4e56a58.png)
![\quad \qquad h_{j}(x)=0 \ ,\quad j=1,2,...,l](https://i-blog.csdnimg.cn/blog_migrate/a828f6bb38b323a4d44a3a2648deeb62.png)
我们有更为完整的KKT条件:
满足 KKT 条件后极小化 Lagrangian 即可得到在不等式约束条件下的可行解。 KKT 条件看起来很多,其实很好理解:
- 拉格朗日取得可行解的必要条件;
- 这就是以上分析的一个比较有意思的约束,称作松弛互补条件;
- 初始的约束条件;
- 初始的约束条件;
- 不等式约束的 Lagrange Multiplier需满足的条件。
主要的KKT条件便是 (3) 和 (5) ,只要满足这俩个条件便可直接用拉格朗日乘子法, SVM 中的支持向量便是来自于此,需要注意的是 KKT 条件与对偶问题也有很大的联系
拉格朗日乘子法是怎么想出来的
拉格朗日乘子法的思路是:给予违反约束适当的惩罚,使得无约束的拉格朗日函数的解与原优化函数的解一致。拉格朗日乘子法的策略是将有约束的问题转化成无约束的优化问题。
考虑多个约束条件的原始最优化问题:
![\min_{x\in R^n}\ f(x)](https://i-blog.csdnimg.cn/blog_migrate/d84c3b50b28cc8f30180a3297ba0cc17.png)
![s.t. \quad c_{i}(x)\leq0 \ ,\quad i=1,2,...,k](https://i-blog.csdnimg.cn/blog_migrate/bf45c2a60df200d2c2b2e724d4e56a58.png)
![\quad \qquad h_{j}(x)=0 \ ,\quad j=1,2,...,l](https://i-blog.csdnimg.cn/blog_migrate/a828f6bb38b323a4d44a3a2648deeb62.png)
我们对这种多维约束条件,有如下拉格朗日函数:
![L(x,\alpha,\beta)=f(x)+ \sum_{i=1}^k \alpha_{i} c_{i}(x)+\sum_{j=1}^l\beta_{j}h_{j}(x)](https://i-blog.csdnimg.cn/blog_migrate/8c35034ad96799c36ab48c5f0b8e5e40.png%28x%2C%5Calpha%2C%5Cbeta%29%3Df%28x%29%2B%20%5Csum_%7Bi%3D1%7D%5Ek%20%5Calpha_%7Bi%7D%20c_%7Bi%7D%28x%29%2B%5Csum_%7Bj%3D1%7D%5El%5Cbeta_%7Bj%7Dh_%7Bj%7D%28x%29%0A)
假设给定某个,如果
违反原始问题的约束条件,即存在某个
使得
或者存在某个
使得
,那么就有
![\max_{\alpha,\beta:\alpha_{i} \geq0} \left[ f(x)+\sum_{i=1}^k \alpha_{i}c_{i}(x)+ \sum_{j=1}^l\beta_{j}h_{j}(x) \right]=\infty](https://i-blog.csdnimg.cn/blog_migrate/352dcb4c1a8bdb9ac30b900d13261579.png)
因为若某个使约束
,则可令
,若某个
使得约束
,则令
使得
,而将其余的
均取为0。这样使得不满足约束条件的都取成
,而相反的,满足约束条件的我们让
置0,使得拉格朗日函数与原函数解相同。
以上陈述详细的说明了拉格朗日乘子法的思想。
当然,除了拉格朗日乘子法,还有其他思路去求解这个约束的最优化问题的。可以,我们可以不像拉格朗日一样给以违反以惩罚,从侧面解出,而是顺着约束条件去找这个最优值。但是我们的现实问题非常复杂,有时候连有没有最有值或者最优值可不可行都无法得知,这类方法也就不适用了。
所以:
存在即有理。有啥理? 答曰:解决这一类问题的已知最有效方法。
手推对偶中的KKT条件已经移至《拉格朗日对偶》,有兴趣的朋友可以过去看看。
参考文献:
[1].《统计学习方法》 李航 2012年3月第1版
[4].拉格朗日乘子法和KKT条件
[5].《机器学习》 周志华 2016年1月第1版