学习笔记,仅供参考,有错必纠
转载自:彭一洋
最近也在看关于优化的东西,题主在问题补充里问了好多,我暂且以二维空间 [公式] 举例,从简单的无约束的优化(0梯度条件),到等式约束优化(拉格朗日条件),再到不等式约束优化(KKT条件),写点对于优化问题自己能写的理解,权当做抛砖引玉。
无约束的优化问题
注意我在图里画了等高线。此时
f
(
x
)
f(x)
f(x)在局部极小值点
x
∗
=
(
x
1
∗
,
x
2
∗
)
x^* = (x_1^*, x_2^*)
x∗=(x1∗,x2∗) 处的梯度必然为0,比较容易理解。这个梯度为零的条件是局部极小值点的必要条件。这样,优化问题的求解变成了对该必要条件解方程组。
带等式约束的优化问题
与无约束的问题不同。我们所要求的极小值点被限制在曲线 h ( x ) = 0 h(x)=0 h(x)=0上,我们将 { x ∣ h ( x ) = 0 } \{ x| h(x) = 0 \} {x∣h(x)=0}称为可行域, 解只能在这个可行域里取。如下图所示,曲线 h ( x ) = 0 h(x)=0 h(x)=0(黑色实曲线)经过无约束极小值点(黑点)附近。那么满足约束的极小值点应该与黑点尽可能近。我们将 f ( x ) f(x) f(x)的等高线不断放大,直到与曲线 h ( x ) = 0 h(x)=0 h(x)=0相切,切点即为所求。相切是关键,是极小值点的必要条件。
如此,带等式约束的优化问题转化为了无约束的优化问题,只需要对拉格朗日条件解方程组即可。这里λ就是拉格朗日乘子,有多少个等式约束就有多少个拉格朗日乘子。
带不等式约束的优化问题
当只有一个不等式起作用时, 如我们把问题2里的等式约束
h
(
x
)
=
0
h(x)=0
h(x)=0改为
h
(
x
)
≤
0
h(x) \le 0
h(x)≤0,如下图所示,可行域变成了阴影部分,最小值点还是切点,情况和问题2完全一样,只需要把不等号当做等号去求解即可。
当两个不等式起作用时,那么问题就来了:
如下图,当
f
(
x
)
f(x)
f(x)的等高线慢慢扩大时,等高线与可行域(阴影部分)第一次相遇的点是个顶点,2个不等式同时起作用了。满足约束的最小值点从原来的黑点位置(切点)移动到了红点位置,现在跟哪条约束函数曲线都不相切。这时候就需要用到kkt条件了。这里的“条件”是指:某一个点它如果是最小值点的话,就必须满足这个条件(在含不等式约束的优化问题里)。这是个必要条件,前面说的也全部是必要条件。
这个问题的解
x
∗
x^*
x∗应满足的KKT(卡罗需-库恩-塔克)条件为:
- μ 1 ≥ 0 , μ 2 ≥ 0 \mu_1 \ge 0, \mu_2 \ge 0 μ1≥0,μ2≥0;
- ∇ f ( x ∗ ) + μ 1 ∇ g 1 ( x ∗ ) + μ 2 ∇ g 2 ( x ∗ ) = 0 \nabla f(x^*) + \mu_1 \nabla g_1(x^*) + \mu_2 \nabla g_2(x^*)=0 ∇f(x∗)+μ1∇g1(x∗)+μ2∇g2(x∗)=0;
- μ 1 g 1 ( x ∗ ) + μ 2 g 2 ( x ∗ ) = 0 \mu_1 g_1(x^*) + \mu_2 g_2(x^*) = 0 μ1g1(x∗)+μ2g2(x∗)=0
其中, μ \mu μ叫KKT乘子,有多少个不等式约束就有多少个KKT乘子。加上问题3中的约束部分,就是完整版的KKT条件。对于有等式的情况,你把其中一个不等式约束换成等式,可行域变成了半条曲线,最小值点还是那个红点,和下面这种情况是一样的。
有时候,有的不等式约束实际上不起作用,如下面这个优化问题:
如下图的 g 3 ( x 1 , x 2 ) ≤ 0 g_3(x_1, x_2) \le 0 g3(x1,x2)≤0是不起作用的:
对于最小值点 x ∗ x^* x∗ ,三个不等式约束的不同在于:
这时,这个问题的KKT条件1,2成了:
- μ 1 ≥ 0 , μ 2 ≥ 0 , μ 3 ≥ 0 \mu_1 \ge 0, \mu_2 \ge 0, \mu_3 \ge 0 μ1≥0,μ2≥0,μ3≥0;
- ∇ f ( x ∗ ) + μ 1 ∇ g 1 ( x ∗ ) + μ 2 ∇ g 2 ( x ∗ ) + μ 3 ∇ g 3 ( x ∗ ) = 0 \nabla f(x^*) + \mu_1 \nabla g_1(x^*) + \mu_2 \nabla g_2(x^*)+ \mu_3 \nabla g_3(x^*)=0 ∇f(x∗)+μ1∇g1(x∗)+μ2∇g2(x∗)+μ3∇g3(x∗)=0;
条件2中的 μ 3 ∇ g 3 ( x ∗ ) \mu_3 \nabla g_3(x^*) μ3∇g3(x∗)这一项让我们很苦恼啊, g 3 ( x ∗ ) g_3(x^*) g3(x∗)的绿色箭头跟我们的红色箭头没关系。要是能令 μ 3 = 0 \mu_3 =0 μ3=0就好了。加上条件3:
- μ 1 g 1 ( x ∗ ) + μ 2 g 2 ( x ∗ ) + μ 3 g 3 ( x ∗ ) = 0 \mu_1 g_1(x^*) + \mu_2 g_2(x^*) + \mu_3 g_3(x^*) = 0 μ1g1(x∗)+μ2g2(x∗)+μ3g3(x∗)=0
恰好能使 μ 3 = 0 \mu_3 =0 μ3=0. 由于 g 1 ( x ∗ ) = 0 , g 2 ( x ∗ ) = 0 g_1(x^*) = 0, g_2(x^*) = 0 g1(x∗)=0,g2(x∗)=0,所以前两项等于0,第三项 g 3 ( x ∗ ) < 0 g_3(x^*) < 0 g3(x∗)<0, 在条件3的作用下使得 μ 3 = 0 \mu_3 =0 μ3=0正好满足需求。
如果再多几项不起作用的不等式约束,比如 g 4 ( x ) ≤ 0 g_4(x) \le 0 g4(x)≤0。要使 μ 1 g 1 ( x ∗ ) + μ 2 g 2 ( x ∗ ) + μ 3 g 3 ( x ∗ ) + μ 4 g 4 ( x ∗ ) = 0 \mu_1 g_1(x^*) + \mu_2 g_2(x^*) + \mu_3 g_3(x^*) + \mu_4 g_4(x^*) = 0 μ1g1(x∗)+μ2g2(x∗)+μ3g3(x∗)+μ4g4(x∗)=0,就只能有 μ 3 g 3 ( x ∗ ) + μ 4 g 4 ( x ∗ ) = 0 \mu_3 g_3(x^*) + \mu_4 g_4(x^*) = 0 μ3g3(x∗)+μ4g4(x∗)=0.
如果再定义一个拉格朗日函数:
L
(
x
,
μ
)
=
f
(
x
)
+
μ
1
g
1
(
x
)
+
μ
2
g
2
(
x
)
+
⋯
L(x, \mu)=f(x) + \mu_1 g_1(x) + \mu_2 g_2(x) + \cdots
L(x,μ)=f(x)+μ1g1(x)+μ2g2(x)+⋯
最后说明一下,以上所有都是局部极小值点的必要条件。据此求得的解不一定是局部极小值点(更别提全局了),原因是上图中我所画的等高线也许根本就不闭合,也就是说我们一直想要靠近的等高线中间的黑点压根就是个鞍点或者近似鞍点!