带约束优化问题 拉格朗日 对偶问题 KKT条件
每次看到这个,总不是很理解为什么要这么做?
为什么首先转为无约束问题(这个相对好理解一点,因为容易处理)
为什么拉格朗日函数无约束问题要转变成求拉格朗日对偶问题求解?
如果一开始的约束问题f(x)不是凸函数,那怎么办?
忘各位了解的可以将这里的流程和原理可以详细解答一下,看过前面有些人解答问题将问题的前世今生都讲解一遍,很清晰。这个问题一直都让我有点混乱,希望能在各位帮助下了解更清楚
补充一个:带惩罚的优化问题是不是跟这一样是通过求对偶问题还求解的
1.最优分离超平面
2. kernel映射
3. 拉格朗日对偶
这三个部分中的每一个都有一套理论,最优分离超平面就不说了,这就是SVM的根基,kernel并不是SVM独有的(只是在SVM里比较出名),kernel有一套核方法,主要是为了解决映射到高维空间后引起的维数灾难问题。我们知道,SVM只靠最优分离超平面的话只能实现线性分割,而使用了kernel映射后就可以实现非线性分割了,在这个转换过程中,拉格朗日对偶起了中间桥梁的作用。拉格朗日对偶也不是SVM特有的,它属于凸优化的内容。在SVM的很多教程中都跳过了拉格朗日对偶的讲解,下面我们将进一步讨论拉格朗日对偶这个问题(并不完全讲,也只是讲个大概)
在此之前,我们要再重申一遍什么是凸函数

