深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

from:https://blog.csdn.net/xianlingmao/article/details/7919597

在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值;如果含有不等式约束,可以应用KKT条件去求取。当然,这两个方法求得的结果只是必要条件,只有当是凸函数的情况下,才能保证是充分必要条件。KKT条件是拉格朗日乘子法的泛化。之前学习的时候,只知道直接应用两个方法,但是却不知道为什么拉格朗日乘子法(Lagrange Multiplier) 和KKT条件能够起作用,为什么要这样去求取最优值呢?

本文将首先把什么是拉格朗日乘子法(Lagrange Multiplier) 和KKT条件叙述一下;然后开始分别谈谈为什么要这样求最优值。

一. 拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

通常我们需要求解的最优化问题有如下几类:

(i) 无约束优化问题,可以写为:

                                      min f(x);  

(ii) 有等式约束的优化问题,可以写为:

                                       min f(x), 

                                            s.t. h_i(x) = 0; i =1, ..., n 

(iii) 有不等式约束的优化问题,可以写为:

                                      min f(x), 

                                            s.t. g_i(x) <= 0; i =1, ..., n

                                                  h_j(x) = 0; j =1, ..., m

对于第(i)类的优化问题,常常使用的方法就是Fermat定理,即使用求取f(x)的导数,然后令其为零,可以求得候选最优值,再在这些候选值中验证;如果是凸函数,可以保证是最优解。

对于第(ii)类的优化问题,常常使用的方法就是拉格朗日乘子法(Lagrange Multiplier) ,即把等式约束h_i(x)用一个系数与f(x)写为一个式子,称为拉格朗日函数,而系数称为拉格朗日乘子。通过拉格朗日函数对各个变量求导,令其为零,可以求得候选值集合,然后验证求得最优值。

对于第(iii)类的优化问题,常常使用的方法就是KKT条件。同样地,我们把所有的等式、不等式约束与f(x)写为一个式子,也叫拉格朗日函数,系数也称拉格朗日乘子,通过一些条件,可以求出最优值的必要条件,这个条件称为KKT条件。

(a) 拉格朗日乘子法(Lagrange Multiplier)

对于等式约束,我们可以通过一个拉格朗日系数a 把等式约束和目标函数组合成为一个式子L(a, x) = f(x) + a*h(x), 这里把a和h(x)视为向量形式,a是横向量,h(x)为列向量,之所以这么写,完全是因为csdn很难写数学公式,只能将就了.....。

然后求取最优值,可以通过对L(a,x)对各个参数求导取零,联立等式进行求取,这个在高等数学里面有讲,但是没有讲为什么这么做就可以,在后面,将简要介绍其思想。

(b) KKT条件

对于含有不等式约束的优化问题,如何求取最优值呢?常用的方法是KKT条件,同样地,把所有的不等式约束、等式约束和目标函数全部写为一个式子L(a, b, x)= f(x) + a*g(x)+b*h(x),KKT条件是说最优值必须满足以下条件:

1. L(a, b, x)对x求导为零;

2. h(x) =0;

3. a*g(x) = 0;

求取这三个等式之后就能得到候选最优值。其中第三个式子非常有趣,因为g(x)<=0,如果要满足这个等式,必须a=0或者g(x)=0. 这是SVM的很多重要性质的来源,如支持向量的概念。

二. 为什么拉格朗日乘子法(Lagrange Multiplier) 和KKT条件能够得到最优值?

为什么要这么求能得到最优值?先说拉格朗日乘子法,设想我们的目标函数z = f(x), x是向量, z取不同的值,相当于可以投影在x构成的平面(曲面)上,即成为等高线,如下图,目标函数是f(x, y),这里x是标量,虚线是等高线,现在假设我们的约束g(x)=0,x是向量,在x构成的平面或者曲面上是一条曲线,假设g(x)与等高线相交,交点就是同时满足等式约束条件和目标函数的可行域的值,但肯定不是最优值,因为相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优值,如下图所示,即等高线和目标函数的曲线在该点的法向量必须有相同方向,所以最优值必须满足:f(x)的梯度 = a* g(x)的梯度,a是常数,表示左右两边同向。这个等式就是L(a,x)对参数求导的结果。(上述描述,我不知道描述清楚没,如果与我物理位置很近的话,直接找我,我当面讲好理解一些,注:下图来自wiki)。

