从拉格朗日乘数法到KKT条件

从拉格朗日乘数法到KKT条件

最近看论文遇到了Karush–Kuhn–Tucker (KKT)条件,想搞清楚这是个什么东东,因此就把这个东西认真学习一下并且分享出来,希望对大家有用。学习KKT就不得不先学习一下拉格朗日乘数法,于是不得不重新翻出被记忆尘封的高数~~

1.拉格朗日乘数法

在数学最优问题中,拉格朗日乘数法是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。这种方法将一个有n 个变量与k 个约束条件的最优化问题转换为一个有n + k个变量的方程组的极值问题,其变量不受任何约束。这种方法引入了一种新的标量未知数,即拉格朗日乘数:约束方程的梯度(gradient)的线性组合里每个向量的系数。

以二元函数为例:

设给定二元函数

maxz=f(x,y)s.t.φ(x,y)=0max z=f(x,y)\\s.t. φ(x,y)=0maxz=f(x,y)s.t.φ(x,y)=0

为寻找z=f(x,y)在附加条件下的极值点,先做拉格朗日函数

F(x,y,λ)=f(x,y)+λφ(x,y)F(x,y,\lambda)=f(x,y)+\lambda φ(x,y)F(x,y,λ)=f(x,y)+λφ(x,y)

其中λ\lambdaλ为参数。令F(x,y,λ)F(x,y,λ)F(x,y,λ)xxxyyyλλλ的一阶偏导数等于零,即

Fx′=ƒx′(x,y)+λφx′(x,y)=0F'_x=ƒ'_x(x,y)+λφ'_x(x,y)=0 Fx=ƒx(x,y)+λφx(x,y)=0

Fy′=ƒy′(x,y)+λφy′(x,y)=0F'_y=ƒ'_y(x,y)+λφ'_y(x,y)=0Fy=ƒy(x,y)+λφy(x,y)=0

Fλ′=φ(x,y)=0F'_λ=φ(x,y)=0Fλ=φ(x,y)=0

由上述方程组解出x,yx,yx,yλλλ,如此求得的(x,y)(x,y)(x,y),就是函数z=ƒ(x,y)z=ƒ(x,y)z=ƒ(x,y)在附加条件φ(x,y)=0φ(x,y)=0φ(x,y)=0下的可能极值点。
若这样的点只有一个,由实际问题可直接确定此即所求的点。

下面这篇博客可以很好的帮助理解:

支持向量机(SVM)课前准备(一)–拉格朗日乘子法 - be·freedom - 博客园 (cnblogs.com)

2.KKT条件

先给出一个KKT条件的实例,我们优化的目标是:

minimizef(x)s.t.ki=0gj≤0,i,j=1,2,3,...minimize f(x)\\ s.t. k_i = 0\\ g_j\leq0,i,j=1,2,3,... minimizef(x)s.t.ki=0gj0,i,j=1,2,3,...
其中,KKT条件如下:

∇f+∑λiki+ωjgj=0.......(1)ki=0......(2)gj=0......(3)uj≥0......(4)ujgj=0......(5)\nabla f+\sum\lambda_ik_i+\omega_jg_j=0.......(1)\\ k_i=0......(2)\\ g_j=0......(3)\\ u_j\geq0......(4)\\ u_jg_j=0......(5)\\ f+λiki+ωjgj=0.......(1)ki=0......(2)gj=0......(3)uj0......(4)ujgj=0......(5)
公式1、2、3容易理解。

公式4、5,通过一个简单例子说明:

minimizef(x)s.t.g1(x)=a−x≤0g2(x)=x−b≤0minimize f(x)\\s.t. g_1(x)=a-x\leq0\\g_2(x)=x-b\leq0minimizef(x)s.t.g1(x)=ax0g2(x)=xb0

gig_igi添加一个 ≥0 的松弛变量a12,b12a_1^2,b_1^2a12,b12。得到
g1(x)=a−x+a12g2(x)=x−b+b12g_1(x)=a-x+a_1^2\\g_2(x)=x-b+b_1^2g1(x)=ax+a12g2(x)=xb+b12

