拉格朗日乘子法是为了解决有约束的优化(最大最小化)问题。
网上很多博客论坛将KKT条件与不等式优化的乘子法混淆了,并且有很多对于这个概念混沌的地方。我就写一篇梳理一遍思路。
已知一个问题的目标与参数的关系是,那么我们很容易知道当
时,最优的目标
.但是如果我们给这个优化过程添加一条约束:
,也就是
必须满足这一约束的情况下,求解原函数的最小值。则这个问题就得换种思路解决。我们在此时我们便引入了拉格朗日乘子法(Lagrange Multiplier Method),有的地方也叫拉格朗日乘数法。
先来看一个最简单的例子
单个等式约束条件下的拉格朗日乘子法,这种情况下最简单,我们一定要注意计算过程,不眼高手低,我举一个完整的例子该大家看:


我们设拉格朗日乘子为,则有如下拉格朗日函数:

接下来对三个变量分别求偏微分:


令偏微分都为0,则有:

解出:

代入中解得最终
几种可能的值分别为
,则此为最大最小值的集合,可知
,上图已经完全解释了我这一串计算过程。
再看看不等式约束与KKT条件
情况会稍微复杂一点。对于不等式约束,只要满足一定的条件,依然可以使用拉格朗日乘子法解决,这里的条件便是KKT条件(Karush–Kuhn–Tucker conditions)。KKT条件是以人名命名的,所以不必关注其命名的背后含义。我看很多论坛博客上写的等式约束使用拉格朗日乘子法,不等式约束使用KKT条件法,这是不严谨的。KKT条件只是一个条件而已,并不是一种方法。等式和不等式约束优化问题所采用的方法都是拉格朗日乘子法。
我们看这样一个不等式约束的问题:

其对应的拉格朗日函数如下所示:

这时可行解必须落在约束区域以内,下图给了目标函数的等高线以及约束:
这里红色的区域代表的是不等式的区域,蓝色代表的原函数的等高线,这里我们可以将其想象成一个碗状的三维图形。值得一提的是,我们这里暂时只针对凸函数问题,所以我们可以看到这个蓝色圆心便是最优解。
那么现在我们只会有两种情况了:一种是原函数的最优解就已经在约束范围内;另一种是原函数的最优解在约束范围边界上或者之外。我们来看下面两图:
我们看第一个图就代表了第一种情况,蓝色圆心在红色圆内。这样约束条件没有起到约束作用,约束之后的最优解还是原来的最优解。对于第二个图,我们看到蓝色圆心在红色区域之外。当然这也包括了刚好在红色边界上的情况。为什么这两种情况归为一类呢?我们接着看:我们必须要满足约束条件,也就是我们必须要在红色范围内找到一个最优解。即使这个最优解并不是原函数最优的。由于原函数是一个凸函数,所以是平滑单个极值。那么理论上说,我们在极值往外任意方向上,都是离极值越近,那个值就越优。所以我们便可知,这个最优值会在约束的边界上。也就是的时候。这时候就又变成了等式约束了。
以上两种情况就是说,要么可行解落在约束边界上即得,要么可行解落在约束区域内部,此时约束不起作用,令
消去约束即可,所以无论哪种情况都会得到:

而在这种情况下,我们的不等式约束是和等式约束同解的。这种情况,就是我们所说的KKT条件下。所以我们总结出此问题的KKT条件:

总结:KKT是我们将不等式约束直接化成等式约束的必要条件,也是这个不等式约束的必要条件。在凸函数优化问题中,升级为充要条件。一般的,KKT条件很容易满足,我们论证一下就可以使用乘子法解决问题。在拉格朗日对偶中,KKT条件也是十分重要的条件,判断原问题与对偶问题是否有一致解。这个在《拉格朗日对偶》里面细说。
上式需要满足的要求是拉格朗日乘子,这个问题可以举一个形象的例子,假设你去爬山,目标是山顶,但有一个障碍挡住了通向山顶的路,所以只能沿着障碍爬到尽可能靠近山顶的位置,然后望着山顶叹叹气,这里山顶便是目标函数的可行解,障碍便是约束函数的边界,此时的梯度方向一定是指向山顶的,与障碍的梯度同向,下图描述了这种情况 :
当然更一般的问题:



我们有更为完整的KKT条件:
满足 KKT 条件后极小化 Lagrangian 即可得到在不等式约束条件下的可行解。 KKT 条件看起来很多,其实很好理解:
- 拉格朗日取得可行解的必要条件;
- 这就是以上分析的一个比较有意思的约束,称作松弛互补条件;
- 初始的约束条件;
- 初始的约束条件;
- 不等式约束的 Lagrange Multiplier需满足的条件。
主要的KKT条件便是 (3) 和 (5) ,只要满足这俩个条件便可直接用拉格朗日乘子法, SVM 中的支持向量便是来自于此,需要注意的是 KKT 条件与对偶问题也有很大的联系
拉格朗日乘子法是怎么想出来的
拉格朗日乘子法的思路是:给予违反约束适当的惩罚,使得无约束的拉格朗日函数的解与原优化函数的解一致。拉格朗日乘子法的策略是将有约束的问题转化成无约束的优化问题。
考虑多个约束条件的原始最优化问题:



我们对这种多维约束条件,有如下拉格朗日函数:

假设给定某个,如果
违反原始问题的约束条件,即存在某个
使得
或者存在某个
使得
,那么就有
![\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版