约束优化方法之拉格朗日乘子法与KKT条件_约束优化问题 拉格朗日乘子法-程序员宅基地

技术标签: python  

 

PS:以下来自人工智能头条公众号,支持向量机部分

约束问题分为等式约束和不等式约束,对于等式约束问题我们可以直接采用拉格朗日乘子法来解决,对于含有不等式约束的优化问题,可以转化为在满足 KKT 约束条件下应用拉格朗日乘子法求解.拉格朗日乘子法得到的解不一定是最优解,只有在函数是凸函数的条件下才能得到最优解.

 

一、关于拉格朗日乘子法和KKT条件

 

1)关于拉格朗日乘子法

 

首先来了解拉格朗日乘子法,那么为什么需要拉格朗日乘子法?记住,有拉格朗日乘子法的地方,必然是一个组合优化问题。那么带约束的优化问题很好说,就比如说下面这个:

 

 

 

这是一个带等式约束的优化问题,有目标值,有约束条件。那么想想假设没有约束条件这个问题是怎么求解的呢?是不是直接f对各个x求导等于0,,解x就可以了,可以看到没有约束的话,求导为0,那么各个x均为0吧,这样f=0了,最小。但是x都为0不满足约束条件呀,那么问题就来了。这里在说一点的是,为什么上面说求导为0就可以呢?理论上多数问题是可以的,但是有的问题不可以。如果求导为0一定可以的话,那么f一定是个凸优化问题,什么是凸的呢?像下面这个左图:

 

 

 

凸的就是开口朝一个方向(向上或向下)。更准确的数学关系就是:

 

 

 

注意的是这个条件是对函数的任意x取值。如果满足第一个就是开口向上的凸,第二个是开口向下的凸。可以看到对于凸问题,你去求导的话,是不是只有一个极点,那么他就是最优点,很合理。类似的看看上图右边这个图,很明显这个条件对任意的x取值不满足,有时满足第一个关系,有时满足第二个关系,对应上面的两处取法就是,所以这种问题就不行,再看看你去对它求导,会得到好几个极点。然而从图上可以看到,只有其中一个极点是最优解,其他的是局部最优解,那么当真实问题的时候你选择那个?说了半天要说啥呢,就是拉格朗日法是一定适合于凸问题的,不一定适合于其他问题,还好我们最终的问题是凸问题。

 

回头再来看看有约束的问题,既然有了约束不能直接求导,那么如果把约束去掉不就可以了吗?怎么去掉呢?这才需要拉格朗日方法。既然是等式约束,那么我们把这个约束乘一个系数加到目标函数中去,这样就相当于既考虑了原目标函数,也考虑了约束条件,比如上面那个函数,加进去就变为:
 

 

这里可以看到与相乘的部分都为0,所以的取值为全体实数。现在这个优化目标函数就没有约束条件了吧,既然如此,求法就简单了,分别对x求导等于0,如下:

 

 

 

把它在带到约束条件中去,可以看到,2个变量两个等式,可以求解,最终可以得到,这样再带回去求x就可以了。那么一个带等式约束的优化问题就通过拉格朗日乘子法完美的解决了。那么更高一层的,带有不等式的约束问题怎么办?那么就需要用更一般化的拉格朗日乘子法即KKT条件来解决这种问题了。

 

2)关于KKT条件

 

继续讨论关于带等式以及不等式的约束条件的凸函数优化。任何原始问题约束条件无非最多3种,等式约束,大于号约束,小于号约束,而这三种最终通过将约束方程化简化为两类:约束方程等于0和约束方程小于0。再举个简单的方程为例,假设原始约束条件为下列所示:

 

 

 

那么把约束条件变个样子:

 

 

 

为什么都变成等号与小于号,方便后面的,反正式子的关系没有发生任何变化就行了。

 

现在将约束拿到目标函数中去就变成:

 

 

 

那么KKT条件的定理是什么呢?就是如果一个优化问题在转变完后变成

 

 

 

其中g是不等式约束,h是等式约束(像上面那个只有不等式约束,也可能有等式约束)。那么KKT条件就是函数的最优值必定满足下面条件:

 

 

 

这三个式子前两个好理解,重点是第三个式子不好理解,因为我们知道在约束条件变完后,所有的g(x)<=0,且,然后求和还要为0,无非就是告诉你,要么某个不等式,要么其对应的。那么为什么KKT的条件是这样的呢?

 

假设有一个目标函数,以及它的约束条件,形象的画出来就如下:

 

 

 

假设就这么几个吧,最终约束是把自变量约束在一定范围,而函数是在这个范围内寻找最优解。函数开始也不知道该取哪一个值是吧,那就随便取一个,假设某一次取得自变量集合为x1,发现一看,不满足约束,然后再换呀换,换到了x2,发现可以了,但是这个时候函数值不是最优的,并且x2使得g1(x)与g2(x)等于0了,而g3(x)还是小于0。

 