由此,我们将不等式转化为等式约束,应用拉格朗日乘子法。

拉格朗日方程如下:

L(x1,a1,b1,u1,u2)=f(x)+u1(a−x+a12)+u2(x−b+b12)...(1)L(x_1,a_1,b_1,u_1,u_2)=f(x)+u_1(a-x+a_1^2)+u_2(x-b+b_1^2)...(1)L(x1,a1,b1,u1,u2)=f(x)+u1(ax+a12)+u2(xb+b12)...(1)
对方程求偏导如下:

{∂F∂x=∂f∂x+u1dg1dx+u2dg2dx=∂f∂x−u1+u2=0...(2)∂F∂u1=a−x+a12=g1+a12=0...(3)∂F∂u2=x−b+a12=g2+b12=0...(4)∂F∂a1=2u1a1=0...(5)∂F∂b1=2u2b1=0...(6),u1≥0,u2≥0\begin{cases}\frac {\partial F}{\partial x} =\frac{\partial f}{\partial x}+u_1\frac{{d}g_1}{{d}x}+u_2\frac {{d}g_2}{{d}x}=\frac{\partial f}{\partial x}-u_1+u_2=0...(2)\\\frac {\partial F}{\partial u_1}=a-x+a_1^2=g_1+a_1^2=0...(3)\\\frac {\partial F}{\partial u_2}=x-b+a_1^2=g_2+b_1^2=0...(4)\\\frac {\partial F}{\partial a_1}=2u_1a_1=0...(5)\\\frac {\partial F}{\partial b_1}=2u_2b_1=0...(6),u_1\geq0,u_2\geq0\end{cases}xF=xf+u1dxdg1+u2dxdg2=xfu1+u2=0...(2)u1F=ax+a12=g1+a12=0...(3)u2F=xb+a12=g2+b12=0...(4)a1F=2u1a1=0...(5)b1F=2u2b1=0...(6),u10,u20

那么现在开始解方程组

首先考虑 式5,

u1=0,a1≠0u1=0,a1≠0u1=0a1=0时,即g1g_1g1f(x)f(x)f(x)无约束

u1≠0,a1=0u1≠0,a1=0u1=0a1=0时,即 g1g_1g1f(x)f(x)f(x)有约束,且根据式3可知,g1g_1g1 也等于0。

式6同理。注意,不等式对f(x)有约束效果时,不等式等于零。

此时,方程组简化成

{∂f∂x+u1dg1dx+u2dg2dx=0u1g1(x)=0,u2g2(x)=0,μ1≥0,μ1≥0.\begin{cases}\frac{\partial f}{\partial x}+u_1\frac{{d}g_1}{{d}x}+u_2\frac {{d}g_2}{{d}x}=0\\u_1g_1(x)=0,u_2g_2(x)=0,\\\mu_1\geq0,\mu_1\geq0.\end{cases}xf+u1dxdg1+u2dxdg2=0u1g1(x)=0,u2g2(x)=0,μ10,μ10.

推广,对于多个不等式约束,有

minf(x)s.t.gj(x)≤0(j=1,2,...,m)min f(x)\\s.t. g_j(x)\leq0(j=1,2,...,m)minf(x)s.t.gj(x)0(j=1,2,...,m)

我们有

{∂f(x∗)∂x+∑j=1mujdgj(x∗)dx∗=0ujgj(x∗)=0(j=1,2,...,m),μj≥0(j=1,2,...m).\begin{cases}\frac{\partial f(x^*)}{\partial x}+\sum_{j=1}^{m}u_j\frac{{d}g_j(x^*)}{{d}x^*}=0\\u_jg_j(x^*)=0(j=1,2,...,m),\\\mu_j\geq0(j=1,2,...m).\end{cases}xf(x)+j=1mujdxdgj(x)=0ujgj(x)=0(j=1,2,...,m),μj0(j=1,2,...m).

上述不等式称之为KKT条件,与本文一开始略有不同的是没有了等式的约束(不用在此纠结,我们关心的是不等式的约束问题),其中uju_juj称之为KKT乘子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

26.0.0-alpha1_WildFly 8.0.0.Alpha1的发布和一些历史

26.0.0-alpha1自从我们发布WildFly 8.0.0.Alpha1版本以来, 已经过去了大约2周。 该下载位于WildFly下载页面上 。 我敢肯定,你们中的许多人可能会想知道WildFly是什么,而其中一些知道它是什么的人可能不会知道已经发布了。 我将尝试回答其中的…

单机最大负载_分布式高可靠之负载均衡,今天看了你肯定会

到目前为止,我已经为你介绍了分布式起源、分布式协调与同步、分布式资源管理与负载调度、分布式计算技术、分布式通信技术和分布式数据存储。可以说,掌握了这些内容,基本上就掌握了分布式的关键技术。然而,只有可靠的分布式系统才…

【强化学习】一文带你理清强化学习

整理不易,希望留个赞再走哦!! 学习路线 这个图描述的比较清晰,蓝框里是整个强化学习的一些概念基础了,橙色是一些学习方法,可以针对性的选择一些,废话不多说,接下来就按照这个路线图…

了解Java缓冲池

了解Java缓冲池 缓冲池空间位于垃圾收集器管理的内存之外。 这是分配本地堆外内存的一种方法。 使用缓冲池有什么好处? 为了回答这个问题,让我们首先了解什么是字节缓冲区。 字节缓冲区 非直接缓冲区 ByteBuffer类附带了java.nio包。 它允许我们分配直接…

java 循环拼接字符串用分号隔开_Java 8中字符串拼接新姿势:StringJoiner

在为什么阿里巴巴不建议在for循环中使用””进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点。其中还有一个重要的拼接方式我没有介绍,那就是Java 8中提供的StringJoiner ,本文就来介绍一下这个字符串拼接…

module ‘tensorflow_core.compat.v1‘ has no attribute ‘contrib‘问题的完美解决

问题描述&#xff1a; Instructions for updating: Use keras.layers.Dense instead. Traceback (most recent call last):File "run_cnn.py", line 200, in <module>model TextCNN(config)File "D:\MY DATA\学习资料\研究生\深度学习\text-classificat…

doctrine find的对象转换成数组_「ES6基础」Array数组的新方法(上)

在日常工作中我们经常会与数组打交道&#xff0c;因此需要熟练掌握数组操作的相关方法&#xff0c;ES6中关于数组的操作&#xff0c;又给我们带来了哪些惊喜呢&#xff0c;Array数组操作又添加了哪些新方法&#xff1f;本篇文章将从以下几个方面进行介绍&#xff1a;Array.from…

No module named ‘__main__.common‘; ‘__main__‘ is not a package

今天在调通代码时遇到一个难缠的bug,源代码如下&#xff1a; from .common import _FLOATX, _EPSILON结果报错&#xff1a; 问题原因&#xff1a; 也就是说&#xff0c;这是相对导入&#xff0c;只有在父模块在当前运行环境中被导入过才能用。 这揭示了报错的缘由&#xff0…

spring 异步返回结果_使用Spring Integration聚合异步结果

spring 异步返回结果嗨&#xff0c;我遇到了一个问题&#xff0c;该问题使用Spring Integration解决方案非常好。 很多时候&#xff0c;我们需要一种将消息分发到未知数量的目的地的方案。 为此&#xff0c;我们使用主题方法。 但是有时&#xff0c;我们还希望从收到消息的所有…

ValueError( Shape(4, ?, 1, 20) and () are incompatible

报错&#xff1a; 解决&#xff1a; 将文件中的return tf.concat(axis, tensors) 改为&#xff1a;return tf.concat(tensors, axis)问题完美解决

adadelta算法_对C++用户比较友好的机器学习算法库

由于疫情影响&#xff0c;这几天在家学习编程&#xff0c;整理了基于c语言的机器学习算法库。目前大部分机器学习库都是面向pyhton语言的&#xff0c;尽管很python包的底层语言是c&#xff0c;但c用户使用起来很麻烦&#xff0c;这里整理了一些对c比较优化的机器学习算法库&…

不解析,使用解析对象

将面向对象的后端与外部系统集成的传统方式是通过数据传输对象 &#xff0c;这些对象在外出之前先序列化为JSON&#xff0c;然后在返回时反序列化。 这种方法很流行&#xff0c;而且是错误的。 序列化部分应该由打印机代替&#xff0c;我在前面已经解释过。 这是我对反序列化的…

yaml报错TypeError: load() missing 1 required positional argument: ‘Loader‘

添加一下命令即可&#xff1a; 我的操作&#xff1a; return yaml.load(config)改为 return yaml.full_load(config)问题完美解决

3d制作中需要注意的问题_珠宝首饰工艺篇-戒指3D造型设计制作注意要点

1、戒指的常规手寸数据和戒指外围周长计算公式应用参考如下图&#xff1a;戒指手寸内直径大小说明图1、戒指手寸规格有14号、15号、16号、17号、18号、19号、20号、&#xff0c;但是从开发角度来说比较常见规格是17号18号19号这几种规格比较多&#xff0c;那我们电脑3D建模的时…

微信推送封面尺寸_连封面图都搞不明白,做什么新时代的新媒体人?

嘿&#xff0c;胖友们大家好呀&#xff0c;我是三儿。又是精(bu)神(xiang)满(shang)满(ban)的周一啦&#xff0c;胖友们准备好开始迎接新的一周了吗&#xff01;为了迎接这个崭新的周一&#xff0c;三儿特意为你们准备的一些实用的小工具教学&#xff0c;帮助你们快速的完成工作…

2021总结

去年做了复盘&#xff0c;感觉很良好。以后希望把这个每年复盘一次的习惯能够好好坚持下去&#xff0c;再加上年初的规划就更好啦&#xff01;2021年&#xff0c;比起2020来说&#xff0c;就相对平静了很多&#xff0c;没经历过大风大浪&#xff0c;心智还是有所变化&#xff0…

java queue使用_使用Java使用Amazon Simple Queue Service

java queue使用Amazon Simple Queue Service或SQS是Amazon Webservice堆栈提供的高度可扩展的托管消息队列。 Amazon SQS可用于完全解耦系统内不同组件的操作&#xff0c;这些组件否则将交换数据以执行独立的任务。 Amazon SQS还可以帮助我们保存在应用程序关闭或组件之一不可用…

latex学习篇【一】论文中的图片技巧QA

第一篇论文总算收尾了&#xff0c;整理一波latex写论文的Q&A。 LATEX专栏第一篇&#xff1a;在Latex模板中引入各种图片的问题。 工具&#xff1a;overleaf网站&#xff1a;https://www.overleaf.com/project/60e9ceb20f8db14efa31dc80在overleaf上面插入图片什么形式最好…

配置HTTPS以与Servlet一起使用

要配置Java EE应用程序以通过HTTPS进行通信&#xff0c;需要在web.xml文件中使用几行XML。 web.xml文件位于项目的WEB-INF目录中&#xff0c;通常在IDE生成Java EE Web应用程序时自动创建。 如果不是&#xff0c;您可以自己创建它。 HTTPS的动机 为Web应用程序配置安全连接的…

LATEX学习篇【二】:论文中的公式技巧QA

写论文免不了写好多好多公式&#xff0c;众所周知啊latex的公式是很难编辑的&#xff0c;有没有简便一点的办法呢&#xff1f;有的&#xff0c;让我们继续读下去吧&#xff01; 写公式时会用到的一些奇奇怪怪的符号大全&#xff08;来自百度&#xff09; 2. 写公式好用的工具…