而KKT条件是满足强对偶条件的优化问题的必要条件,可以这样理解:我们要求min f(x), L(a, b, x) = f(x) + a*g(x) + b*h(x),a>=0,我们可以把f(x)写为:max_{a,b} L(a,b,x),为什么呢?因为h(x)=0, g(x)<=0,现在是取L(a,b,x)的最大值,a*g(x)是<=0,所以L(a,b,x)只有在a*g(x) = 0的情况下才能取得最大值,否则,就不满足约束条件,因此max_{a,b} L(a,b,x)在满足约束条件的情况下就是f(x),因此我们的目标函数可以写为 min_x max_{a,b} L(a,b,x)。如果用对偶表达式: max_{a,b} min_x  L(a,b,x),由于我们的优化是满足强对偶的(强对偶就是说对偶式子的最优值是等于原问题的最优值的),所以在取得最优值x0的条件下,它满足 f(x0) = max_{a,b} min_x  L(a,b,x) = min_x max_{a,b} L(a,b,x) =f(x0),我们来看看中间两个式子发生了什么事情:

 f(x0) = max_{a,b} min_x  L(a,b,x) =  max_{a,b} min_x f(x) + a*g(x) + b*h(x) =  max_{a,b} f(x0)+a*g(x0)+b*h(x0) = f(x0)

可以看到上述加黑的地方本质上是说 min_x f(x) + a*g(x) + b*h(x) 在x0取得了最小值,用fermat定理,即是说对于函数 f(x) + a*g(x) + b*h(x),求取导数要等于零,即

f(x)的梯度+a*g(x)的梯度+ b*h(x)的梯度 = 0

这就是kkt条件中第一个条件:L(a, b, x)对x求导为零。

而之前说明过,a*g(x) = 0,这时kkt条件的第3个条件,当然已知的条件h(x)=0必须被满足,所有上述说明,满足强对偶条件的优化问题的最优值都必须满足KKT条件,即上述说明的三个条件。可以把KKT条件视为是拉格朗日乘子法的泛化。
--------------------- 
作者:xianlingmao 
来源:CSDN 
原文:https://blog.csdn.net/xianlingmao/article/details/7919597?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

相关文章

android一些若干回调测试

1.activity&#xff1a;onAttachedToWindow在onResume后回调 2.onCreate和onResume调用间隔为29ms, onAttachedToWindow和OnResume相差11ms, viewTreeObserver:OnGloballayout和onAttachedtoWindow相差19ms 注:以上的测试时间间隔不能保证精确相同&#xff0c;但是可以从中看出…

Kinect深度图与摄像头RGB的标定与配准(转载文章)

作者原文地址&#xff1a;http://blog.csdn.net/aichipmunk/article/details/9264703 自从有了Kinect&#xff0c;根据深度图提取前景就非常方便了。因此出现了很多虚拟现实、视频融合等应用。但是&#xff0c;Kinect自身的RGB摄像头分辨率有限&#xff0c;清晰度也不及一些专业…

台北到淡水版Firefox无法播放视频

台北到淡水版的Firefox所有的视频都无法播放&#xff0c;禁用了各种插件也还是没法播放&#xff0c;最后才确定是SWF的问题&#xff0c;大家有同样问题的&#xff0c;可以下载我的放到SWF文件夹下&#xff0c;目录结构如下图&#xff1a; ​Firefox的SWF下载地址1 ​Firefox的S…

最详细、最完整的相机标定讲解

相机标定详解 最近做项目要用到标定&#xff0c;因为是小白&#xff0c;很多东西都不懂&#xff0c;于是查了一堆的博客&#xff0c;但没有一个博客能让我完全能看明白整个过程&#xff0c;绝大多数都讲的不全面&#xff0c;因此自己总结了一篇博客&#xff0c;给自己理一下思…

时间日志和缺陷日志

项目计划总结&#xff1a; 日期&&任务 听课 编写程序 阅读相关书籍 网上查找资料 日总计 周一 2 2 1 1 6 周二 2 1 3 周三 1 2 2 5 周四 2 2 1 5 周五 4 1 1 6 周六 3 1 1 4 周日 4 2 2 周总计 4 …

卷积与反卷积动图

各种卷积与反卷积动态图 反卷积: 详细文字链接&#xff1a;https://www.zhihu.com/question/43609045/answer/132235276(该链接中并没有下面的动态图) Deconvolution大致可以分为以下几个方面&#xff1a;&#xff08;1&#xff09;unsupervised learning&#xff0c;其实就…

ASP.NET-权限管理五张表

ASP.NET 权限管理五张表权限管理的表&#xff08;5张表&#xff09;每个表里面必有的一些信息序号名称 字段 类型 主键默认值是否为空备注1 用户ID ID INT 是 null 否用户ID2用户名称UserNamevarchar(100)否null否用户名称3用户密码UserPasswordvarchar(20)否null否用…