这个时候,我们发现在x2的基础上再寻找一组更优解要靠谁呢?当然是要靠约束条件g1(x)与g2(x),因为他们等于0了,很极限呀,一不小心,走错了就不满足它们两了,这个时候我们会选择g1(x)与g2(x)的梯度方向往下走,这样才能最大程度的拜托g1(x)与g2(x)=0的命运,使得他们满足小于0的约束条件对不对。至于这个时候需不需要管g3(x)呢?正常来说管不管都可以,如果管了,也取g3在x2处的梯度的话,因为g3已经满足了小于0的条件,这个时候在取在x2处的梯度,你能保证它是往好的变了还是往差的变了?答案是都有可能。运气好,往好的变了,可以更快得到结果,运气不好,往差的变了,反而适得其反。

 

那么如果不管呢?因为g1(x)与g2(x)已经在边缘了,所以取它的梯度是一定会让目标函数变好的。综合来看,这个时候我们就不选g3。那么再往下走,假设到了自变量优化到了x3,这个时候发现g2(x)与g3(x)等于0,也就是走到边了,而g1(x)小于0,可变化的空间绰绰有余,那么这个时候举要取g2(x)与g3(x)的梯度方向作为变化的方向,而不用管g1(x)。那么一直这样走呀走,最终找到最优解。可以看到的是,上述如果g1(x)、g2(x)=0的话,我们是需要优化它的,又因为他们本身的条件是小于0的,所以最终的公式推导上表明,是要乘以一个正系数作为他们梯度增长的倍数,而那些不需要管的g(x)为了统一表示,这个时候可以将这个系数设置为0,那么这一项在这一次的优化中就没有了。那么把这两种综合起来就可以表示为

 

 

 

也即是某次的g(x)在为最优解起作用,那么它的系数值(可以)不为0。如果某次g(x)没有为下一次的最优解x的获得起到作用,那么它的系数就必须为0,这就是这个公式的含义。

 

比如上面例子的目标值与约束:

 

 

 

将约束提到函数中有:

 

 

 

此时分别对x1、x2求导数:

 

 

 

而我们还有一个条件就是,那么也就是:


 

 

这样我们就去讨论下,要么g=0,要么,这里两个g两个,这样我们就需要讨论四种情况,可能你会说,这是约束条件少的情况,那么如果有10个约束条件,这样就有10个g和10个,你去给我讨论?多少种组合,不知道,但是换个思路,我们非得去10个一起去讨论?机智的学者想到一种方法,考虑到这个条件,那么我两个两个讨论不就可以了,比如现在我就讨论7,8,让其他的不变,为什么选或者至少选两个讨论呢,因为这个式子求和为0,改变一个显然是不行的,那就改变两个,你增我就减,这样和可以为0。再问为什么不讨论3个呢?也可以,这不是麻烦嘛,一个俗语怎么说来着,三个和尚没水喝,假设你改变了一个,另外两个你说谁去减或者加使得和为0,还是两个都变化一点呢?不好说吧,自然界都是成双成对的才和谐,没有成三成四的(有的话也少)。

 

这里顺便提一下后面会介绍到的内容,就是实现SVM算法的SMO方法,在哪里,会有很多,那么人们怎么解决的呢,就是随便选择两个去变化,看看结果好的话,就接受,不好的话就舍弃在选择两个,如此反复,后面介绍。

 

 

 

可以看到像这种简单的讨论完以后就可以得到解了。


x1=110/101=1.08;x2=90/101=0.89,那么它得到结果对不对呢?这里因为函数简单,可以在matlab下画出来,同时约束条件也可以画出来,那么原问题以及它的约束面画出来就如下所示:

 

 

这是截取下来的符合约束要求的目标面
 

 

 

可以看到最优解确实就是上面我们求的那个解。既然简单的问题可以这样解,那么复杂一点的只需要简单化,照样可以解,至此KKT条件解这类约束性问题就是这样,它对后续的SVM求解最优解至关重要。

 

附上一个比较好的证明

博主个人公众号开通啦,平时主要分享一些机器学习、深度学习等的论文和方法,以及算法与数据结构、大厂经验贴等!欢迎大家关注,一起交流进步!

在这里插入图片描述

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HowardEmily/article/details/79949646

智能推荐

