拉格朗日乘子法与KKT条件
最近看LDA的时候,推导有用到拉格朗日乘子法,趁这个机会稍微学习一下。
什么是拉格朗日乘子法
按照维基百科的定义,拉格朗日乘数法是一种寻找多元函数在其变量受到一个或多个条件的约束时的极值的方法。换句话说,该方法并不能保证找到的一定是最低点或者最高点。事实上,它只是一种寻找极值点的过程,而且,拉格朗日乘子法找到的切点可能不只一个(也就是上面的方程组可能找到多个解),例如下图:
图中相切的点有两个,而红点的函数值明显比黑点小。事实上,要想判断找到的点是极低点还是极高点,我们需要将切点代入原函数再进行判断。
无约束优化
单约束条件
我们首先考虑一个不带约束的优化问题,对于变量
x
∈
R
N
x \in \mathbb{R}^N
x∈RN的函数f(x),无约束优化问题如下:
m
i
n
x
f
(
x
)
min_x\ \ f(x)
minx f(x)
这种问题很好解,直接对变量求导等于0,带入原函数验证即可。如果没有解析解的话,可以使用梯度下降或牛顿法等迭代方法使x沿负梯度方向逐步逼近极小值点。
等式约束优化
当目标函数加上约束条件之后,问题就变成了如下形式:
m
i
n
x
f
(
x
)
s
.
t
.
h
i
(
x
)
=
0
,
i
=
1
,
2
,
3
,
…
.
,
m
min_x\ \ f(x) \\ s.t.\ \ h_i(x)=0,i=1,2,3,….,m
minx f(x)s.t. hi(x)=0,i=1,2,3,….,m
约束条件会将解的范围限定在一个可行域,此时不一定能找到使得 梯度为 0 的点,只需找到在可行域内使得 f(x)最小的值即可。我们先从几何的角度来看待如何求解。
f(x,y)的等高线表示为上图虚线,并给出了h(x)=0的曲线为上图绿线。首先我们考虑绿线与等高线之间的几何关系有三种:相交,相切,无交集。无交集肯定不是解了,那么只有相交和相切有可能是解,但是仔细分析:相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小。这就意味着只有等高线与目标函数的曲线相切的时候,才可能得到可行解。相切就意味着两条曲线在相切点的梯度是在一条直线上的。即:
∇
x
f
(
x
)
−
α
∇
x
h
(
x
)
=
0
\nabla_xf(x)-\alpha\nabla_xh(x)=0
∇xf(x)−α∇xh(x)=0
那么对于上述的例子,我们可以联立方程组来解决:
f
(
n
)
=
{
∇
f
(
x
)
=
α
∇
h
(
x
)
h
(
x
)
=
0
f(n)= \begin{cases} \nabla f(x)=\alpha \nabla h(x)\\ h(x)=0 \end{cases}
f(n)={∇f(x)=α∇h(x)h(x)=0
那么在实际求解时,我们趋向于使用统一的拉格朗日函数:
L
(
x
,
α
)
=
f
(
x
)
+
α
h
(
x
)
L(x,\alpha)=f(x)+\alpha h(x)
L(x,α)=f(x)+αh(x)
关于
α
\alpha
α与x求解方程组:
{
∇
x
L
(
x
,
α
)
=
0
∇
α
L
(
x
,
α
)
=
0
\begin{cases} \nabla_x L(x,\alpha)=0 \\ \nabla_{\alpha} L(x,\alpha)=0 \end{cases}
{∇xL(x,α)=0∇αL(x,α)=0
多约束条件
求:
m
i
n
x
2
+
y
2
s
.
t
.
{
x
2
y
−
3
=
0
x
−
y
−
3
=
0
min\ x^2+y^2 \\ s.t.\ \begin{cases} x^2y-3=0 \\ x-y-3=0 \end{cases}
min x2+y2s.t. {x2y−3=0x−y−3=0
从图上看约束条件是这样的:
很显然所求的距离是这样的:
我们仔细观察他们的发现可以发现: x 2 + y 2 x^2+y^2 x2+y2的法线是 x 2 y − 3 = 0 x^2y-3=0 x2y−3=0和 x − y − 3 = 0 x-y-3=0 x−y−3=0的法线的线性组合:
那么如果令:
{
f
(
x
,
y
)
=
x
2
+
y
2
g
(
x
,
y
)
=
x
2
y
−
3
h
(
x
,
y
)
=
x
−
y
−
3
\begin{cases} f(x,y)=x^2+y^2 \\ g(x,y)=x^2y-3 \\ h(x,y)=x-y-3 \end{cases}
⎩⎪⎨⎪⎧f(x,y)=x2+y2g(x,y)=x2y−3h(x,y)=x−y−3
那么可得:
∇
f
=
λ
∇
g
+
μ
∇
h
\nabla f=\lambda \nabla g+\mu \nabla h
∇f=λ∇g+μ∇h
联立方程组:
{
∇
f
=
λ
∇
g
+
μ
∇
h
g
(
x
,
y
)
=
0
h
(
x
,
y
)
=
0
\begin{cases} \nabla f=\lambda \nabla g+\mu \nabla h \\ g(x,y)=0 \\ h(x,y)=0 \end{cases}
⎩⎪⎨⎪⎧∇f=λ∇g+μ∇hg(x,y)=0h(x,y)=0
即可求解。
更加通用的拉格朗日函数如下:
L
(
x
1
,
…
.
.
,
x
n
,
λ
1
,
…
…
,
λ
k
)
=
f
(
x
1
,
…
.
.
,
x
n
)
−
∑
j
=
1
k
λ
j
g
j
(
x
1
,
…
.
.
,
x
n
)
L(x_1,…..,x_n,\lambda_1,……,\lambda_k)=f(x_1,…..,x_n)-\sum_{j=1}^{k}\lambda_j g_j(x_1,…..,x_n)
L(x1,…..,xn,λ1,……,λk)=f(x1,…..,xn)−j=1∑kλjgj(x1,…..,xn)
然后同样令这个函数的导数 ∇ L = 0 \nabla L=0 ∇L=0,最后可以得到n+k个方程以及n+k个未知数,一般也能求解出来。
不等式约束
对于
m
i
n
f
(
x
)
s
.
t
.
g
(
x
)
=
0
h
(
x
)
≤
0
min\ \ f(x)\\ s.t.\ \ g(x)=0 \\ h(x)\leq 0
min f(x)s.t. g(x)=0h(x)≤0
约定不等式是
≤
\leq
≤,如果是
≥
\geq
≥只要取反就行了。我们首先看不等式约束和目标函数的图:
阴影部分就是可行域,也就是说可行域从原来的一条线变成了一块区域。那么能取到极值点的地方分为两块:
- 还是在h(x)和等值线相切的地方
- 极值点本身在可行域里面
对于第一种情况,那么极值点还是在h(x)=0的曲线上,那么不等式约束就变成了等式约束,相当于求解:
∇
f
(
x
)
+
λ
∇
g
(
x
)
+
μ
∇
h
(
x
)
=
0
g
(
x
)
=
0
h
(
x
)
=
0
μ
≥
0
\nabla f(x)+\lambda \nabla g(x)+\mu \nabla h(x)=0\\ g(x)=0 \\ h(x)=0 \\ \mu \geq 0
∇f(x)+λ∇g(x)+μ∇h(x)=0g(x)=0h(x)=0μ≥0
至于为什么
μ
\mu
μ的取值为什么要大于等于0,在等式约束优化中,约束函数与目标函数只要满足平行即可,而在不等式约束中则不是这样的,如下图所示:
目标函数梯度指向可行域,而约束函数的梯度指向无约束区域。
因此:
∇
f
+
μ
∇
h
=
0
,
μ
≥
0
\nabla f+\mu \nabla h=0,\mu \geq0
∇f+μ∇h=0,μ≥0
其中
μ
≥
0
\mu \geq0
μ≥0就表明
∇
f
,
∇
h
\nabla f,\nabla h
∇f,∇h方向相反
对于第二种情况,不等式约束就相当于没有,对
f
(
x
)
+
λ
h
(
x
)
f(x)+\lambda h(x)
f(x)+λh(x)用拉格朗日乘子法:
∇
f
(
x
)
+
λ
∇
h
(
x
)
=
0
h
(
x
)
=
0
g
(
x
)
≤
0
\nabla f(x)+\lambda \nabla h(x)=0\\ h(x)=0\\ g(x)\leq 0
∇f(x)+λ∇h(x)=0h(x)=0g(x)≤0
综合来看上述两种情况(第一种情况:
μ
≥
0
\mu \geq 0
μ≥0且g(x)=0,第二种情况
μ
=
0
\mu=0
μ=0且g(x)
≤
0
\leq 0
≤0),可得:
∇
f
(
x
)
+
λ
∇
h
(
x
)
+
μ
∇
g
(
x
)
=
0
μ
g
(
x
)
=
0
μ
≥
0
h
(
x
)
=
0
g
(
x
)
≤
0
\nabla f(x)+\lambda \nabla h(x)+\mu \nabla g(x)=0\\ \mu g(x)=0\\ \mu \geq 0\\ h(x)=0\\ g(x) \leq 0
∇f(x)+λ∇h(x)+μ∇g(x)=0μg(x)=0μ≥0h(x)=0g(x)≤0
以上就是所谓的KKT条件。