如何通俗的理解KKT条件

本文通过实例解释了无约束、带等式约束和带不等式约束的优化问题,重点介绍了KKT条件在不等式约束优化中的必要性。通过等高线和梯度的概念,展示了KKT乘子如何帮助找到局部极小值点,并说明了在某些情况下不起作用的不等式约束如何影响KKT条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习笔记,仅供参考,有错必纠
转载自:彭一洋


最近也在看关于优化的东西,题主在问题补充里问了好多,我暂且以二维空间 [公式] 举例,从简单的无约束的优化(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 \} {xh(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. μ 1 ≥ 0 , μ 2 ≥ 0 \mu_1 \ge 0, \mu_2 \ge 0 μ10,μ20;
  2. ∇ 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)+μ1g1(x)+μ2g2(x)=0;
  3. μ 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. μ 1 ≥ 0 , μ 2 ≥ 0 , μ 3 ≥ 0 \mu_1 \ge 0, \mu_2 \ge 0, \mu_3 \ge 0 μ10,μ20,μ30;
  2. ∇ 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)+μ1g1(x)+μ2g2(x)+μ3g3(x)=0;

条件2中的 μ 3 ∇ g 3 ( x ∗ ) \mu_3 \nabla g_3(x^*) μ3g3(x)这一项让我们很苦恼啊, g 3 ( x ∗ ) g_3(x^*) g3(x)的绿色箭头跟我们的红色箭头没关系。要是能令 μ 3 = 0 \mu_3 =0 μ3=0就好了。加上条件3:

  1. μ 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)+

最后说明一下,以上所有都是局部极小值点的必要条件。据此求得的解不一定是局部极小值点(更别提全局了),原因是上图中我所画的等高线也许根本就不闭合,也就是说我们一直想要靠近的等高线中间的黑点压根就是个鞍点或者近似鞍点!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值