跟我念:凸凸凸凸凸凸凸凸凸凸凸凸凸凸
(威廉王子:我都躺这么远了还TM中枪?!)
此外,我们还需要讲清楚一些前置内容,首先:什么是优化问题?
所谓优化问题,也就是要实现
其中f0称为目标函数,x=(x1,⋯,xn)称为优化向量,fi称为约束函数,bi称为约束上限或者约束边界。
也就是说,我们要再满足约束下的x中寻找一个x∗,使得f0(x∗)最小,这时候x∗称为最优解。
所谓凸优化,也就是当目标函数和约束函数都为凸函数时候的的优化问题,也就是说,对于任意的i=0,⋯,m,在α+β=1,α≥0,β≥0时,都有
这也是凸函数的定义
线性规划也可以看做是凸优化,因为在线性规划里面,f0,⋯,fm都是线性函数,也就满足
显然符合凸优化的定义,所以凸优化可以看做是线性规划的推广。
如果从投资的角度上看,凸优化就相当于在生产需求(f1,⋯,fm)的约束下让生产成本(f0)最小化
如果从机器学习的角度上看,凸优化就相当于在一堆模型中,选取最符合观测现象以及先验知识的模型(f1,⋯,fm),使得泛化误差(f0)最小,这也体现机器学习其本质:经验风险最小化
如果一个问题是凸优化问题,那很好办,因为现在凸优化有很多技术,或许可以这么说,只要一个问题是凸优化问题,那么我们一定能解决它。但是,判断一个问题是不是凸优化,或者判断一个问题能否可以转换成凸优化问题并不是一件简单的事情。
如果一个问题不是凸的呢?遗憾的是目前还没有一种方法能很好地解决非凸问题,对于非凸问题,我们的方法一般有:
1.局部优化:在局部优化里,我们降低要求,不再寻找一个全局的最优解,只需要寻找一个能让我们接受的结果即可,比如我们常用的梯度下降就是一种局部优化策略。局部优化的优点很明显,只需要可导就行了,并不要求是凸的(想想梯度下降是不是这样:D),但是局部优化的缺点也明显,就是极度依赖于初始值的选择,初始值很大程度决定了你最后的结果,此外就是我们无法知道局部最优与全局最优究竟相差了多远。比如在深度神经网络里,采用BP策略单纯的使用梯度下降是无法训练的,因为局部最优解太多,而Hinton所谓的无监督预训练,其实就是为了让网络权值能够初始化到一个较好的点,使得BP策略能够奏效。
2. 全局优化:如果参数规模不大,或者全局最优解的意义重大(比如你要是找不到全局最优那么你女朋友就和你分手),那么使用穷举也是一种策略
3. 随机化方法:其实这个应该归属到局部优化里面,因为随机化方法也是一种局部最优。比如模拟退火、遗传等,这些方法克服了纯梯度方法的一些缺点。
然而,实际问题中有很多都是非凸的,那么我们为什么还要研究凸问题呢?
因为非凸问题往往借鉴了凸问题的一些思想,反正我不管,今天我们就是来讲凸问题的(╯‵□′)╯︵┻━┻
==================================================
下面这段可以先跳过,反正我也讲不清楚
更详细的内容请参考《Convex optimization》,一切以它的说法为准
==================================================
我们之前说过,判断一个问题是不是凸优化,或者判断一个问题能否可以转换成凸优化问题并不是一件简单的事情,但是有一种可以方便地建立凸性的方法:
如果一个问题能将其表示为一族仿射函数的逐点上确界,那么这个问题就是一个凸问题
也就是
有几个陌生的名词,没关系,我们一个一个地来解释
首先是仿射
如果f是一个线性函数和一个常数的和,也就是f(x)=Ax+b的形式,其中A∈Rm×n,b∈Rm,那么f:Rn→Rm是仿射的
为了讲什么是逐点上确界,需要先讲什么是逐点最大函数,也就是
我们称f为逐点最大函数,如果fi是凸的,那么f也是凸的
接下来就是所谓的逐点上确界
若y∈A,f(x,y)关于x都是凸的,那么函数
关于x也是凸的,这个也就是逐点上确界了
上面看不懂也没关系,反正我也解释不清楚,记住一条就行了:“凸问题”等价于“一族仿射函数的逐点上确界”
==================================================
从这里开始看
==================================================
然后就是今天的主题了,什么是拉格朗日对偶?
首先是拉格朗日原问题(强调强调强调,一会我们还会回来看这里的,这里我们将原问题记为p∗):
注意:这里我们要求fi 和hi的定义域都是非空的,此时的定义域记为D,但是这里我们并不要求原问题是凸的
拉格朗日对偶的中心思想是在目标函数中考虑上约束条件,也就是引入拉格朗日算子,得到增广目标函数,也就是拉格朗日函数
也就是说,我们现在优化的对象除了x,还加上了m个λi,p个μi,这时候定义域变成了D×Rm×Rp
我们定义拉格朗日函数的对偶函数为
也就是说,我们定义对偶函数为拉格朗日函数的下界,那么问题来了,如果拉格朗日函数没有下界呢?没关系,这时候我们就让对偶函数为−∞即可。
由于对偶函数g(λ,μ)是关于(λ,μ)仿射函数的逐点下确界,所以
不管原问题是不是凸的,其对偶函数一定凹的
(参考前面的讨论,注意前面讨论的是凸性,但是凸性与凹性换几个地方就行了)
引入对偶,使得原问题的求解变成了讨论“求原问题的下界”。为什么呢?因为对于λ≥0,都有g(λ,μ)≤p∗,简单验证一下:
如果一个x^是可行的解,那么fi(x^)≤0,hi(x^)=0,由于λ≥0,从而
第一项为负数,第二项为0,所以
因而
即每个可行点,都有g(λ,μ)≤f0(x^)
上面的公式好枯燥,给大家看一张图就明白了

在图中,实线代表的是目标函数f0,而虚线代表的是约束条件f1,彩色的点线代表λ取不同值的时候对应的拉格朗日函数L(x,λ)=f0(x)+λf1(x)(本来有十条的,但是最近撸太多手抖实在画不动了.........画5条大家也能看的懂吧....),我们可以看到,在约束条件可行(f1(x)≤0)的区间内,拉格朗日函数都是小于目标函数的。我们可以看到,在可行区间内,目标函数的最值将在x = -0.46处取得p∗=1.54
下面我们来看一看对偶函数的图像:

其中实线代表的是对偶函数,而虚线代表的是目标函数f0的最优值p∗=1.54,从图像中,我们可以发现,对偶函数确实是原问题的一个下界,此外,我们也可以发现:在原问题中,目标函数f0,约束条件f1都不是凸的,但对偶函数是凹的
为了更好地理解,我们再举一个例子,一个优化问题:
这个问题是等式约束,很简单,我们用高数上面的知识就可以解决了,我们取拉格朗日函数
然后求导,令其为0
求得
这时候目标函数最小,好,现在我们来看看如果讨论对偶会怎么样
首先对偶函数为
代入最优解x=−12ATμ
我们会发现,对偶函数是二次凹函数,并且有
拉格朗日对偶,通过引入参数λ,μ,可以让原问题得到一个与λ,μ相关的下界(这时候跟x没什么关系了)。但现在的问题就是,究竟哪个下界才是最好的?因为下界有很多个,所以应该选取哪个下界?
答案是:最大的下界是最好的,这个解我们记为d∗
从上面的图,大家也可以看到,对偶函数的最大值最接近原问题的最优解,由于对偶问题总存在这么一个等式d∗≤p∗(即使原问题不是凸的这个不等式也成立),所以,p∗−d∗也被称为最优对偶间隙
举一个对偶的例子,比如线性规划,其标准式为
我们取拉格朗日函数
则对偶函数为
由于线性函数只有为常数的时候才有下界,所以g(λ,μ)又可以写为
强烈抗议:没法进行公式堆叠啊!!!!!!!!!
上面是对偶函数,我们说过,对偶函数刻画的是一个下界,哪个下界是最好的呢?最大的是最好的,所以,对偶问题可以表述为maxg(λ,μ)
也就是
上面这个问题还可以进一步缩写为
这就是线性规划标准形式的对偶问题,这种表述也称之为不等式形式线性规划
好,我们我们从不等式形式线性规划出发,也就是现在我们的原问题是:
(注:跟上边的不等式形式符号变了,但表达没变)
我们取拉格朗日函数
那么对偶函数就是
同样,由于线性函数只有恒为常数的时候才有下界,因此对偶函数可以写为
强烈抗议:没法进行公式堆叠啊!!!!!!!!!
还是那句话,哪个下界是最好的呢?最大的是最好的,所以maxg(λ)可以表述为
你看,这又回到标准型的线性规划了。
在拉格朗日对偶之后,d∗≤p∗总是成立的,这个我们也叫做弱对偶性,如果说我们能够使得d∗=p∗,那么这时候我们求解对偶问题就相当于求解原问题了,大家看前面的图,对偶问题显然不等价于原问题的。那么什么时候对偶问题等价于原问题呢(这种情况叫做强对偶)?一般情况下,如果原问题是凸的,那么这个问题具有强对偶,也就是对偶问题的最优解等于原问题的最优解(不绝对,也有例外的)。
如何判定一个问题是否具有强对偶性呢?一个判据是Slater条件,这里不讲,另一个就是大家所知到的KKT条件了。如果说一个问题,它满足KKT条件,那么这个问题就具有强对偶性,求取对偶问题就相当于求取原问题。但如果不满足KKT条件呢?那就不能这么做了。
而恰好,SVM问题里面都是满足KKT条件的,所以SVM里面求取对偶解就相当于求取原问题的解。那么我们为什么要求它的对偶呢?因为kernel,通过对偶之后得到一个向量内积的形式,也就是xTx这种形式,而这种形式是kernel所擅长处理的。如果没有对偶,就没有后面的kernel映射,SVM也实现不了非线性分割。
当然,这里有一个问题我没有讲,为什么满足KKT条件就具有强对偶性?这个问题啊,你问我
带约束优化问题 拉格朗日 对偶问题 KKT条件的更多相关文章
- 文本分类学习 (九)SVM入门之拉格朗日和KKT条件
上一篇说到SVM需要求出一个最小的||w|| 以得到最大的几何间隔. 求一个最小的||w|| 我们通常使用 来代替||w||,我们去求解 ||w||2 的最小值.然后在这里我们还忽略了一个条件,那就是 ...
- 约束优化方法之拉格朗日乘子法与KKT条件
引言 本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可以直接应用拉格朗日乘子法去求取最优值:对于含有不等式约束的优化问题,可以转化为在满足 KKT ...
- 拉格朗日乘子法 - KKT条件 - 对偶问题
接下来准备写支持向量机,然而支持向量机和其他算法相比牵涉较多的数学知识,其中首当其冲的就是标题中的拉格朗日乘子法.KKT条件和对偶问题,所以本篇先作个铺垫. 大部分机器学习算法最后都可归结为最优化问题 ...
- 支持向量机(SVM)必备概念(凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件、KKT条件)
SVM目前被认为是最好的现成的分类器,SVM整个原理的推导过程也很是复杂啊,其中涉及到很多概念,如:凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件.KKT条件还有 ...
- 04-拉格朗日对偶问题和KKT条件
04-拉格朗日对偶问题和KKT条件 目录 一.拉格朗日对偶函数 二.拉格朗日对偶问题 三.强弱对偶的几何解释 四.鞍点解释 4.1 鞍点的基础定义 4.2 极大极小不等式和鞍点性质 五.最优性条件与 ...
- 从对偶问题到KKT条件
转自:http://xuehy.github.io/%E4%BC%98%E5%8C%96/2014/04/13/KKT/ 从对偶问题到KKT条件 Apr 13, 2014 对偶问题(Duality) ...
- 机器学习——最优化问题:拉格朗日乘子法、KKT条件以及对偶问题
1 前言 拉格朗日乘子法(Lagrange Multiplier) 和 KKT(Karush-Kuhn-Tucker) 条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等 ...
- 拉格朗日乘法与KKT条件
问题的引出 给定一个函数\(f\),以及一堆约束函数\(g_1,g_2,...,g_m\)和\(h_1,h_2,...,h_l\).带约束的优化问题可以表示为 \[ \min_{X \in R^n}f ...
- 拉格朗日乘子法与KKT条件 && SVM中为什么要用对偶问题
参考链接: 拉格朗日乘子法和KKT条件 SVM为什么要从原始问题变为对偶问题来求解 为什么要用对偶问题 写在SVM之前——凸优化与对偶问题 1. 拉格朗日乘子法与KKT条件 2. SVM 为什么要从原 ...
随机推荐
- PHP的MySQL扩展:MySQL数据库概述
来源:http://www.ido321.com/1023.html 一.SQL:结构化查询语言 SQL(Structured Query Language)是高级的非过程化变成语言,专门用于查询和修 ...
- document.getElementsByClassName方法的重写(OVERRIDE)
众所周知,对于IE8以下的浏览器(IE8居然是WIN7预装的)没有document.getElementsByClassName,网上也有很多重写的方法,以下是本人在项目中所使用的方法 documen ...
- cocos2d-x 不能在android真机debug的问题
最近在做cocos2d-x开发的时候,发现在android真机上不能调试C++代码,显示如下警告信息 Ignoring packet error, continuing... warning: unr ...
- Chapter3:字符串、向量和数组
C++11新特性:范围for(range for) for (declaration: expression) statement vector和数组都是对象的集合,而引用不是对象. vector对象 ...
- 七牛云存储官方接口PHP版本
PHP SDKv6 此 SDK 适用于 PHP 5.1.0 及其以上版本.基于 七牛云存储官方API 构建.使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上. ...
- bzoj 2959 长跑(LCT+BCC+并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2959 [题意] n个点,提供操作:连边,修改点权,查询自定义边的方向后起点a终点b能经 ...
- Tkinter教程之Text篇(3)
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811348 '''Tkinter教程之Text篇(3)''''''14.自定义tag的两个内置 ...
- 新手指导:教你如何查看识别hadoop是32位还是64位
问题导读: 1.从哪些地方可以识别hadoop是32位还是64位?2.hadoop本地库在什么位置? 来源:about云 本文链接:http://www.aboutyun.com/thread-127 ...
- 通过实例让你真正明白mapreduce---填空式、分布(分割)编程
本文链接:http://www.aboutyun.com/thread-8303-1-1.html 问题导读: 1.如何在讲mapreduce函数中的字符串等信息,输出到eclipse控制台?2.除了 ...
- FrameWork 建模时查询项的usage
§ Identifier:代表被用于分组或汇总与其相关的Fact数据的列.也代表一个索引列.还代表日期或时间列.§ Fact:代表一个包含数值数据可被分组或汇总的列,例如,产品成本.§ Attribu ...