拉格朗日乘子法和KKT

拉格朗日乘子法和KKT条件

首先明确一点,拉格朗日乘子法和KKT条件是两种求条件极值的方法,具体来说KKT是拉格朗日乘子法的一种推广。条件极值,顾名思义,即函数在一定条件约束下可取到的极值。谈到约束条件无非两种,等式约束和不等式约束,拉格朗日乘子法用于解决等式约束条件下函数极值的问题,KKT条件用于解决含有不等式条件约束下函数的极值问题。下面先介绍拉格朗日乘子法是肿么来滴。

拉格朗日乘子法

假设我们有二元函数 f ( x , y ) f(x, y) f(x,y)和约束条件 g ( x , y ) = c g(x, y) = c g(x,y)=c, 现在我们要求函数 f ( x , y ) f(x, y) f(x,y) g ( x , y ) g(x, y) g(x,y)约束条件下的最小值,换句话说我们要在 g ( x , y ) g(x, y) g(x,y)上找一点 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0),使得 f ( x , y ) f(x, y) f(x,y)取得最小值,将这句话公式化即为:(s.t. 为subject to,受限于) m i n ( f ( x , y ) ) min(f(x, y)) min(f(x,y)) s . t . g ( x , y ) = c s.t. \quad g(x, y) = c s.t.g(x,y)=c 我们将 f ( x , y ) f(x, y) f(x,y) g ( x , y ) g(x, y) g(x,y)在图像上表示,即为,
拉格朗日乘子法和KKT_第1张图片
图中虚线为函数 f ( x , y ) f(x, y) f(x,y)值的等高线,假设我们的待求函数为 z = f ( x , y ) z = f(x, y) z=f(x,y),那么等高线即为 z z z ( x , y ) (x, y) (x,y)平面内的投影。因为我们求的是 f ( x , y ) f(x, y) f(x,y)的最小值所以,假定箭头方向为负梯度方向即为函数值下降最快的方向,即 d 3 > d 2 > d 1 d_{3} > d_{2} > d_{1} d3>d2>d1
很明显, g ( x , y ) g(x, y) g(x,y)上能使 f ( x , y ) f(x, y) f(x,y)取得最小值的点 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0)一定为 f ( x , y ) f(x, y) f(x,y)等高线和 g ( x , y ) = c g(x, y)=c g(x,y)=c的切点。同是在点 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0)处我们可以知道, f ( x , y ) f(x, y) f(x,y) g ( x , y ) g(x, y) g(x,y)的梯度共线。下面计算 f ( x , y ) f(x, y) f(x,y) g ( x , y ) g(x, y) g(x,y)在点 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0)处的梯度: ∇ f ( x 0 , y 0 ) = f x ′ ( x 0 , y 0 ) + f y ′ ( x 0 , y 0 ) \nabla f(x_{0}, y_{0}) = f_{x}^{'}(x_{0}, y_{0}) + f_{y}^{'}(x_{0}, y_{0}) f(x0,y0)=fx(x0,y0)+fy(x0,y0) ∇ g ( x 0 , y 0 ) = g x ′ ( x 0 , y 0 ) + g y ′ ( x 0 , y 0 ) \nabla g(x_{0}, y_{0}) = g_{x}^{'}(x_{0}, y_{0}) + g_{y}^{'}(x_{0}, y_{0}) g(x0,y0)=gx(x0,y0)+gy(x0,y0) 上面说到f和g的梯度共线,所以由两个向量共线,分量等比的性质,我们可以得到: f x ′ ( x 0 , y 0 ) g x ′ ( x 0 , y 0 ) = f y ′ ( x 0 , y 0 ) g y ′ ( x 0 , y 0 ) = − λ \frac{f_{x}^{'}(x_{0}, y_{0})}{ g_{x}^{'}(x_{0}, y_{0}) } = \frac{f_{y}^{'}(x_{0}, y_{0})}{ g_{y}^{'}(x_{0}, y_{0}) } = -\lambda gx(x0,y0)fx(x0,y0)=gy(x0,y0)fy(x0,y0)=λ此外,由于点 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0) g ( x , y ) = c g(x, y)=c g(x,y)=c上,所以有: g ( x 0 , y 0 ) = c g(x_{0}, y_{0})=c g(x0,y0)=c所以我们得到这样三个等式 f x ′ ( x 0 , y 0 ) + λ g x ′ ( x 0 , y 0 ) = 0 f_{x}^{'}(x_{0}, y_{0}) + \lambda g_{x}^{'}(x_{0}, y_{0}) = 0 fx(x0,y0)+λgx(x0,y0)=0 f y ′ ( x 0 , y 0 ) + λ g y ′ ( x 0 , y 0 ) = 0 f_{y}^{'}(x_{0}, y_{0}) + \lambda g_{y}^{'}(x_{0}, y_{0}) = 0 fy(x0,y0)+λgy(x0,y0)=0 g ( x 0 , y 0 ) = c g(x_{0}, y_{0})=c g(x0,y0)=c很明显,我们可以构造这样的一个函数 L ( x , y , λ ) = f ( x , y ) + λ ( g ( x , y ) − c ) L(x, y, \lambda) = f(x, y) + \lambda (g(x, y)-c) L(x,y,λ)=f(x,y)+λ(g(x,y)c),其在点 ( x 0 , y 0 , λ 0 ) (x_{0}, y_{0}, \lambda_{0}) (x0,y0,λ0)处对 x , y , λ x, y, \lambda x,y,λ的偏导数,即在 ( x 0 , y 0 , λ 0 ) (x_{0}, y_{0}, \lambda_{0}) (x0,y0,λ0)处的梯度,刚好为上面的三个等式。我们知道,函数在一点处取极值的必要条件是在该点处梯度为0,所以在约束条件 g ( x , y ) g(x, y) g(x,y)下对函数 f ( x , y ) f(x, y) f(x,y)求最小值这个原问题就转变为对拉格朗日函数求极值,问题就很简单了,只需要分别对 x , y , λ x, y, \lambda x,y,λ求偏导取0,解出 x , y , λ x, y, \lambda x,y,λ的候选值,然后从中选取极值即可。

