拉格朗日乘子法是为了解决有约束的优化(最大最小化)问题。html
网上不少博客论坛将KKT条件与不等式优化的乘子法混淆了,而且有不少对于这个概念混沌的地方。我就写一篇梳理一遍思路。git
已知一个问题的目标与参数的关系是,那么咱们很容易知道当
时,最优的目标
.可是若是咱们给这个优化过程添加一条约束:
,也就是
必须知足这一约束的状况下,求解原函数的最小值。则这个问题就得换种思路解决。咱们在此时咱们便引入了拉格朗日乘子法(Lagrange Multiplier Method),有的地方也叫拉格朗日乘数法。github
单个等式约束条件下的拉格朗日乘子法,这种状况下最简单,咱们必定要注意计算过程,不眼高手低,我举一个完整的例子该你们看:机器学习
咱们设拉格朗日乘子为,则有以下拉格朗日函数:函数
接下来对三个变量分别求偏微分:post
令偏微分都为0,则有:学习
解出:优化
代入中解得最终
几种可能的值分别为
,则此为最大最小值的集合,可知
,上图已经彻底解释了我这一串计算过程。cdn
状况会稍微复杂一点。对于不等式约束,只要知足必定的条件,依然可使用拉格朗日乘子法解决,这里的条件即是KKT条件(Karush–Kuhn–Tucker conditions)。KKT条件是以人名命名的,因此没必要关注其命名的背后含义。我看不少论坛博客上写的等式约束使用拉格朗日乘子法,不等式约束使用KKT条件法,这是不严谨的。KKT条件只是一个条件而已,并非一种方法。等式和不等式约束优化问题所采用的方法都是拉格朗日乘子法。htm
咱们看这样一个不等式约束的问题:
其对应的拉格朗日函数以下所示:
这时可行解必须落在约束区域之内,下图给了目标函数的等高线以及约束:
这里红色的区域表明的是不等式的区域,蓝色表明的原函数的等高线,这里咱们能够将其想象成一个碗状的三维图形。值得一提的是,咱们这里暂时只针对凸函数问题,因此咱们能够看到这个蓝色圆心即是最优解。
那么如今咱们只会有两种状况了:一种是原函数的最优解就已经在约束范围内;另外一种是原函数的最优解在约束范围边界上或者以外。咱们来看下面两图:
咱们看第一个图就表明了第一种状况,蓝色圆心在红色圆内。这样约束条件没有起到约束做用,约束以后的最优解仍是原来的最优解。对于第二个图,咱们看到蓝色圆心在红色区域以外。固然这也包括了恰好在红色边界上的状况。为何这两种状况归为一类呢?咱们接着看:咱们必需要知足约束条件,也就是咱们必需要在红色范围内找到一个最优解。即便这个最优解并非原函数最优的。因为原函数是一个凸函数,因此是平滑单个极值。那么理论上说,咱们在极值往外任意方向上,都是离极值越近,那个值就越优。因此咱们即可知,这个最优值会在约束的边界上。也就是的时候。这时候就又变成了等式约束了。
以上两种状况就是说,要么可行解落在约束边界上即得,要么可行解落在约束区域内部,此时约束不起做用,令
消去约束便可,因此不管哪一种状况都会获得:
而在这种状况下,咱们的不等式约束是和等式约束同解的。这种状况,就是咱们所说的KKT条件下。因此咱们总结出此问题的KKT条件:
总结:KKT是咱们将不等式约束直接化成等式约束的必要条件,也是这个不等式约束的必要条件。在凸函数优化问题中,升级为充要条件。通常的,KKT条件很容易知足,咱们论证一下就可使用乘子法解决问题。在拉格朗日对偶中,KKT条件也是十分重要的条件,判断原问题与对偶问题是否有一致解。这个在《拉格朗日对偶》里面细说。
上式须要知足的要求是拉格朗日乘子,这个问题能够举一个形象的例子,假设你去登山,目标是山顶,但有一个障碍挡住了通向山顶的路,因此只能沿着障碍爬到尽量靠近山顶的位置,而后望着山顶叹叹气,这里山顶即是目标函数的可行解,障碍即是约束函数的边界,此时的梯度方向必定是指向山顶的,与障碍的梯度同向,下图描述了这种状况 :
固然更通常的问题:
咱们有更为完整的KKT条件:
知足 KKT 条件后极小化 Lagrangian 便可获得在不等式约束条件下的可行解。 KKT 条件看起来不少,其实很好理解:
- 拉格朗日取得可行解的必要条件;
- 这就是以上分析的一个比较有意思的约束,称做松弛互补条件;
- 初始的约束条件;
- 初始的约束条件;
- 不等式约束的 Lagrange Multiplier需知足的条件。
主要的KKT条件即是 (3) 和 (5) ,只要知足这俩个条件即可直接用拉格朗日乘子法, SVM 中的支持向量即是来自于此,须要注意的是 KKT 条件与对偶问题也有很大的联系
拉格朗日乘子法的思路是:给予违反约束适当的惩罚,使得无约束的拉格朗日函数的解与原优化函数的解一致。拉格朗日乘子法的策略是将有约束的问题转化成无约束的优化问题。
考虑多个约束条件的原始最优化问题:
咱们对这种多维约束条件,有以下拉格朗日函数:
假设给定某个,若是
违反原始问题的约束条件,即存在某个
使得
或者存在某个
使得
,那么就有
由于若某个使约束
,则可令
,若某个
使得约束
,则令
使得
,而将其他的
均取为0。这样使得不知足约束条件的都取成
,而相反的,知足约束条件的咱们让
置0,使得拉格朗日函数与原函数解相同。
以上陈述详细的说明了拉格朗日乘子法的思想。
固然,除了拉格朗日乘子法,还有其余思路去求解这个约束的最优化问题的。能够,咱们能够不像拉格朗日同样给以违反以惩罚,从侧面解出,而是顺着约束条件去找这个最优值。可是咱们的现实问题很是复杂,有时候连有没有最有值或者最优值可不可行都没法得知,这类方法也就不适用了。
因此:
[1].《统计学习方法》 李航 2012年3月第1版
[4].拉格朗日乘子法和KKT条件
[5].《机器学习》 周志华 2016年1月第1版