百度翻译错误提示 {‘error_code‘: ‘52003‘, ‘error_msg‘: ‘UNAUTHORIZED USER‘}_{"error_code":"52003","error_msg":"unauthorized us-程序员宅基地

文章浏览阅读8k次。这是我正确的代码:import hashlibimport requestsappid = 'xxx'salt = '1435660281'secretKey = 'xxx'queryWord = input('Please enter the English word that you want to translate into Chinese: ')signNum = appid + queryWord + salt + secretKeymd = hashlib.md5()md_{"error_code":"52003","error_msg":"unauthorized user"}

LR的一些常用函数_lr替换参数-程序员宅基地

文章浏览阅读4.3k次。收录一些常用函数有待日后慢慢玩: LR常用函数:lr_start_transaction 为性能分析标记事务的开始lr_end_transaction 为性能分析标记事务的结束lr_rendezvous 在 Vuser 脚本中设置集合点lr_think_time 暂停 Vuser 脚本中命令之间的执行 lr_end_sub_transaction 标记子_lr替换参数

Android开源项目分类汇总【二】-程序员宅基地

文章浏览阅读850次。项目地址:点击打开链接

通过sqoop将mysql数据导入到hive中进行计算示例_sqoop 同步mysql 到hive 实际应用-程序员宅基地

文章浏览阅读1.2k次。hive计算示例先将数据通过sqoop从mysql导入hive,在hive执行mysql的查询语句,得到与mysql一样的执行结果步骤:mysql数据准备account账号表detail收支数据表CREATE TABLE `account` ( `id` int(11) PRIMARY KEY AUTO_INCREMENT, `account` varchar(20),..._sqoop 同步mysql 到hive 实际应用

基于野火3.2寸LCD代码进行颜色识别与追踪(stm32f103zet6)_野火f103摄像头-程序员宅基地

文章浏览阅读502次,点赞8次,收藏8次。这个是基于野火Hal代码实现的功能,开发板运用的是野火STM32F103ZET6霸道V2,摄像头用的是ov7725,基础代码可以在野火官网找到。_野火f103摄像头

C语言--循环的嵌套-程序员宅基地

文章浏览阅读818次。c语言中循环的嵌套简介。

随便推点

LAMP环境 源码编译安装(Apache 2.4.52 +mysql 8.0.28+php 8.1.3)_lamp环境安装源码包-程序员宅基地

文章浏览阅读1.9k次。一、升级软件及Centos 内核1、yum clean all2、yum update -y#升级系统及内核3、cat /etc/redhat-release #升级后查看版本4、yum install lrzsz vim wget dnf -y #安装系统常用工具包二、安装LAMP 环境依赖包2.1yum groupinstall "Development tools" -yyum install pcre-devel expat-de..._lamp环境安装源码包

我的 Mac 终端配置(Mac OSX + iTerm2 + Zsh + Oh-My-Zsh)_安装menlo regularforpowerline.otf和monacoforpowerline-程序员宅基地

文章浏览阅读4.3w次,点赞9次,收藏47次。相关工具介绍iTerm2:Mac 下 Terminal 终端的替代品,拥有更多强大的功能,想了解更多请戳 iTerm2 官网;zsh:Linux 的一种 shell 外壳,和 bash 属于同类产品;Oh-My-Zsh:用来管理 zsh 的配置,同时还有很多社区贡献的主题配置以及好用的插件可供使用,了解更多请戳 Oh-My-Zsh 官网 ;配置方案总览iTerm2 终端工具;..._安装menlo regularforpowerline.otf和monacoforpowerline.otf两个字体

【考试记录】阿里云DevOps助理工程师(ACA)_下面哪一项是按照用户故事格式进行述的?-程序员宅基地

文章浏览阅读875次。一:考试总结这个考试之前花了60块钱买的,后来因为一直在弄实习和硕士论文,所以就么有考试,趁着有时间了,抓紧考完,也好对得起这60块钱。这部分的主要内容其实和读本科的时候学习的软件测试、读硕士时候的项目管理的课差不多的。内容基本都是学过的东西,不过这些东西好多都是自动测试的,感觉还是挺高级的,还是值得深入研究的。二:真题1.云计算模型中, “平台即服务”是指下面哪一项?A. laas B. Paas C. Saas D. Faas解析:平台即服务一般指PaaS2.下面哪一项..._下面哪一项是按照用户故事格式进行述的?

机器人抓取中物体定位算法概述_机器人抓取定位算法-程序员宅基地

文章浏览阅读1w次,点赞21次,收藏130次。1. 引言机器人抓取的首要任务,是确定要抓什么,也就是需要定位目标物体在输入数据中的位置。这个过程可以分为三个层次,分别为物体定位但不识别、物体检测、物体实例分割。物体定位但不识别是指获得目标物体的2D/3D范围但是不知道物体的类别;目标检测是指得到目标物体的2D/3D包围盒,同时识别目标物体的类别;目标实例分割提供目标物体所占有的像素或者点级别的区域信息,同时识别目标物体的类别。本文来自论文h..._机器人抓取定位算法

VMware vSphere虚拟化基础管理平台-程序员宅基地

文章浏览阅读849次,点赞34次,收藏24次。VMware公司成立于1998年,2003年存储厂商EMC以6.35亿美元收购了VMware;2015年10月,戴尔宣布以670亿美元收购EMC。VMware公司在2018年全年收入79.2亿美元。

DB2表空间的基本操作之修改表空间大小_alter tablespace resize-程序员宅基地

文章浏览阅读3.4k次。DB2表空间的基本操作之修改表空间大小_alter tablespace resize

推荐文章

热门文章

相关标签