我们构造的这个函数就是传说中的拉格朗日函数 λ \lambda λ就被称为拉格朗日乘子。这种使用拉格朗日函数和拉格朗日乘子求解具有等式约束条件的函数极值的方法就被称为拉格朗日乘子法

KKT条件

上面说到,约束条件存在两种情况,等式约束和不等式约束,拉格朗日乘子法解决了具有等式约束的条件极值问题。对于具有不等式约束的条件极值,我们就要使用KKT条件来求解,KKT条件其实是拉格朗日乘子法的一个扩展。类似的,我们假设问题情景为: m i n ( f ( x , y ) ) min(f(x, y)) min(f(x,y)) s . t . g i ( x , y ) ≤ 0 ( i = 1 , 2 , . . . , m ) s.t. \quad g_{i}(x, y) \leq 0 \quad (i = 1, 2, ..., m) s.t.gi(x,y)0(i=1,2,...,m) 其中 i i i表示第 i i i个不等式约束条件。即我们的目标是,求在 i i i个不等式和 j j j个等式约束条件下,函数 f ( x , y ) f(x, y) f(x,y)取极值的点 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0)
更具体的,结合下面的图,我们的目标就是在阴影部分内的找到一点 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0)使得 f ( x , y ) f(x, y) f(x,y)取最小值。

拉格朗日乘子法和KKT_第2张图片
说了半天,怎么求这个 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0)点呢(即图中的 x ∗ x^* x)。由上图可以看出来,最优解的相对于 g i ( x , y ) g_{i}(x, y) gi(x,y)的位置情况无非两种:

  1. 最优解 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0)在阴影部分内部,即 g i ( x , y ) < 0 g_{i}(x, y) < 0 gi(x,y)<0
  2. 最优解 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0) g i ( x , y ) = 0 g_{i}(x, y) = 0 gi(x,y)=0这条曲线上

