直观理解KKT条件

article/2025/9/14 1:24:05

直观理解KKT条件

等高线

从等高线讲起。如果我们要优化 f ( x , y ) = x 2 y f(x,y)=x^2y f(x,y)=x2y这个函数,给定约束为, x 2 + y 2 = 1 x^2+y^2=1 x2+y2=1,我们希望在满足约束的情况下使得f最大。也就是说,我们希望找到一个最“上方”的平面z,并且该平面要在可行域范围内。这个优化函数的可视化为:
在这里插入图片描述

为了更好的演示,我们一般使用等高线,等高线就是考虑俯视图:

在这里插入图片描述

在这里插入图片描述

显然,随着z越来越大,他离我们的圆越来越远,而如果我们缩小z,我们就能找到一个点,恰好与圆相切,这个值就是最优值:

在这里插入图片描述

梯度总是垂直于等高线

现在我们考虑目标函数 f ( x , y ) = x y f(x,y)=xy f(x,y)=xy,其梯度为 < ∂ f / ∂ x , ∂ f / ∂ y > = < y , x > <\partial f/\partial x,\partial f/\partial y>=<y,x> <f/x,f/y>=<y,x>。举个例子,我们选择一个点,比如 x = 2 , y = 1 x=2,y=1 x=2,y=1,此时梯度为 < 1 , 2 > <1,2> <1,2>,将这个向量画在图上,就得到下图白色的直线:

在这里插入图片描述

我们发现梯度总是垂直于等高线的,为什么?首先梯度的直观理解应该是,在这个平面上增长最快的方向,那如果我们考虑两个很相近的平面, z = 2 , z = 2.1 z=2,z=2.1 z=2,z=2.1:

在这里插入图片描述

那么因为两个平面相隔足够小,所以它们的登高线应该几乎是是平行的,于是,这个登高线增长最快的方向,显然就是往与它垂直的方向走(从2走到2.1的方向)。

KKT条件

对于优化问题
m a x x f ( x ) s . t . h j ( x ) = 0 , j = 1 , … , q g i ( x ) ≤ 0 , i = 1 , … , p max_{x}f(x) \\s.t.h_j(x)=0,j=1,\dots,q \\g_i(x)\leq 0,i=1,\dots,p maxxf(x)s.t.hj(x)=0,j=1,,qgi(x)0,i=1,,p
其KKT条件(必要条件)为,若 x ∗ x^* x是最优解则一定满足一下条件
∇ f ( x ∗ ) = ∑ j λ j ∇ h j ( x ∗ ) + ∑ i μ i ∇ g i ( x ∗ ) μ i ≥ 0 , i f g i ( x ∗ ) < 0 t h e n μ i = 0 \nabla f(x^*)=\sum_j\lambda_j\nabla h_j(x^*)+\sum_i\mu_i \nabla g_i(x^*) \\\mu_i\geq0,if~g_i(x^*)<0~then~\mu_i=0 f(x)=jλjhj(x)+iμigi(x)μi0,if gi(x)<0 then μi=0
这个条件,可以直接理解为拉格朗日法的推广,就是转换成无约束问题,然后那个无约束的目标函数的梯度等于0.

为了理解这个东西,我们来个简单的例子,
m a x f ( x , y ) = x 2 y s . t . x 2 + y 2 = 1 maxf(x,y)=x^2y \\s.t.x^2+y^2=1 maxf(x,y)=x2ys.t.x2+y2=1
其中 h ( x , y ) = x 2 + y 2 − 1 = 0 h(x,y)=x^2+y^2-1=0 h(x,y)=x2+y21=0。回想一下,我们之前提到,等高线与约束相切的时候是可以得到最优值的。那么这个相切怎么定义呢?实际上,利用梯度总是垂直于登高线的性质,两条线相切,那么在相切点上, f f f的梯度,以及约束 h h h的梯度,应该是平行的!这意味着:
∇ f ( x ∗ ) = λ ∇ h ( x ∗ ) \nabla f(x^*)=\lambda\nabla h(x^*) f(x)=λh(x)
这不就是KKT条件嘛!这个垂直的状态就如下图所示:

在这里插入图片描述

那个g的梯度其实就是那个约束的梯度,对于事实上,对于约束我们也可以画出类似的等高线图:

在这里插入图片描述

最后我们来算一下,这个平行的梯度在哪个位置:
f ( x , y ) = x 2 y h ( x , y ) = x 2 + y 2 − 1 x 2 + y 2 = 1 ∇ f = < 2 x y , x 2 > ∇ h = < 2 x , 2 y > \begin{array}{l} f( x,y) =x^{2} y\\ h( x,y) =x^{2} +y^{2} -1\\ x^{2} +y^{2} =1\\ \nabla f=< 2xy,x^{2} >\\ \nabla h=< 2x,2y > \end{array} f(x,y)=x2yh(x,y)=x2+y21x2+y2=1f=<2xy,x2>h=<2x,2y>
我们希望找到成比例的梯度:
∇ f = λ ∇ h ⟹ { 2 x y = 2 λ x x 2 = 2 λ y \begin{aligned} & \nabla f=\lambda \nabla h\\ \Longrightarrow & \begin{cases} 2xy=2\lambda x\\ x^{2} =2\lambda y \end{cases} \end{aligned} f=λh{2xy=2λxx2=2λy
联合等式:
2 x y = 2 λ x x 2 = 2 λ y x 2 + y 2 = 1 \begin{array}{l} 2xy=2\lambda x\\ x^{2} =2\lambda y\\ x^{2} +y^{2} =1 \end{array} 2xy=2λxx2=2λyx2+y2=1

我们可以求出 y 2 = 1 3 , x 2 = 2 3 \displaystyle y^{2} =\frac{1}{3} ,x^{2} =\frac{2}{3} y2=31,x2=32,将这个值带到目标函数里, x 2 y = 2 3 1 3 = 2 3 9 \displaystyle x^{2} y=\frac{2}{3}\sqrt{\frac{1}{3}} =\frac{2\sqrt{3}}{9} x2y=3231 =923 ,这个就是目标函数的最优解啦!到这里我们只考虑了等式约束,也就是 h = 0 h=0 h=0的情况,没有考虑 g j ( x ) ≤ 0 g_j(x)\le0 gj(x)0 的情况,其实,到这里已经很好理解了,如果最优值的点是落在 g j ( x ) < 0 g_j(x)<0 gj(x)<0处的话,那么我们是没有必要让这个 g j g_j gj的梯度也跟 f f f的梯度垂直,因为落在里面的时候在各个方向都可以任意的移动,并不会受到约束,所以我们如果 g j ( x ) < 0 g_j(x)<0 gj(x)<0,那么我们令其对应的 μ j = 0 \mu_j=0 μj=0

参考资料

Gradient and contour maps

Lagrange multipliers, using tangency to solve constrained optimization


http://chatgpt.dhexx.cn/article/3kB3MZeU.shtml

相关文章

机器学习中的数学基础 5

优化问题简介 最优化定义 最优化&#xff0c;是应用数学的一个分支。主要研究在特定情况下最大化或最小化某一特定函数或变量。 数学表示&#xff1a; Y Y Y 是 随机变量 X X X 的函数&#xff0c;求 y ^ f θ ( X ) \widehat{y} f_{\theta}(X) y ​fθ​(X) &#xff0…

微信小程序真机测试 Provisional headers are shown 问题解决办法

微信开发工具请求正常&#xff0c;真机调试出现 Provisional headers are shown 图片源自&#xff1a;https://blog.csdn.net/xyphf/article/details/90045286 网上大部分原因为ssl证书问题&#xff0c;使用以下2个ssl证书检测工具 1.https://www.myssl.cn/tools/check-serve…

JS提示框效果

提示框 js事件 //提示确认删除 <a href"javascript:if(confirm(确实要删除该内容吗?))locationhttp://www.google.com">弹出窗口</a> function tusi(txt, fun) {   $(.tusi).remove();    var div $(<div style"background: url(/images/…

图图片

示例图片啊

Sturts

Sturts是什么&#xff1f; Sturts是JSP模式2(MVC)基础上突出实现的一个框架&#xff0c;是使用JSPServlet组成&#xff1b; Sturts框架提供&#xff1a; 标记库&#xff1a;也没黑色记者可以控制&#xff1b;支持国际化处理如:JSP显示为中文&#xff0c;可以转换为英文等...;…

tupian

转载于:https://www.cnblogs.com/yanyiyi/p/8295315.html

Gwallet小百科 | 一文透析腾讯区块链技术

作为后互联网时代下的新产物,区块链技术有着巨大想象空间,依托可溯源、不可篡改、去中心化等特性,构建起技术与应用场景融合的新生态体系。 自2015年起,腾讯便开始关注区块链技术并进行自主研发,腾讯FIT的TrustSQL聚焦于底层开发平台的研发和定制化的区块链应用落地;腾讯…

Gerrit常见命令及最佳实践

概述 本文记录了笔者在使用Gerrit&#xff08;一种免费、开放源代码的代码审查软件&#xff09;过程中的一些微小的经验&#xff0c;在这里做个简单的分享。 克隆工程 git clone ssh://tusixx.xx.cn:29428/project-name 如果使用了Git代理&#xff0c;请将xx.xx.cn:29428换成代…

quart定时任务

在SSM项目里面使用quart实现定时任务每10秒插入一条数据,使用xml配置方式实现。 1.创建定时任务类 package com.tencent.tusi.test.quartzTest;import com.tencent.tusi.business.entity.TSystemUsers; import com.tencent.tusi.business.service.TSystemUsersService; impor…

腾讯安全携手北京方正公证处开启智慧司法之路,全面保护电子数据存证安全

4 月17 日,腾讯安全联合北京市方正公证处举办了网络战略合作暨领御区块链-北京方正公证取证平台上线发布会,宣布在“区块链+司法”领域建立合作,应用区块链技术深化电子数据存证服务。北京市方正公证处副主任杨和平、腾讯领御总经理申子熹、腾讯TUSI区块链安全实验室专家王强…

tutos

2010-10-08 这个软件有一个不好的感觉就是菜单比较灵活&#xff0c;对于刚使用的人来说就会感觉有些乱。 而且ui不够友好&#xff1b;图标比较少&#xff0c;不够直观。所以准备试一下dotproject&#xff0c;用了后发现dotproject在我当前使用的php5.3上根本不能启动&#xff0…

quart定时任务从数据库获取定时时间

在ssm项目里面实现定时任务从数据库获取定时时间 1.创建定时时间表 2.创建定时任务类 package com.tencent.tusi.test.quartzTest;import com.tencent.tusi.business.entity.TSystemUsers; import com.tencent.tusi.business.service.TSystemUsersService; import org.spring…

递推—双关系递推数列

题目描述&#xff1a; 算法思想&#xff1a; 首先定义三个“指针”i,p2&#xff0c;p5&#xff0c;计算出2*p21,和5*p5-1&#xff0c;进行比较&#xff0c;按从小到大的顺序排好&#xff08;有点像归并&#xff09; 实现代码&#xff1a; #include<iostream> #include&…

两类递推数列

此博客是抄论文的&#xff0c;你可以认为是转载的 1.线性递推数列 有限数列显然是线性递推数列。 无限数列 a i a_i ai​设其生成函数为 A ( x ) A(x) A(x) 那么如果 A ( x ) A(x) A(x)能被表示为 C ( x ) B ( x ) \frac {C(x)}{B(x)} B(x)C(x)​的形式&#xff0c;其中 B ( …