图解拉格朗日乘子法和KKT条件
图解拉格朗日乘子法和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
h
(
x
∗
,
y
∗
)
=
0
(10)
\left\{\begin{aligned} & \nabla f(x^*, y^*) + \mu^* \nabla h(x^*, y^*) = \mathbf{0} \\ & h(x^*, y^*) = 0 \end{aligned}\right. \tag{10}
{∇f(x∗,y∗)+μ∗∇h(x∗,y∗)=0h(x∗,y∗)=0(10)
也就是:极值点需要满足我们之前求解用的方程组。不满足,就不是带约束优化问题的极值点。
上面这个需要满足的条件就是KKT条件,它是极值点的充要条件,只有满足KKT条件才能保证优化问题的解是极值点。
这里一直说的是极值点,而不是最优点,极值点未必是最优点,什么情况下极值点才是最优点?
答案:凸优化。有兴趣可以查看我写的凸优化文档。
拉格朗日乘子法
前面例子已经介绍了拉格朗日乘子法的思路是将有约束的优化问题转化为求拉格朗日乘子式的极值。
但是例子只讨论了一个等式约束的情况,如果有多个等式约束或者用的是不等式约束,那么拉格朗日乘子法还可以用吗?
下面就来分情况讨论。
等式约束的优化问题
单个等式约束
例子里面已经讲得很详细了,我们直接给出通用的数学表述:
优化问题:
min
f
(
x
)
s
.
t
.
h
(
x
)
=
0
(11)
\begin{aligned} &\min f(\mathbf{x}) \\ s.&t. \space h(\mathbf{x}) = 0 \end{aligned} \tag{11}
s.minf(x)t. h(x)=0(11)
可以通过转化为求解拉格朗日乘子式
F
(
x
)
=
f
(
x
)
+
μ
h
(
x
)
F(\mathbf{x}) = f(\mathbf{x}) + \mu h(\mathbf{x})
F(x)=f(x)+μh(x)的极值问题。
x ∗ \mathbf{x}^* x∗是极小值点,KKT条件是:
存在
μ
∗
\mu^*
μ∗,满足
{
∇
f
(
x
∗
)
+
μ
∗
∇
h
(
x
∗
)
=
0
h
(
x
∗
)
=
0
(10)
\left\{\begin{aligned} & \nabla f(\mathbf{x}^*) + \mu^* \nabla h(\mathbf{x}^*) = \mathbf{0} \\ & h(\mathbf{x}^*) = 0 \end{aligned}\right. \tag{10}
{∇f(x∗)+μ∗∇h(x∗)=0h(x∗)=0(10)
多个等式约束
如果增加多一个等式约束条件呢?比如说:
x
−
y
−
3
=
0
(12)
x - y -3 = 0 \tag{12}
x−y−3=0(12)
现在问题变成求
min
f
(
x
,
y
)
=
x
2
+
y
2
s
.
t
.
{
h
1
(
x
)
=
x
2
y
−
3
=
0
h
2
(
x
)
=
x
−
y
−
3
=
0
(13)
\begin{aligned} &\min \space f(x,y) = x^2 + y^2 \\ s.t. \quad& \left\{ \begin{aligned} h_1(x) &= x^2 y - 3 = 0 \\ h_2(x) &= x - y - 3 = 0 \end{aligned} \right. \end{aligned} \tag{13}
s.t.min f(x,y)=x2+y2{h1(x)h2(x)=x2y−3=0=x−y−3=0(13)
从图上看,约束条件是这样的:
很显然,所求的最小距离是这样的:
那这三者的法线有什么关系呢?
圆
x
2
+
y
2
x^2 + y^2
x2+y2的法线是曲线
x
2
y
−
3
=
0
x^2 y - 3=0
x2y−3=0和直线
x
−
y
−
3
=
0
x - y -3=0
x−y−3=0的法线的线性组合。
原因:两个不共线的非零向量可以表示平面内任一向量。
可以用数学表示为:
∇
f
=
μ
1
∇
h
1
+
μ
2
∇
h
2
(14)
\nabla f = \mu_1 \nabla h_1 + \mu_2 \nabla h_2 \tag{14}
∇f=μ1∇h1+μ2∇h2(14)
其中,
μ
1
\mu_1
μ1和
μ
2
\mu_2
μ2都是非零常数。
优化问题可以通过联立方程:
{ ∇ f = μ 1 ∇ h 1 + μ 2 ∇ h 2 h 1 ( x , y ) = 0 h 2 ( x , y ) = 0 ⇒ { ∂ f ∂ x = μ 1 ∂ h 1 ∂ x + μ 2 ∂ h 2 ∂ x ∂ f ∂ y = μ 1 ∂ h 1 ∂ y + μ 2 ∂ h 2 ∂ y h 1 ( x , y ) = 0 h 2 ( x , y ) = 0 (15) \left\{ \begin{aligned} & \nabla f = \mu_1 \nabla h_1 + \mu_2 \nabla h_2 \\ & h_1(x,y) = 0 \\ & h_2(x,y) = 0 \end{aligned} \right. \Rightarrow \left\{ \begin{aligned} & \frac{\partial f}{\partial x} = \mu_1 \frac{\partial h_1}{\partial x} + \mu_2 \frac{\partial h_2}{\partial x} \\ & \frac{\partial f}{\partial y} = \mu_1 \frac{\partial h_1}{\partial y} + \mu_2 \frac{\partial h_2}{\partial y} \\ & h_1(x,y) = 0 \\ & h_2(x,y) = 0 \end{aligned}\right. \tag{15} ⎩⎪⎨⎪⎧∇f=μ1∇h1+μ2∇h2h1(x,y)=0h2(x,y)=0⇒⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧∂x∂f=μ1∂x∂h1+μ2∂x∂h2∂y∂f=μ1∂y∂h1+μ2∂y∂h2h1(x,y)=0h2(x,y)=0(15)
来求解。
也可以写成拉格朗日乘子式
F
(
x
,
y
,
μ
1
,
μ
2
)
=
f
(
x
,
y
)
+
μ
1
h
1
(
x
,
y
)
+
μ
2
h
2
(
x
,
y
)
(16)
F(x,y,\mu_1,\mu_2) = f(x,y) + \mu_1 h_1(x,y) + \mu_2 h_2(x,y) \tag{16}
F(x,y,μ1,μ2)=f(x,y)+μ1h1(x,y)+μ2h2(x,y)(16)
然后对
F
F
F求极值点(求偏导并等于0):
∇ F = [ ∂ F ∂ x ∂ F ∂ y ∂ F ∂ μ 1 ∂ F ∂ μ 2 ] = [ ∂ f ∂ x + μ 1 ∂ h 1 ∂ x + μ 2 ∂ h 2 ∂ x ∂ f ∂ y + μ 1 ∂ h 1 ∂ y + μ 2 ∂ h 2 ∂ y h 1 ( x , y ) h 2 ( x , y ) ] = 0 ⇒ { ∂ f ∂ x = − μ 1 ∂ h 1 ∂ x − μ 2 ∂ h 2 ∂ x ∂ f ∂ y = − μ 1 ∂ h 1 ∂ y − μ 2 ∂ h 2 ∂ y h 1 ( x , y ) = 0 h 2 ( x , y ) = 0 (17) \begin{aligned} & \nabla F = \left[ \begin{array}{c} \frac{\partial F}{\partial x} \\ \frac{\partial F}{\partial y} \\ \frac{\partial F}{\partial \mu_1} \\ \frac{\partial F}{\partial \mu_2} \end{array} \right] =\left[ \begin{array}{c} \frac{\partial f}{\partial x} + \mu_1 \frac{\partial h_1}{\partial x} + \mu_2 \frac{\partial h_2}{\partial x} \\ \frac{\partial f}{\partial y} + \mu_1 \frac{\partial h_1}{\partial y} + \mu_2 \frac{\partial h_2}{\partial y} \\ h_1(x,y) \\ h_2(x,y) \end{array} \right] =\mathbf{0} \\ \Rightarrow \space & \left\{ \begin{aligned} & \frac{\partial f}{\partial x} = -\mu_1 \frac{\partial h_1}{\partial x} - \mu_2 \frac{\partial h_2}{\partial x} \\ & \frac{\partial f}{\partial y} = -\mu_1 \frac{\partial h_1}{\partial y} - \mu_2 \frac{\partial h_2}{\partial y} \\ & h_1(x,y) = 0 \\ & h_2(x,y) = 0 \end{aligned}\right. \end{aligned} \tag{17} ⇒ ∇F=⎣⎢⎢⎢⎡∂x∂F∂y∂F∂μ1∂F∂μ2∂F⎦⎥⎥⎥⎤=⎣⎢⎢⎡∂x∂f+μ1∂x∂h1+μ2∂x∂h2∂y∂f+μ1∂y∂h1+μ2∂y∂h2h1(x,y)h2(x,y)⎦⎥⎥⎤=0⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧∂x∂f=−μ1∂x∂h1−μ2∂x∂h2∂y∂f=−μ1∂y∂h1−μ2∂y∂h2h1(x,y)=0h2(x,y)=0(17)
之前说过,系数 μ 1 , μ 2 \mu_1, \mu_2 μ1,μ2的正负对结果没有影响,所以 ∇ F = 0 \nabla F = \mathbf{0} ∇F=0和式(15)是等效的。
也就是,对于多个等式约束的情况,拉格朗日乘子法依然适用。
推广到
N
N
N个等式约束的情况:
min
f
(
x
)
s
.
t
.
h
i
(
x
)
=
0
,
i
=
1
,
2
,
⋯
,
N
(18)
\begin{aligned} \min& \space f(\mathbf{x}) \\ s.t. \quad h_i(\mathbf{x}) = 0,& \space i=1,2,\cdots,N \end{aligned} \tag{18}
mins.t.hi(x)=0, f(x) i=1,2,⋯,N(18)
通过拉格朗日乘子式
F
(
x
,
μ
)
=
f
(
x
)
+
∑
i
=
1
N
μ
i
h
i
(
x
)
F(\mathbf{x}, \boldsymbol{\mu}) = f(\mathbf{x}) + \sum_{i=1}^N \mu_i h_i(\mathbf{x})
F(x,μ)=f(x)+∑i=1Nμihi(x)求极值来求解,其中
μ
=
[
μ
1
,
μ
2
,
⋯
,
μ
N
]
\boldsymbol{\mu} = \left[ \mu_1, \mu_2, \cdots, \mu_N \right]
μ=[μ1,μ2,⋯,μN]。
x ∗ \mathbf{x}^* x∗是极小值点,KKT条件是:
存在
μ
∗
\boldsymbol{\mu}^*
μ∗,使得
{
∇
x
f
(
x
∗
)
+
∑
i
=
1
N
μ
i
∗
∇
x
h
i
(
x
∗
)
=
0
h
i
(
x
∗
)
=
0
,
i
=
1
,
2
,
⋯
,
N
(19)
\left\{ \begin{aligned} & \nabla_{\mathbf{x}} f(\mathbf{x}^*) + \sum_{i=1}^N \mu_i^* \nabla_{\mathbf{x}} h_i(\mathbf{x}^*) = \mathbf{0} \\ & h_i(\mathbf{x}^*) = 0, \quad i=1,2,\cdots,N \end{aligned} \right. \tag{19}
⎩⎪⎪⎨⎪⎪⎧∇xf(x∗)+i=1∑Nμi∗∇xhi(x∗)=0hi(x∗)=0,i=1,2,⋯,N(19)
不难发现,多个等式约束的拉格朗日乘子法和KKT条件兼容单个等式约束条件的情况。
不等式约束的优化问题
沿用等式约束情况的例子,还是求同心圆的最小值:
在无约束的条件下,最小值点肯定就是原点。
从数学上看就是求:
min
f
(
x
,
y
)
=
x
2
+
y
2
(20)
\min \space f(x,y) = x^2 + y^2 \tag{20}
min f(x,y)=x2+y2(20)
解:
∇ f = [ ∂ f ∂ x ∂ f ∂ y ] = [ 2 x 2 y ] = 0 ⇒ ( x , y ) = ( 0 , 0 ) (21) \begin{aligned} & \nabla f = \left[ \begin{array}{c} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{array} \right] = \left[ \begin{array}{c} 2x \\ 2y \end{array} \right] = \mathbf{0} \\ \Rightarrow \quad & (x,y) = (0,0) \end{aligned} \tag{21} ⇒∇f=[∂x∂f∂y∂f]=[2x2y]=0(x,y)=(0,0)(21)
现在考虑加入不等式约束 g ( x , y ) ≤ 0 g(x,y) \le 0 g(x,y)≤0,它对 f ( x , y ) f(x,y) f(x,y)极小值问题的影响分以下两种情况:
- 极小值点落在约束条件的可行域内(不包括边界)
- 极小值点落在约束条件的可行域边界上
极小值点落在可行域内
加入不等式约束
g
(
x
,
y
)
=
x
+
y
−
1
≤
0
(22)
g(x,y) = x + y - 1 \le 0 \tag{22}
g(x,y)=x+y−1≤0(22)
那么问题变成:
min
f
(
x
,
y
)
s
.
t
.
g
(
x
,
y
)
=
x
+
y
−
1
≤
0
(23)
\begin{aligned} &\min f(x,y) \\ s.t. \quad g(x&,y) = x + y - 1 \le 0 \end{aligned} \tag{23}
s.t.g(xminf(x,y),y)=x+y−1≤0(23)
可以看到,这个不等式约束的可行域范围实际上包含了坐标原点:
所以这个约束条件对求极小值没有任何影响,依然求解:
∇
f
=
0
⇒
(
x
,
y
)
=
(
0
,
0
)
(24)
\nabla f = \mathbf{0} \Rightarrow (x,y) = (0,0) \tag{24}
∇f=0⇒(x,y)=(0,0)(24)
也可以令拉格朗日乘子式为
F
=
f
F=f
F=f,相应的KKT条件是
{
∇
f
=
0
g
<
0
(25)
\left\{ \begin{aligned} &\nabla f = \mathbf{0} \\ &g \lt 0 \end{aligned} \right. \tag{25}
{∇f=0g<0(25)
极小值点落在可行域的边界上
换一个不等式约束如下:
min
f
(
x
,
y
)
s
.
t
.
g
(
x
,
y
)
=
x
+
y
+
2
≤
0
(26)
\begin{aligned} &\min f(x,y) \\ s.t. \quad g(x&,y) = x + y + 2 \le 0 \end{aligned} \tag{26}
s.t.g(xminf(x,y),y)=x+y+2≤0(26)
在图中是这样的:
同心圆等高线的函数
f
(
x
,
y
)
f(x,y)
f(x,y)数值如下:
由图可知,在这个不等式约束下,在圆与直线相切的地方取得最小值:
跟用等式
g
(
x
,
y
)
=
x
+
y
+
2
=
0
g(x,y) = x + y + 2 = 0
g(x,y)=x+y+2=0进行约束的效果是一样的:
因此,可以通过下面的方程组求出极小值点:
{ ∇ f + λ ∇ g = 0 g ( x , y ) = x + y + 2 = 0 (27) \left\{ \begin{aligned} & \nabla f + \lambda \nabla g = \mathbf{0} \\ & g(x,y) = x + y + 2 = 0 \end{aligned} \right. \tag{27} {∇f+λ∇g=0g(x,y)=x+y+2=0(27)
这里有一点需要特别注意的是 λ > 0 \lambda \gt 0 λ>0,为什么呢?
先来看相切处, ∇ f \nabla f ∇f的方向是下面这样的:
而
g
(
x
,
y
)
g(x,y)
g(x,y)的法线
∇
g
\nabla g
∇g方向正好与
∇
f
\nabla f
∇f相反:
因此
∇
f
=
−
λ
∇
g
,
λ
>
0
(28)
\nabla f = - \lambda \nabla g, \space \lambda \gt 0 \tag{28}
∇f=−λ∇g, λ>0(28)
λ
>
0
\lambda \gt 0
λ>0表明
∇
f
\nabla f
∇f和
∇
g
\nabla g
∇g方向相反。
为什么 λ \lambda λ不能取负数呢?
根本原因在于 g ( x , y ) ≤ 0 g(x,y) \le 0 g(x,y)≤0和 − g ( x , y ) ≤ 0 - g(x,y) \le 0 −g(x,y)≤0不等价,所以 ∇ g \nabla g ∇g的方向不能乱取,这点跟等式约束很不一样,等式约束 h = 0 h=0 h=0和 − h = 0 -h=0 −h=0是一回事。
综上,我们需要求解的方程组应该是:
{
∇
f
+
λ
∇
g
=
0
g
(
x
,
y
)
=
x
+
y
+
2
=
0
λ
>
0
(29)
\left\{ \begin{aligned} & \nabla f + \lambda \nabla g = \mathbf{0} \\ & g(x,y) = x + y +2 = 0 \\ & \lambda \gt 0 \end{aligned} \right. \tag{29}
⎩⎪⎨⎪⎧∇f+λ∇g=0g(x,y)=x+y+2=0λ>0(29)
当然,也可以用拉格朗日乘子式 F = f + λ g F = f+\lambda g F=f+λg求极值的方式求解。
两种情况的形式统一
通过不等式约束的例子,我们可以知道:
对于优化问题
min
f
(
x
)
s
.
t
.
g
(
x
)
≤
0
(30)
\min f(\mathbf{x}) \\ s.t. \space g(\mathbf{x}) \le 0 \tag{30}
minf(x)s.t. g(x)≤0(30)
-
如果极小值点落在可行域内
拉格朗日乘子式为
F ( x ) = f ( x ) (31) F(\mathbf{x}) = f(\mathbf{x}) \tag{31} F(x)=f(x)(31)
x ∗ \mathbf{x}^* x∗是极小值,KKT条件是:
{ ∇ x f ( x ∗ ) = 0 g ( x ∗ ) < 0 (32) \left\{ \begin{aligned} &\nabla_{\mathbf{x}} f(\mathbf{x}^*) = \mathbf{0} \\ &g(\mathbf{x}^*) \lt 0 \end{aligned} \right. \tag{32} {∇xf(x∗)=0g(x∗)<0(32) -
如果极小值点落在可行域的边界上
拉格朗日乘子式为
F ( x ) = f ( x ) + λ g ( x ) (33) F(\mathbf{x}) = f(\mathbf{x}) + \lambda g(\mathbf{x}) \tag{33} F(x)=f(x)+λg(x)(33)
x ∗ \mathbf{x}^* x∗是极小值,KKT条件是:存在 λ ∗ \lambda^* λ∗,使得
{ ∇ x f ( x ∗ ) + λ ∗ ∇ x g ( x ∗ ) = 0 g ( x ∗ ) = 0 λ ∗ > 0 (34) \left\{ \begin{aligned} & \nabla_{\mathbf{x}} f(\mathbf{x}^*) + \lambda^* \nabla_{\mathbf{x}} g(\mathbf{x}^*) = \mathbf{0} \\ & g(\mathbf{x}^*) = 0 \\ & \lambda^* \gt 0 \end{aligned} \right. \tag{34} ⎩⎪⎨⎪⎧∇xf(x∗)+λ∗∇xg(x∗)=0g(x∗)=0λ∗>0(34)
为了使两种情况的拉格朗日乘子式相同,我们对极小值点落在可行域内的情况进行改造:
拉格朗日乘子式直接用
F
(
x
)
=
f
(
x
)
+
λ
g
(
x
)
(35)
F(\mathbf{x}) = f(\mathbf{x}) + \lambda g(\mathbf{x}) \tag{35}
F(x)=f(x)+λg(x)(35)
但要使
λ
=
0
\lambda = 0
λ=0,因此KKT条件也要改为
{
∇
x
f
(
x
∗
)
+
λ
∗
∇
x
g
(
x
∗
)
=
0
g
(
x
∗
)
<
0
λ
∗
=
0
(36)
\left\{ \begin{aligned} &\nabla_{\mathbf{x}} f(\mathbf{x}^*) + \lambda^* \nabla_{\mathbf{x}} g(\mathbf{x}^*) = \mathbf{0} \\ &g(\mathbf{x}^*) \lt 0 \\ &\lambda^* = 0 \end{aligned} \right. \tag{36}
⎩⎪⎨⎪⎧∇xf(x∗)+λ∗∇xg(x∗)=0g(x∗)<0λ∗=0(36)
两种情况的KKT条件还有不同,不同点在于:
-
极小值点落在可行域内
{ g ( x ∗ ) < 0 λ ∗ = 0 (37) \left\{ \begin{aligned} &g(\mathbf{x}^*) \lt 0 \\ &\lambda^* = 0 \end{aligned} \right. \tag{37} {g(x∗)<0λ∗=0(37) -
极小值点落在可行域的边界上
{ g ( x ∗ ) = 0 λ ∗ > 0 (38) \left\{ \begin{aligned} & g(\mathbf{x}^*) = 0 \\ & \lambda^* \gt 0 \end{aligned} \right. \tag{38} {g(x∗)=0λ∗>0(38)
不过,它们有个共同点:
λ
∗
g
(
x
∗
)
=
0
\lambda^* g(\mathbf{x}^*) = 0
λ∗g(x∗)=0,所以可以统一成下面这个形式:
{
g
(
x
∗
)
≤
0
λ
∗
≥
0
λ
∗
g
(
x
∗
)
=
0
(39)
\left\{ \begin{aligned} & g({\mathbf{x}^*}) \le 0 \\ & \lambda^* \ge 0 \\ & \lambda^* g(\mathbf{x}^*) =0 \end{aligned} \right. \tag{39}
⎩⎪⎨⎪⎧g(x∗)≤0λ∗≥0λ∗g(x∗)=0(39)
如果
λ
∗
=
0
\lambda^* = 0
λ∗=0,那就变回到极小值点落在可行域内的情况:
{
g
(
x
∗
)
<
0
λ
∗
=
0
(40)
\left\{ \begin{aligned} &g(\mathbf{x}^*) \lt 0 \\ &\lambda^* = 0 \end{aligned} \right. \tag{40}
{g(x∗)<0λ∗=0(40)
如果
g
(
x
∗
)
=
0
g(\mathbf{x}^*) = 0
g(x∗)=0,那就变回到极小值点落在可行域边界上的情况:
{
g
(
x
∗
)
=
0
λ
∗
>
0
(41)
\left\{ \begin{aligned} & g(\mathbf{x}^*) = 0 \\ & \lambda^* \gt 0 \end{aligned} \right. \tag{41}
{g(x∗)=0λ∗>0(41)
问题完美解决。
合并后的KKT条件是:
{
∇
x
f
(
x
∗
)
+
λ
∗
∇
x
g
(
x
∗
)
=
0
g
(
x
∗
)
≤
0
λ
∗
≥
0
λ
∗
g
(
x
∗
)
=
0
(42)
\left\{ \begin{aligned} & \nabla_{\mathbf{x}} f(\mathbf{x}^*) + \lambda^* \nabla_{\mathbf{x}} g(\mathbf{x}^*) = \mathbf{0} \\ & g(\mathbf{x}^*) \le 0 \\ & \lambda^* \ge 0 \\ & \lambda^* g(\mathbf{x}^*) =0 \end{aligned} \right. \tag{42}
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧∇xf(x∗)+λ∗∇xg(x∗)=0g(x∗)≤0λ∗≥0λ∗g(x∗)=0(42)
推广到
M
M
M个不等式约束的情况:
min
f
(
x
)
s
.
t
.
g
i
(
x
)
≤
0
,
i
=
1
,
2
,
⋯
,
M
(43)
\begin{aligned} \min& \space f(\mathbf{x}) \\ s.t. \quad g_i(\mathbf{x}) \le 0,& \space i=1,2,\cdots,M \end{aligned} \tag{43}
mins.t.gi(x)≤0, f(x) i=1,2,⋯,M(43)
其拉格朗日乘子式为
F
(
x
,
λ
)
=
f
(
x
)
+
∑
i
=
1
M
λ
i
g
i
(
x
)
(44)
F(\mathbf{x}, \boldsymbol{\lambda}) = f(\mathbf{x}) + \sum_{i=1}^M \lambda_i g_i(\mathbf{x}) \tag{44}
F(x,λ)=f(x)+i=1∑Mλigi(x)(44)
其中,
λ
=
[
λ
1
,
λ
2
,
⋯
,
λ
M
]
\boldsymbol{\lambda} = [\lambda_1,\lambda_2,\cdots,\lambda_M]
λ=[λ1,λ2,⋯,λM]。
x ∗ \mathbf{x}^* x∗是极小值,KKT条件是:
存在
λ
∗
\boldsymbol{\lambda}^*
λ∗,使得
{
∇
x
∗
f
(
x
)
+
∑
i
=
1
M
λ
i
∗
∇
x
g
i
(
x
∗
)
=
0
λ
i
∗
≥
0
,
i
=
1
,
2
,
⋯
,
M
λ
i
∗
g
i
(
x
∗
)
=
0
,
i
=
1
,
2
,
⋯
,
M
g
i
(
x
∗
)
≤
0
,
i
=
1
,
2
,
⋯
,
M
(45)
\left\{ \begin{aligned} & \nabla_{\mathbf{x}^*} f(\mathbf{x}) + \sum_{i=1}^M \lambda_i^* \nabla_{\mathbf{x}} g_i(\mathbf{x}^*) = \mathbf{0} \\ & \lambda_i^* \ge 0, \space i=1,2,\cdots,M \\ & \lambda_i^* g_i(\mathbf{x}^*) =0, \space i=1,2,\cdots,M \\ & g_i(\mathbf{x}^*) \le 0, \space i=1,2,\cdots,M \end{aligned} \right. \tag{45}
⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧∇x∗f(x)+i=1∑Mλi∗∇xgi(x∗)=0λi∗≥0, i=1,2,⋯,Mλi∗gi(x∗)=0, i=1,2,⋯,Mgi(x∗)≤0, i=1,2,⋯,M(45)
等式约束优化问题与不等式约束优化问题的形式统一
等式约束优化问题和不等式约束优化问题的拉格朗日乘子式和KKT条件如下:
-
等式约束
优化问题
min f ( x ) s . t . h i ( x ) = 0 , i = 1 , 2 , ⋯ , N (46) \begin{aligned} \min& \space f(\mathbf{x}) \\ s.t. \quad h_i(\mathbf{x}) = 0,& \space i=1,2,\cdots,N \end{aligned} \tag{46} mins.t.hi(x)=0, f(x) i=1,2,⋯,N(46)
拉格朗日乘子式
F ( x , μ ) = f ( x ) + ∑ i = 1 N μ i h i ( x ) (47) F(\mathbf{x}, \boldsymbol{\mu}) = f(\mathbf{x}) + \sum_{i=1}^N \mu_i h_i(\mathbf{x}) \tag{47} F(x,μ)=f(x)+i=1∑Nμihi(x)(47)
其中 μ = [ μ 1 , μ 2 , ⋯ , μ N ] \boldsymbol{\mu} = \left[ \mu_1, \mu_2, \cdots, \mu_N \right] μ=[μ1,μ2,⋯,μN]。x ∗ \mathbf{x}^* x∗是极小值点,KKT条件是:
存在 μ ∗ \boldsymbol{\mu}^* μ∗,使得
{ ∇ x f ( x ∗ ) + ∑ i = 1 N μ i ∗ ∇ x h i ( x ∗ ) = 0 h i ( x ∗ ) = 0 , i = 1 , 2 , ⋯ , N (48) \left\{ \begin{aligned} & \nabla_{\mathbf{x}} f(\mathbf{x}^*) + \sum_{i=1}^N \mu_i^* \nabla_{\mathbf{x}} h_i(\mathbf{x}^*) = \mathbf{0} \\ & h_i(\mathbf{x}^*) = 0, \quad i=1,2,\cdots,N \end{aligned} \right. \tag{48} ⎩⎪⎪⎨⎪⎪⎧∇xf(x∗)+i=1∑Nμi∗∇xhi(x∗)=0hi(x∗)=0,i=1,2,⋯,N(48) -
不等式约束
优化问题
min f ( x ) s . t . g i ( x ) ≤ 0 , i = 1 , 2 , ⋯ , M (49) \begin{aligned} \min& \space f(\mathbf{x}) \\ s.t. \quad g_i(\mathbf{x}) \le 0,& \space i=1,2,\cdots,M \end{aligned} \tag{49} mins.t.gi(x)≤0, f(x) i=1,2,⋯,M(49)
拉格朗日乘子式为
F ( x , λ ) = f ( x ) + ∑ i = 1 M λ i g i ( x ) (50) F(\mathbf{x}, \boldsymbol{\lambda}) = f(\mathbf{x}) + \sum_{i=1}^M \lambda_i g_i(\mathbf{x}) \tag{50} F(x,λ)=f(x)+i=1∑Mλigi(x)(50)
其中, λ = [ λ 1 , λ 2 , ⋯ , λ M ] \boldsymbol{\lambda} = [\lambda_1,\lambda_2,\cdots,\lambda_M] λ=[λ1,λ2,⋯,λM]。x ∗ \mathbf{x}^* x∗是极小值,KKT条件是:
存在 λ ∗ \boldsymbol{\lambda}^* λ∗,使得
{ ∇ x f ( x ∗ ) + ∑ i = 1 M λ i ∗ ∇ x g i ( x ∗ ) = 0 λ i ∗ ≥ 0 , i = 1 , 2 , ⋯ , M λ i ∗ g i ( x ∗ ) = 0 , i = 1 , 2 , ⋯ , M g i ( x ∗ ) ≤ 0 , i = 1 , 2 , ⋯ , M (51) \left\{ \begin{aligned} & \nabla_{\mathbf{x}} f(\mathbf{x}^*) + \sum_{i=1}^M \lambda_i^* \nabla_{\mathbf{x}} g_i(\mathbf{x}^*) = \mathbf{0} \\ & \lambda_i^* \ge 0, \space i=1,2,\cdots,M \\ & \lambda_i^* g_i(\mathbf{x}^*) =0, \space i=1,2,\cdots,M \\ & g_i(\mathbf{x}^*) \le 0, \space i=1,2,\cdots,M \end{aligned} \right. \tag{51} ⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧∇xf(x∗)+i=1∑Mλi∗∇xgi(x∗)=0λi∗≥0, i=1,2,⋯,Mλi∗gi(x∗)=0, i=1,2,⋯,Mgi(x∗)≤0, i=1,2,⋯,M(51)
不管是等式约束还是不等式约束,拉格朗日乘子式都是:目标函数 + 系数 × 约束函数。
KKT条件的第一个式子都是拉格朗日乘子式对 x \mathbf{x} x求偏导,对于其他式子,不等式约束分为两种情况:
-
极小值点落在可行域内
这时目标函数等价于没有不等式的约束,优化问题就只剩下等式约束,那么等式约束的式子直接加进来即可。
-
极小值点落在可行域的边界上
这时不等式约束等价于等式约束,那优化问题的约束条件相当于全是等式约束,根据之前多个等式约束情况的讨论,等式约束是可以直接叠加的,所以这种情况下不等式约束和等式约束也可以融合。
综上,不等式约束和等式约束的式子直接列出即可。
那么,对于同时存在等式约束和不等式约束的优化问题:
min
f
(
x
)
s
.
t
.
h
i
(
x
)
=
0
,
i
=
1
,
2
,
⋯
,
N
g
j
(
x
)
≤
0
,
j
=
1
,
2
,
⋯
,
M
(52)
\begin{aligned} & \min \space f(\mathbf{x}) \\ s.t. \quad h_i(\mathbf{x}) &= 0, \space i=1,2,\cdots,N \\ g_j(\mathbf{x}) &\le 0, \space j=1,2,\cdots,M \\ \end{aligned} \tag{52}
s.t.hi(x)gj(x)min f(x)=0, i=1,2,⋯,N≤0, j=1,2,⋯,M(52)
其拉格朗日乘子式为
F
(
x
,
μ
,
λ
)
=
f
(
x
)
+
∑
i
=
1
N
μ
i
h
i
(
x
)
+
∑
j
=
1
M
λ
j
g
j
(
x
)
(53)
F(\mathbf{x}, \boldsymbol{\mu}, \boldsymbol{\lambda}) = f(\mathbf{x}) + \sum_{i=1}^N \mu_i h_i(\mathbf{x}) + \sum_{j=1}^M \lambda_j g_j(\mathbf{x}) \tag{53}
F(x,μ,λ)=f(x)+i=1∑Nμihi(x)+j=1∑Mλjgj(x)(53)
x
∗
\mathbf{x}^*
x∗是极小值,KKT条件是:
存在
μ
∗
,
λ
∗
\boldsymbol{\mu}^*, \boldsymbol{\lambda}^*
μ∗,λ∗,使得
{
∇
x
f
(
x
∗
)
+
∑
i
=
1
N
μ
i
∗
∇
x
h
i
(
x
)
+
∑
j
=
1
M
λ
j
∗
∇
x
g
j
(
x
∗
)
=
0
h
i
(
x
∗
)
=
0
,
i
=
1
,
2
,
⋯
,
N
g
j
(
x
∗
)
≤
0
,
j
=
1
,
2
,
⋯
,
M
λ
j
∗
≥
0
,
j
=
1
,
2
,
⋯
,
M
λ
j
∗
g
j
(
x
∗
)
=
0
,
j
=
1
,
2
,
⋯
,
M
(54)
\left\{ \begin{aligned} & \nabla_\mathbf{x} f(\mathbf{x}^*) + \sum_{i=1}^N \mu_i^* \nabla_\mathbf{x} h_i(\mathbf{x}) + \sum_{j=1}^M \lambda_j^* \nabla_\mathbf{x} g_j(\mathbf{x}^*) = \mathbf{0} \\ & h_i(\mathbf{x}^*) = 0, \space i = 1,2,\cdots,N \\ & g_j(\mathbf{x}^*) \le 0, \space j = 1,2,\cdots,M \\ & \lambda_j^* \ge 0, \space j = 1,2,\cdots,M \\ & \lambda_j^* g_j(\mathbf{x}^*) = 0, \space j = 1,2,\cdots,M \end{aligned} \right. \tag{54}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧∇xf(x∗)+i=1∑Nμi∗∇xhi(x)+j=1∑Mλj∗∇xgj(x∗)=0hi(x∗)=0, i=1,2,⋯,Ngj(x∗)≤0, j=1,2,⋯,Mλj∗≥0, j=1,2,⋯,Mλj∗gj(x∗)=0, j=1,2,⋯,M(54)
参考资料:
如何理解拉格朗日乘子法?https://www.matongxue.com/madocs/939.html
如何理解拉格朗日乘子法和KKT条件?https://www.matongxue.com/madocs/987/
拉格朗日乘子法和KKT条件:https://www.cnblogs.com/liaohuiqiang/p/7805954.html
瑞典皇家理工学院的KKT课件:http://www.csc.kth.se/utbildning/kth/kurser/DD3364/Lectures/KKT.pdf
Duality SVM Tutorial, Duality and Lagrange multipliers:https://www.svm-tutorial.com/2016/09/duality-lagrange-multipliers/