对于第二种情况,即为拉格朗日乘子法的原问题,使用拉格朗日乘子法求解即可,即需要对任意 i i i ∇ L ( x 0 , y 0 , λ 0 ) = ∇ f ( x 0 , y 0 ) + ∑ i = 1 m λ i ∇ g i ( x 0 , y 0 ) = 0 \nabla L(x_{0}, y_{0}, \lambda_{0}) = \nabla f(x_{0}, y_{0}) + \sum_{i=1}^{m}\lambda_{i} \nabla g_{i}(x_{0}, y_{0})=0 L(x0,y0,λ0)=f(x0,y0)+i=1mλigi(x0,y0)=0 g i ( x 0 , y 0 ) = 0 g_{i}(x_{0}, y_{0}) = 0 gi(x0,y0)=0 另外,由于阴影部分表示的是 g i ( x , y ) < 0 g_{i}(x, y)<0 gi(x,y)<0,那我可以明确的是在点 ( x 0 , y 0 ) (x_{0}, y_{0}) (x0,y0)处, f ( x , y ) f(x, y) f(x,y) g i ( x , y ) g_{i}(x, y) gi(x,y)的梯度方向相反,结合上面拉格朗日乘数法的推导过程,我们可以知道必有 λ i > 0 \lambda_{i}>0 λi>0对于第一种情况,极值点位于 g i ( x , y ) g_{i}(x, y) gi(x,y)内部,即最小的那圈等值线位于 g i ( x , y ) g_{i}(x, y) gi(x,y)的内部,所以此时压根就没 g i ( x , y ) g_{i}(x, y) gi(x,y)什么事,我们只需要求得 f ( x , y ) f(x, y) f(x,y)的极值即可得到在约束条件下的极值: ∇ f ( x 0 , y 0 ) = 0 \nabla f(x_{0}, y_{0})=0 f(x0,y0)=0 g i ( x 0 , y 0 ) < 0 g_{i}(x_{0}, y_{0}) < 0 gi(x0,y0)<0
那么如果我们将两种情况统一,将原问题统一使用拉格朗日函数的梯度进行求解,即有: L ( x , y , λ ) = f ( x , y ) + ∑ i = 1 m λ i g i ( x , y ) L(x, y, \lambda) = f(x, y) + \sum_{i=1}^{m}\lambda_{i} g_{i}(x, y) L(x,y,λ)=f(x,y)+i=1mλigi(x,y) 此时,对于第二种情况势必有 λ i = 0 \lambda_{i}=0 λi=0使得 λ i g i ( x 0 , y 0 ) = 0 \lambda_{i}g_{i}(x_{0}, y_{0}) = 0 λigi(x0,y0)=0,换句话说,如果我们限制了 g i ( x 0 , y 0 ) < 0 g_{i}(x_{0}, y_{0}) < 0 gi(x0,y0)<0,那么必须有 λ i = 0 \lambda_{i}=0 λi=0成立。类似的,对于第一种情况,如果我们严格要求 g i ( x 0 , y 0 ) = 0 g_{i}(x_{0}, y_{0})=0 gi(x0,y0)=0,那么 λ i \lambda_{i} λi取多少,其实无所谓。总结起来,即为,不管是情况1还是情况2,总有: λ i g i ( x 0 , y 0 ) = 0 \lambda_{i}g_i(x_{0}, y_{0})=0 λigi(x0,y0)=0显然,对于两种情况,我们总是严格要求一个,放水一个,我们把这种情况称为”互补松弛“,上面的条件,我们称为松弛条件。
同时整合 λ i \lambda_{i} λi可以得到, λ i ≥ 0 \lambda_{i} \geq 0 λi0

现在我们整合对于情况1,2的所有讨论,可以得到: { ∇ f ( x , y , λ ) = 0 g i ( x , y ) ≤ 0 ∀ i = 1... m λ i ≥ 0 ∀ i = 1... m λ i g i ( x , y ) = 0 ∀ i = 1... m \left\{ \begin{array}{c} \nabla f(x, y, \lambda) =0\\ g_{i}(x, y) \leq 0 \quad \forall i=1...m\\ \lambda_{i} \geq 0 \quad \forall i=1...m\\ \lambda_{i} g_{i}(x, y) = 0 \quad \forall i=1...m \end{array} \right. f(x,y,λ)=0gi(x,y)0i=1...mλi0i=1...mλigi(x,y)=0i=1...m上面的这组条件就是传说中的KKT条件

你可能感兴趣的:(拉格朗日乘子法,KKT)