拉格朗日乘子法和KKT条件

这里简单说一下拉格朗日乘子法的原理和insight.

等式约束

拉格朗日乘子法主要是用于解决有约束的优化问题. 比如最基本的等式约束
max ⁡ f ( x , y ) s . t . , g ( x , y ) = 0 \max f(x,y) \\ s.t., g(x,y)=0 maxf(x,y)s.t.,g(x,y)=0
我们想求 f ( x , y ) f(x,y) f(x,y)的最大值,本身这个三维函数是定义在实平面上的, 他有自己的极值和最值. 但是加上了约束之后,我们就不能在整个实平面上找极值最值了, 我们得在 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0这条线上找 f ( x , y ) f(x,y) f(x,y)的最值.

一个observation是,如果我们令 f ( x , y ) = d f(x,y)=d f(x,y)=d, 我们就能在平面上为不同的 d d d值画出很多等高线, 这时我们再把 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0也画上去可以得到下图(基本任何教程都会出现一张经典的图)
拉格朗日乘子法和KKT条件_第1张图片

如果我们要从 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0这条线上找极值, 比如说我们找到在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处找到了极值 f ( x 0 , y 0 ) = d 1 f(x_0,y_0)=d_1 f(x0,y0)=d1. 这时可以看到, g ( x , y ) = 0 g(x,y)=0 g(x,y)=0这条线是与 f ( x , y ) = d 1 f(x,y)=d_1 f(x,y)=d1这个等高线相切的, 这就意味着 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0这条线在 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处的切线方向与 f ( x , y ) = d 1 f(x,y)=d_1 f(x,y)=d1这个等高线在 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处的切线方向共线(可能同向也可能反向), 即有:
d f ( x , y ) d x ∣ ( x 0 , y 0 ) = λ d g ( x , y ) d x ∣ ( x 0 , y 0 ) d f ( x , y ) d y ∣ ( x 0 , y 0 ) = λ d g ( x , y ) d y ∣ ( x 0 , y 0 ) \left.\frac{df(x,y)}{dx}\right|_{(x_0,y_0)}=\lambda\left.\frac{dg(x,y)}{dx}\right|_{(x_0,y_0)} \\ \left.\frac{df(x,y)}{dy}\right|_{(x_0,y_0)}=\lambda\left.\frac{dg(x,y)}{dy}\right|_{(x_0,y_0)} dxdf(x,y)(x0,y0)=λdxdg(x,y)(x0,y0)dydf(x,y)(x0,y0)=λdydg(x,y)(x0,y0)

按照这个性质,我们不妨构造拉格朗日函数 L ( x , y , λ ) = f ( x , y ) − λ g ( x , y ) \mathcal{L}(x,y,\lambda)= f(x,y)-\lambda g(x,y) L(x,y,λ)=f(x,y)λg(x,y), 其中 λ \lambda λ被称为拉格朗日乘子. 此时, L ( x , y , λ ) \mathcal{L}(x,y,\lambda) L(x,y,λ)的极值等于 f ( x , y ) f(x,y) f(x,y) g ( x , y ) = 0 g(x,y)=0 g(x,y)=0限制下的极值, 原问题可转化为以下无约束优化问题
max ⁡ L ( x , y , λ ) = f ( x , y ) − λ g ( x , y ) , λ ∈ R \max\mathcal{L}(x,y,\lambda)= f(x,y)-\lambda g(x,y), \lambda\in R maxL(x,y,λ)=f(x,y)λg(x,y),λR

一个简单的验证方法是求解这个无约束问题, 为了找极值, 我们会令
d L ( x , y , λ ) d x = d f ( x , y ) d x − λ d g ( x , y ) d x = 0 d L ( x , y , λ ) d y = d f ( x , y ) d y − λ d g ( x , y ) d y = 0 d L ( x , y , λ ) d λ = g ( x , y ) = 0 \frac{d\mathcal{L}(x,y,\lambda)}{dx}=\frac{df(x,y)}{dx}-\lambda\frac{dg(x,y)}{dx}=0 \\ \frac{d\mathcal{L}(x,y,\lambda)}{dy}=\frac{df(x,y)}{dy}-\lambda\frac{dg(x,y)}{dy}=0 \\ \frac{d\mathcal{L}(x,y,\lambda)}{d\lambda}=g(x,y)=0 dxdL(x,y,λ)=dxdf(x,y)λdxdg(x,y)=0dydL(x,y,λ)=dydf(x,y)λdydg(x,y)=0dλdL(x,y,λ)=g(x,y)=0

可以看到,其实求解这个新问题的过程就是在求解旧问题. 这三个方程中前两个其实就是 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处切线共线, 最后一个就是原问题的约束.

Remark: 拉格朗日乘子法解出的是极值,并不是最值; 而且我们只知道他是极值,不知道是极大值还是极小值. 因此, 我们还需要带入一些具体的函数值才能确定哪个是最大值还是最小值.

不等式约束

