从拉格朗日乘数法到KKT条件
最近看论文遇到了Karush–Kuhn–Tucker (KKT)条件,想搞清楚这是个什么东东,因此就把这个东西认真学习一下并且分享出来,希望对大家有用。学习KKT就不得不先学习一下拉格朗日乘数法,于是不得不重新翻出被记忆尘封的高数~~
1.拉格朗日乘数法
在数学最优问题中,拉格朗日乘数法是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。这种方法将一个有n 个变量与k 个约束条件的最优化问题转换为一个有n + k个变量的方程组的极值问题,其变量不受任何约束。这种方法引入了一种新的标量未知数,即拉格朗日乘数:约束方程的梯度(gradient)的线性组合里每个向量的系数。
以二元函数为例:
设给定二元函数
maxz=f(x,y)s.t.φ(x,y)=0max z=f(x,y)\\s.t. φ(x,y)=0maxz=f(x,y)s.t.φ(x,y)=0
为寻找z=f(x,y)在附加条件下的极值点,先做拉格朗日函数
F(x,y,λ)=f(x,y)+λφ(x,y)F(x,y,\lambda)=f(x,y)+\lambda φ(x,y)F(x,y,λ)=f(x,y)+λφ(x,y)
其中λ\lambdaλ为参数。令F(x,y,λ)F(x,y,λ)F(x,y,λ)对xxx和yyy和λλλ的一阶偏导数等于零,即
Fx′=ƒx′(x,y)+λφx′(x,y)=0F'_x=ƒ'_x(x,y)+λφ'_x(x,y)=0 Fx′=ƒx′(x,y)+λφx′(x,y)=0
Fy′=ƒy′(x,y)+λφy′(x,y)=0F'_y=ƒ'_y(x,y)+λφ'_y(x,y)=0Fy′=ƒy′(x,y)+λφy′(x,y)=0
Fλ′=φ(x,y)=0F'_λ=φ(x,y)=0Fλ′=φ(x,y)=0
由上述方程组解出x,yx,yx,y及λλλ,如此求得的(x,y)(x,y)(x,y),就是函数z=ƒ(x,y)z=ƒ(x,y)z=ƒ(x,y)在附加条件φ(x,y)=0φ(x,y)=0φ(x,y)=0下的可能极值点。
若这样的点只有一个,由实际问题可直接确定此即所求的点。
下面这篇博客可以很好的帮助理解:
支持向量机(SVM)课前准备(一)–拉格朗日乘子法 - be·freedom - 博客园 (cnblogs.com)
2.KKT条件
先给出一个KKT条件的实例,我们优化的目标是:
minimizef(x)s.t.ki=0gj≤0,i,j=1,2,3,...minimize f(x)\\ s.t. k_i = 0\\ g_j\leq0,i,j=1,2,3,... minimizef(x)s.t.ki=0gj≤0,i,j=1,2,3,...
其中,KKT条件如下:
∇f+∑λiki+ωjgj=0.......(1)ki=0......(2)gj=0......(3)uj≥0......(4)ujgj=0......(5)\nabla f+\sum\lambda_ik_i+\omega_jg_j=0.......(1)\\ k_i=0......(2)\\ g_j=0......(3)\\ u_j\geq0......(4)\\ u_jg_j=0......(5)\\ ∇f+∑λiki+ωjgj=0.......(1)ki=0......(2)gj=0......(3)uj≥0......(4)ujgj=0......(5)
公式1、2、3容易理解。
公式4、5,通过一个简单例子说明:
minimizef(x)s.t.g1(x)=a−x≤0g2(x)=x−b≤0minimize f(x)\\s.t. g_1(x)=a-x\leq0\\g_2(x)=x-b\leq0minimizef(x)s.t.g1(x)=a−x≤0g2(x)=x−b≤0
gig_igi添加一个 ≥0 的松弛变量a12,b12a_1^2,b_1^2a12,b12。得到
g1(x)=a−x+a12g2(x)=x−b+b12g_1(x)=a-x+a_1^2\\g_2(x)=x-b+b_1^2g1(x)=a−x+a12g2(x)=x−b+b12
由此,我们将不等式转化为等式约束,应用拉格朗日乘子法。
拉格朗日方程如下:
L(x1,a1,b1,u1,u2)=f(x)+u1(a−x+a12)+u2(x−b+b12)...(1)L(x_1,a_1,b_1,u_1,u_2)=f(x)+u_1(a-x+a_1^2)+u_2(x-b+b_1^2)...(1)L(x1,a1,b1,u1,u2)=f(x)+u1(a−x+a12)+u2(x−b+b12)...(1)
对方程求偏导如下:
{∂F∂x=∂f∂x+u1dg1dx+u2dg2dx=∂f∂x−u1+u2=0...(2)∂F∂u1=a−x+a12=g1+a12=0...(3)∂F∂u2=x−b+a12=g2+b12=0...(4)∂F∂a1=2u1a1=0...(5)∂F∂b1=2u2b1=0...(6),u1≥0,u2≥0\begin{cases}\frac {\partial F}{\partial x} =\frac{\partial f}{\partial x}+u_1\frac{{d}g_1}{{d}x}+u_2\frac {{d}g_2}{{d}x}=\frac{\partial f}{\partial x}-u_1+u_2=0...(2)\\\frac {\partial F}{\partial u_1}=a-x+a_1^2=g_1+a_1^2=0...(3)\\\frac {\partial F}{\partial u_2}=x-b+a_1^2=g_2+b_1^2=0...(4)\\\frac {\partial F}{\partial a_1}=2u_1a_1=0...(5)\\\frac {\partial F}{\partial b_1}=2u_2b_1=0...(6),u_1\geq0,u_2\geq0\end{cases}⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧∂x∂F=∂x∂f+u1dxdg1+u2dxdg2=∂x∂f−u1+u2=0...(2)∂u1∂F=a−x+a12=g1+a12=0...(3)∂u2∂F=x−b+a12=g2+b12=0...(4)∂a1∂F=2u1a1=0...(5)∂b1∂F=2u2b1=0...(6),u1≥0,u2≥0
那么现在开始解方程组
首先考虑 式5,
当u1=0,a1≠0u1=0,a1≠0u1=0,a1=0时,即g1g_1g1 对f(x)f(x)f(x)无约束
当u1≠0,a1=0u1≠0,a1=0u1=0,a1=0时,即 g1g_1g1对f(x)f(x)f(x)有约束,且根据式3可知,g1g_1g1 也等于0。
式6同理。注意,不等式对f(x)有约束效果时,不等式等于零。
此时,方程组简化成
{∂f∂x+u1dg1dx+u2dg2dx=0u1g1(x)=0,u2g2(x)=0,μ1≥0,μ1≥0.\begin{cases}\frac{\partial f}{\partial x}+u_1\frac{{d}g_1}{{d}x}+u_2\frac {{d}g_2}{{d}x}=0\\u_1g_1(x)=0,u_2g_2(x)=0,\\\mu_1\geq0,\mu_1\geq0.\end{cases}⎩⎪⎨⎪⎧∂x∂f+u1dxdg1+u2dxdg2=0u1g1(x)=0,u2g2(x)=0,μ1≥0,μ1≥0.
推广,对于多个不等式约束,有
minf(x)s.t.gj(x)≤0(j=1,2,...,m)min f(x)\\s.t. g_j(x)\leq0(j=1,2,...,m)minf(x)s.t.gj(x)≤0(j=1,2,...,m)
我们有
{∂f(x∗)∂x+∑j=1mujdgj(x∗)dx∗=0ujgj(x∗)=0(j=1,2,...,m),μj≥0(j=1,2,...m).\begin{cases}\frac{\partial f(x^*)}{\partial x}+\sum_{j=1}^{m}u_j\frac{{d}g_j(x^*)}{{d}x^*}=0\\u_jg_j(x^*)=0(j=1,2,...,m),\\\mu_j\geq0(j=1,2,...m).\end{cases}⎩⎪⎨⎪⎧∂x∂f(x∗)+∑j=1mujdx∗dgj(x∗)=0ujgj(x∗)=0(j=1,2,...,m),μj≥0(j=1,2,...m).
上述不等式称之为KKT条件,与本文一开始略有不同的是没有了等式的约束(不用在此纠结,我们关心的是不等式的约束问题),其中uju_juj称之为KKT乘子