神经网络CNN解释

from&#xff1a;https://blog.csdn.net/ruiyiin/article/details/77113973 这篇文章原地址为An Intuitive Explanation of Convolutional Neural Networks&#xff0c;卷积神经网络的讲解非常通俗易懂。 什么是卷积神经网络&#xff1f;为什么它们很重要&#xff1f; 卷积神经…

线条的属性

1.lineCap"butt“ /"round" /"square" 只能用于线段的结尾处 不能用于线段的衔接处 2.lineJoin:线条与线条相交时的形态 miter(default)/ bevel (斜接&#xff09;/round&#xff08;圆接&#xff09; 1.后绘制的图形&#xff0c;如果与前绘制的图形区…

pcl里面使用KdTree来搜索

from:https://blog.csdn.net/qq_25491201/article/details/51135054 下面这个教程我们将学会怎么用KdTree找一个特殊点附近的K个最近邻&#xff0c;然后我们也将复习怎么通过一个特殊的半径来找里面所有的近邻。 一个k-d树&#xff0c;或者k维的树是一个计算机科学里面的数据…

Linux英文全称

su&#xff1a;Swith user 切换用户&#xff0c;切换到root用户cat: Concatenate 串联uname: Unix name 系统名称df: Disk free 空余硬盘du: Disk usage 硬盘使用率chown: Change owner 改变所有者chgrp: Change group 改变用户组ps&#xff1a;Process Status 进程状态ta…

caffe caffe.cpp 程序入口分析

from&#xff1a;https://blog.csdn.net/u014114990/article/details/47747025 caffe.cpp 程序入口分析&#xff0c; &#xff08;1&#xff09;main()函数中&#xff0c;输入的train&#xff0c;test&#xff0c;device_query&#xff0c;time。 通过下面两行进入程序。 …

php文件加密

1.在线加密 网址&#xff1a;http://www.phpjm.net/encode.html 本人测试过还可以&#xff0c;就是纯加密&#xff0c;没有解密。 转载于:https://www.cnblogs.com/wuheng1991/p/5332617.html

树莓派3 编译驱动

分为本地编译和交叉编译&#xff0c;主要是Makefile的写法&#xff1a; 本地编译&#xff1a; obj-m : bcm2835-i2s.o KDIR : /lib/modules/$(shell uname -r)/build PWD : $(shell pwd) all:make -C $(KDIR) M$(PWD) modules clean:rm *.o *.ko *.mod.c modules.order Module.…

caffe common 程序分析 类中定义类

caffe中 有 common.hpp 和common.cpp // The main singleton of Caffe class and encapsulates the boost and CUDA random number // generation function, providing a unified interface. caffe的singleton 类&#xff0c; 封装boost和cuda等操作。 提供一个统一的接口&am…

相机标定究竟在标定什么?

https://mp.weixin.qq.com/s/sWpVgwXmPvIEbObXvo1HRg

SpringMVC+Shiro权限管理

SpringMVCShiro权限管理 什么是权限呢&#xff1f;举个简单的例子&#xff1a; 我有一个论坛&#xff0c;注册的用户分为normal用户&#xff0c;manager用户。对论坛的帖子的操作有这些&#xff1a;添加&#xff0c;删除&#xff0c;更新&#xff0c;查看&#xff0c;回复我们规…

Caffe源码解析1:Blob

from:https://www.cnblogs.com/louyihang-loves-baiyan/p/5149628.html 转载请注明出处&#xff0c;楼燚(y)航的blog&#xff0c;http://www.cnblogs.com/louyihang-loves-baiyan/ 首先看到的是Blob这个类&#xff0c;Blob是作为Caffe中数据流通的一个基本类&#xff0c;网络…

学后感

今天上了构建之法&#xff0c;我加深了对软件工程的了解&#xff0c;也明白了单元测试和回归测试对软件开发的重要性&#xff0c;然而在软件开发的过程中&#xff0c; 一个团队是需要一定的流程来管理开发活动&#xff0c;每个工程师在软件生命周期所做的工作也应该有一个流程&…

Caffe源码解析2:SycedMem

from:https://www.cnblogs.com/louyihang-loves-baiyan/p/5150554.html 转载请注明出处&#xff0c;楼燚(y)航的blog&#xff0c;http://www.cnblogs.com/louyihang loves baiyan/ 看到SyncedMem就知道&#xff0c;这是在做内存同步的操作。这类个类的代码比较少&#xff0c;…