不等式约束的一般情况如下. 遇到不同形式的问题, 我们可以通过加负号把问题转换为以下形式
max ⁡ f ( x , y ) s . t . , g ( x , y ) ≥ 0 \max f(x,y) \\ s.t., g(x,y)\geq 0 maxf(x,y)s.t.,g(x,y)0

不等式约束和等式约束有啥区别尼?区别在于现在 f ( x , y ) f(x,y) f(x,y)的最值可能取在 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0上, 也有可能取在 g ( x , y ) > 0 g(x,y)>0 g(x,y)>0内. 我们先来看在 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0上的情况.

如果最值取在 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0上, 我们直接可以把 g ( x , y ) ≥ 0 g(x,y)\geq 0 g(x,y)0变为 g ( x , y ) = 0 g(x,y)= 0 g(x,y)=0, 这样问题就变成了等式约束问题:
max ⁡ L ( x , y , λ ) = f ( x , y ) − λ g ( x , y ) \max \mathcal{L}(x,y,\lambda)=f(x,y)-\lambda g(x,y) maxL(x,y,λ)=f(x,y)λg(x,y)

拉格朗日乘子法和KKT条件_第2张图片

与之前不同的是, 此时我们对 λ \lambda λ的取值有些限制. 如上图所示, 假设我们在 f ( x 0 , y 0 ) f(x_0,y_0) f(x0,y0)取到最大值; 且 g ( x , y ) = 0 g(x,y)=0 g(x,y)=0内部是 g ( x , y ) > 0 g(x,y)>0 g(x,y)>0, 外部是 g ( x , y ) < 0 g(x,y)<0 g(x,y)<0, 因此 g ( x , y ) g(x,y) g(x,y)在极值点的梯度方向是朝内的(梯度方向是函数值增加最快的方向). 反观 f ( x , y ) f(x,y) f(x,y), 由于 f ( x 0 , y 0 ) f(x_0,y_0) f(x0,y0)是最大值点, 因此对于所有 g ( x , y ) > 0 g(x,y)>0 g(x,y)>0的区域 (曲线内), f f f的取值都不可能比 f ( x 0 , y 0 ) f(x_0,y_0) f(x0,y0)大, 因此, 比 f ( x 0 , y 0 ) f(x_0,y_0) f(x0,y0)大的值只可能在曲线外,因此梯度方向朝外.
综上,在最大值点,原函数的梯度方向和约束函数的梯度方向一定是相反的! 因此
max ⁡ L ( x , y , λ ) = f ( x , y ) − λ g ( x , y ) , λ ≤ 0 \max \mathcal{L}(x,y,\lambda)=f(x,y)-\lambda g(x,y), \lambda\leq0 maxL(x,y,λ)=f(x,y)λg(x,y),λ0

max ⁡ L ( x , y , λ ) = f ( x , y ) + λ g ( x , y ) , λ ≥ 0 \max \mathcal{L}(x,y,\lambda)=f(x,y)+\lambda g(x,y), \lambda\geq0 maxL(x,y,λ)=f(x,y)+λg(x,y),λ0

好,现在我们反过来看最大值取在 g ( x , y ) > 0 g(x,y)>0 g(x,y)>0内的情况, 此时, 其实 g ( x , y ) g(x,y) g(x,y) f ( x , y ) f(x,y) f(x,y)已经没有限制作用了,因为最大值的临域都是可以取到的.

为了融合两个情况,我们引入松弛互补条件(completeness and slackness condition) λ g ( x , y ) = 0 \lambda g(x,y)=0 λg(x,y)=0. 最终, 原问题转换为
max ⁡ L ( x , y , λ ) = f ( x , y ) + λ g ( x , y ) s . t . , g ( x , y ) ≥ 0 , λ ≥ 0 , λ g ( x , y ) = 0 \max \mathcal{L}(x,y,\lambda)=f(x,y)+\lambda g(x,y) \\ s.t., g(x,y)\geq 0, \lambda\geq0, \lambda g(x,y)=0 maxL(x,y,λ)=f(x,y)+λg(x,y)s.t.,g(x,y)0,λ0,λg(x,y)=0
求解这个问题,我们需要
d L ( x , y , λ ) d x = d f ( x , y ) d x + λ d g ( x , y ) d x = 0 d L ( x , y , λ ) d y = d f ( x , y ) d y + λ d g ( x , y ) d y = 0 λ g ( x , y ) = 0 \frac{d\mathcal{L}(x,y,\lambda)}{dx}=\frac{df(x,y)}{dx}+\lambda\frac{dg(x,y)}{dx}=0 \\ \frac{d\mathcal{L}(x,y,\lambda)}{dy}=\frac{df(x,y)}{dy}+\lambda\frac{dg(x,y)}{dy}=0 \\ \lambda g(x,y)=0 dxdL(x,y,λ)=dxdf(x,y)+λdxdg(x,y)=0dydL(x,y,λ)=dydf(x,y)+λdydg(x,y)=0λg(x,y)=0

你可能感兴趣的:(Math)