图解拉格朗日乘子法和KKT条件
文章目录
文档的图片基本上都来自下面两个链接的内容:
如何理解拉格朗日乘子法?https://www.matongxue.com/madocs/939.html
如何理解拉格朗日乘子法和KKT条件?https://www.matongxue.com/madocs/987/
因为人家画的图实在太好了,我都懒得自己造轮子了。
引入例子
求曲线到坐标原点的最短距离。
假如有方程:
x 2 y = 3 (1) x^2 y = 3 \tag{1} x2y=3(1)
它的曲线如下图:
现在我们想求曲线上的点到坐标原点的最短距离:
比较容易想到的一个方法是,画个半径为 a a a的圆,然后逐渐扩大圆的半径:
直到第一次与曲线 x 2 y = 3 x^2 y = 3 x2y=3相交,那么这个相交的点(下图紫点)就是曲线 x 2 y = 3 x^2 y = 3 x2y=3上距离原点最近的点:
把问题用数学表示就是:
min f ( x , y ) = x 2 + y 2 s . t . h ( x , y ) = x 2 y − 3 = 0 (2) \begin{aligned} &\min f(x,y) = x^2 + y^2 \\ s.&t. \space h(x,y) = x^2 y - 3 =0 \end{aligned} \tag{2} s.minf(x,y)=x2+y2t. h(x,y)=x2y−3=0(2)
s.t.是subject to的缩写,表示“服从于、约束于”。
在相交点处,圆和曲线是相切的,即在该点处圆和曲线的切线(下面的绿线)相同:
至此,我们得出结论:在极值点处,圆与曲线相切。
接下来,需要引入等高线的概念,等高线就是函数值相等的输入点连成的曲线。
上面的同心圆(颜色深浅表示函数值的大小,颜色越深函数值越大),就是函数 f ( x , y ) = x 2 + y 2 f(x,y) = x^2+y^2 f(x,y)=x2+y2的等高线:
根据梯度的性质(梯度是函数在某一点处变化最大的方向),梯度向量:
∇ f = [ ∂ f ∂ x ∂ f ∂ y ] = [ 2 x 2 y ] (3) \nabla f = \left[ \begin{aligned} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{aligned} \right] =\left[ \begin{aligned} 2x \\ 2y \end{aligned} \right] \tag{3} ∇f=⎣⎢⎢⎡∂x∂f∂y∂f⎦⎥⎥⎤=[2x2y](3)
是等高线的法线,它与等高线的切线方向垂直:
函数 h ( x , y ) = x 2 y − 3 h(x,y) = x^2 y-3 h(x,y)=x2y−3的等高线为:
它的梯度向量是:
∇ h = [ ∂ h ∂ x ∂ h ∂ y ] = [ 2 x y x 2 ] (4) \nabla h = \left[ \begin{aligned} \frac{\partial h}{\partial x} \\ \frac{\partial h}{\partial y} \end{aligned} \right] =\left[ \begin{aligned} 2xy \\ x^2 \end{aligned} \right] \tag{4} ∇h=⎣⎢⎢⎡∂x∂h∂y∂h⎦⎥⎥⎤=[2xyx2](4)
也垂直于等高线 x 2 y = 3 x^2 y = 3 x2y=3的切线:
由上可知:梯度与等高线的切线垂直。
结合两个分析结论:
{ 在 极 值 点 处 圆 与 曲 线 相 切 梯 度 与 等 高 线 的 切 线 垂 直 \left\{ \begin{aligned} 在极值点处圆与曲线相切 \\ 梯度与等高线的切线垂直 \end{aligned} \right. {
在极值点处圆与曲线相切梯度与等高线的切线垂直
可知,在相切点处,圆的梯度向量和曲线的梯度向量平行:
用数学符号表示为:
∇ f = μ ∇ h (5) \nabla f = \mu \nabla h \tag{5} ∇f=μ∇h(5)
其中, μ \mu μ是非零常数。
从图反应出来,圆的梯度向量 ∇ f \nabla f ∇f和曲线的梯度向量 ∇ h \nabla h ∇h应该是同向的,那么 μ \mu μ不应该是正数吗?
这是因为 h = 0 h=0 h=0和 − h = 0 -h=0 −h=0是等效的,所以 ∇ h \nabla h ∇h的方向可正可负,这样的话只要保证 ∇ f \nabla f ∇f和 ∇ h \nabla h ∇h是平行就可以了,也就是 μ \mu μ为非零常数。
求极值点,还必须引入 x 2 y = 3 x^2 y = 3 x2y=3这个条件,否则这么多等高线,不知道具体指的是哪一根:
因此,联立方程:
{ ∇ f = μ ∇ h x 2 y = 3 ⇒ { ∂ f ∂ x = μ ∂ h ∂ x ∂ f ∂ y = μ ∂ h ∂ y x 2 y = 3 ⇒ { 2 x = μ ⋅ 2 x y 2 y = μ ⋅ x 2 x 2 y = 3 (6) \begin{aligned} \left\{ \begin{aligned} & \nabla f = \mu \nabla h \\ & x^2 y = 3 \end{aligned} \right. \Rightarrow \left\{ \begin{aligned} & \frac{\partial f}{\partial x} = \mu \frac{\partial h}{\partial x} \\ & \frac{\partial f}{\partial y} = \mu \frac{\partial h}{\partial y} \\ & x^2 y = 3 \end{aligned} \right. \\ \end{aligned} \Rightarrow \left\{ \begin{aligned} 2x &= \mu \cdot 2xy \\ 2y &= \mu \cdot x^2 \\ x^2 y &= 3 \end{aligned} \right. \tag{6} { ∇f=μ∇hx2y=3⇒⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧∂x∂f=μ∂x∂h∂y∂f=μ∂y∂hx2y=3⇒⎩⎪⎨⎪⎧2x2yx2y=μ⋅2xy=μ⋅x2=3(6)
上面的方程组有一种更常见的形式:
令
F ( x , y , μ ) = f ( x , y ) + μ h ( x , y ) (7) F(x,y,\mu) = f(x,y) + \mu h(x,y) \tag{7} F(x,y,μ)=f(x,y)+μh(x,y)(7)
对函数 F F F求极值,也就是求偏导并等于0:
∇ F = [ ∂ F ∂ x ∂ F ∂ y ∂ F ∂ μ ] = [ ∂ f ∂ x + μ ∂ h ∂ x ∂ f ∂ y + μ ∂ h ∂ y h ( x , y ) ] = [ 2 x + μ ⋅ 2 x y 2 y + μ ⋅ x 2 x 2 y − 3 ] = 0 ⇒ { 2 x = − μ ⋅ 2 x y 2 y = − μ ⋅ x 2 x 2 y = 3 (8) \nabla F = \left[ \begin{array}{c} \frac{\partial F}{\partial x} \\ \frac{\partial F}{\partial y} \\ \frac{\partial F}{\partial \mu} \end{array} \right] =\left[ \begin{array}{c} \frac{\partial f}{\partial x} + \mu \frac{\partial h}{\partial x} \\ \frac{\partial f}{\partial y} + \mu \frac{\partial h}{\partial y} \\ h(x,y) \end{array} \right] =\left[ \begin{array}{c} 2x + \mu \cdot 2xy \\ 2y + \mu \cdot x^2 \\ x^2 y - 3 \end{array} \right] = \mathbf{0} \\ \Rightarrow \left\{ \begin{aligned} 2x &= -\mu \cdot 2xy \\ 2y &= -\mu \cdot x^2 \\ x^2 y &= 3 \end{aligned} \right. \tag{8} ∇F=⎣⎡∂x∂F∂y∂F∂μ∂F⎦⎤=⎣⎡∂x∂f+μ∂x∂h∂y∂f+μ∂y∂hh(x,y)⎦⎤=⎣⎡2x+μ⋅2xy2y+μ⋅x2x2y−3⎦⎤=0⇒⎩⎪⎨⎪⎧2x2yx2y=−μ⋅2xy=−μ⋅x2=3(8)
虽然上式系数是 − μ -\mu −μ,但由于 μ \mu μ的正负对结果没有影响,所以 ∇ F = 0 \nabla F = \mathbf{0} ∇F=0和式(6)是等效的。
求解上面方程组可以得到极小值点 ( x ∗ , y ∗ ) (x^*,y^*) (x∗,y∗):
{ x ∗ ≈ ± 1.61 y ∗ ≈ 1.1 μ ∗ ≈ 0.87 (9) \left\{ \begin{aligned} x^* &\approx \pm 1.61 \\ y^* &\approx 1.1 \\ \mu^* &\approx 0.87 \end{aligned} \right. \tag{9} ⎩⎪⎨⎪⎧x∗y∗μ∗≈±1.61≈1.1≈0.87(9)
这个例子的求解过程体现了拉格朗日乘子法的思想:将有约束的优化问题转化为求解无约束的函数 F F F的极值。这个函数 F F F称为拉格朗日乘子式。
如果 ( x ∗ , y ∗ ) (x^*, y^*) (x∗,y∗)是优化问题极值点,那么它必须满足:
存在 μ ∗ \mu^* μ∗,使得
{ ∇ f ( x ∗ , y ∗ ) + μ ∗ ∇ h ( x ∗ , y ∗ ) = 0