拉格朗日乘子法与KKT条件
拉格朗日乘子法
在实际中我们常常遇到这样一种优化问题(min和max都是一样的,因为min f(x)等价于max -f(x)):
minf(x)s.tg(x)=0
这是一个等式约束问题,按照拉格朗日乘子法,可以转换为无条件约束的形式:
f(x)+λg(x)=0
接下来分别对x和λ求导即可:
{▽f(x)+λ▽g(x)=0g(x)=0
求解这个方程组即可。但是为什么可以这样做呢?
以这样一个问题为例:假设上面的x是一个二维的变量,即:
minf(x1,x2)s.tg(x1,x2)=0
如图所示,f(x1,x2) 是一个曲面,g(x1,x2)=0确定了一个曲线(若x是一个n维向量,则g(x1,x2)=0 确定了一个n-1维的曲面,因为n维向量和一个等式可得其中一个变量可由另外n-1个线性表示),我们的目的是在这条曲线上找一点能够使目标函数f(x1,x2) 取得最小值。为了便于观察,将这条曲线沿Z轴正向投影到曲面上,即我们沿着曲线从点A到点B找一点使曲面达到最低点。
现在还要补充一个预备知识,什么是等高线。假如我们有一个刀片,这个刀片平行于上图中的xOy面,我们不断的沿着Z轴移动这个刀片,它会与我们的曲面相交产生一系列的交线,我们把这些交线投影到xOy面上,于是得到下图(当然我们不可能画出所有的交线,只是部分):
我们可以知道:
- 每一条圈上的函数值是相同的(用图一来说就是有相同的Z值);
- 根据图一可以知道,圈越往里函数值越小;
圈与曲线相交的点对应着可取的点,该点所在的圈对应着可取的函数值
下面说一下梯度,梯度表征了函数值变化最快的方向和速度,看上图在M点的梯度,沿着该梯度方向函数值减小最快,沿着它的逆方向函数值增大最快;曲面上任意一点,其等高线的切线方向与其梯度方向相互垂直;沿等高线的切线方向运动,函数值不变。此外我们有以下两个结论:对于约束曲面(线)上的任意点x,该点的梯度▽g(x) 正交于约束曲面(线)
- 在最优点x∗ ,目标函数在该点的梯度▽f(x∗)正交于约束曲面(线)
第一点很明显,因为对于一个曲面(线),它的法线的方向就是梯度的方向;关键是第二点,如上图假如最优点是A点,且目标函数在A点的梯度▽f(A) 与约束曲面不正交,我们看到存在一点B,其函数值f(B)比f(A)要小,这与我们的前提矛盾,也就是说若梯度▽f(x∗) 与约束平面不正交,则仍可在约束曲面上移动该点使函数值进一步下降(其实也可以根据两者的梯度来判断,往下看就明白这一点了)。
于是我们得到最优点的位置如上图所示,在最优点x∗,梯度▽f(x) 与梯度▽g(x) 的方向必相同或相反,即存在λ≠0,使得:
▽f(x∗)+λ▽g(x∗)=0
而且x∗ 必定也是满足g(x)=0 的,这正好对应了我们前面所说的拉格朗日的解决等式约束问题的方法,由此得证。
KKT条件
现在我们可以解决等式约束的问题了,但是对于不等式约束如何处理呢?考虑下面的情况:
minf(x)s.th(x)=0g(x)≤0
考虑g(x)≤0,此时最优解x∗ 或者在g(x)<0 的区域中,或者在边界g(x)=0 上,如下图所示:
对上图左侧,此时最优解x∗ 在g(x)<0 的区域中;对上图右侧,最优解x∗ 在边界g(x)=0 上。对于左图的情况,即g(x)<0 的情况,约束g(x)≤0 并没有起作用,比如你把左图的灰色区域去掉,是不是可以直接利用我们学过的方法得到最优解x∗ ;对于右图的情况,很明显就是一个等式约束问题了,我们前面已经说过了,注意此时梯度▽f(x) 与梯度▽g(x) 的方向相反。由此原问题依然可以使用拉格朗日来解决,相应的拉格朗日函数为:
L(x,λ,μ)=f(x)+λh(x)+μg(x)
相应的KKT条件为:
⎧⎩⎨⎪⎪g(x)≤0μ≥0μg(x)=0
当g(x)<0时,μ=0,原式中就不考虑g(x);当g(x)=0时,λ 可取任何大于等于0的值。然后对于这样一个优化问题,我们可以使用拉格朗日对偶性将原问题转换为对偶问题,通过求对偶问题的解而得到原始问题的解。