装载:关于拉格朗日乘子法与KKT条件
作者:@wzyer
拉格朗日乘子法无疑是最优化理论中最重要的一个方法。但是现在网上并没有很好的完整介绍整个方法的文章。我这里尝试详细介绍一下这方面的有关问题,插入自己的一些理解,希望能够对大家有帮助。本文分为两个部分:第一部分是数学上的定义以及公式上的推导;第二部分主要是一些常用方法的直观解释。初学者可以先看第二部分,但是第二部分会用到第一部分中的一些结论。请读者自行选择。
拉格朗日乘子法的数学基础
共轭函数
对于一个函数f:Rn→R(不要求是凸函数),我们可以定义它的共轭函数f⋆:Rn→R为:
按照上面的定义,这个函数值是有可能取到∞的,这并不是我们希望的结果。因此我们规定,使函数值有界的y的取值范围就是共轭函数的定义域。
下面是一些常用函数的对偶函数:
- 线性函数f(x)=ax+b的共轭函数是f∗(a)=−b,定义域是单点a。
- 负对数f(x)=−logx的共轭函数是f∗(y)=−log(−y)−1,定义域是y<0。
- 指数函数f(x)=ex的共轭函数是f∗(y)=ylogy−y,定义域是y≥0。
- 负熵函数f(x)=xlogx的共轭函数是f∗(y)=ey−1,定义域是R
- 倒数函数f(x)=1/x的共轭函数是f∗(y)=−2(−y)1/2,定义域数y≤0。
- 任意范数f(x)=∥x∥的共轭函数是
f∗(y)={0∞∥y∥∗≤1otherwise
其中∥y∥∗是原范数∥x∥的对偶范数。 - 范数平方f(x)=(1/2)∥x∥2的共轭函数是f∗(y)=(1/2)∥y∥2∗,其中∥y∥∗是原范数∥x∥的对偶范数。
- 二次型f(x)=(1/2)xTQx的共轭函数是f∗(y)=(1/2)yTQ−1y
这个函数的几何意义可以通过下图解释:
随着y的变化,yTx代表了倾斜程度不同的过原点的超平面(上图中就是一条直线)。yTx−f(x)就是这条线到函数f(x)的距离。这个距离显然在图中的黑点处取到最大值,也就是最小上界。共轭函数就是描述这个最小上界随着y的变化所变化的情况。
很容易看出不管原函数的凹凸性如何,共轭函数一定是凸函数(可以由凸函数性质看出,这里不细说)。
拉格朗日函数
对于一个标准形式的优化问题:
这里我们并没有假定这个问题是凸的。
拉格朗日函数就是将目标函数和约束进行有权重的求和:
这个函数不仅仅是x的函数,还是拉格朗日乘子向量λ和ν的函数。其中λi被称为对应于不等约束fi(x)≤0的拉格朗日乘子;νi被称为对应于相等约束hi(x)=0的拉格朗日乘子。
拉格朗日对偶函数
拉格朗日对偶函数,或者直接叫对偶函数,被定义为拉格朗日函数在x自由变化时所取到的最小值:
很显然,这是一个关于拉格朗日乘子向量λ,ν的函数。可以通过凸函数的性质发现无论原优化问题的凹凸性,这个对偶函数始终是凹的。
目标函数最优值的下界
假设原始问题目标函数最优值是p⋆。如果令λ≥0,则对于任何一个原问题的可行解x~,都有fi(x~)≤0,hi(x~)=0。我们很容易发现:
因此,很容易得到下面的不等式:
所以,我们可以得到:
但是需要注意的是,由于g(λ,ν)可能取到−∞,此时这个下界没有任何意义。所以我们下面研究的问题都是在g函数不会取到无穷这样的定义域内进行的。
拉格朗日对偶函数与共轭函数的联系
线性约束的问题的拉格朗日对偶函数可以通过对共轭函数来表达出来。考虑如下线性约束问题:
他的拉格朗日对偶函数为:
对偶函数的定义域由共轭函数f⋆的定义域所确定:
拉格朗日对偶问题
由于我们知道g(λ,ν)是一定不会大于原问题的最优解的,我们可以通过构造一个如下的最优化问题来寻找原始优化问题的最优下界:
我们用(λ⋆,ν⋆)来代表这个问题找到最优时候的对应的拉格朗日乘子的值。
由于我们知道拉格朗日对偶函数g(λ,ν)一定是凹的(不论原始优化问题凹凸性如何),因此我们知道这个拉格朗日对偶问题一定是个凸优化问题。
如何显式的表述拉格朗日对偶问题
上面形式的拉格朗日对偶问题很难在实际中求解。通常情况下为了求解,我们需要一些更明确的条件来把拉格朗日对偶问题表述出来。一般我们如下几种方法。
由定义消去下确界
如果拉格朗日函数能够简单的求得下确界。我们就可以直接消去原始问题的变量,得到明确的对偶问题。
例如对于:
拉格朗日函数为L(x,ν)=xTx+νT(Ax−b)。这显然是个凸函数,我们可以直接求极值,令其导数为0:
可得x=−(1/2)ATν,带入拉格朗日函数:
可以看到,这个问题的对偶问题变成了一个无约束的优化问题:
隐式求解约束
有时候拉格朗日对偶函数可以取到无穷。为了得到有意义的解,我们可以求出对偶可行域,即让g(λ,ν)=infx∈DL(x,λ,ν)>−∞成立所需要的约束。然后可得对偶问题。
例如对于标准线性规划问题:
拉格朗日函数为:
应用下确界运算,可以得到:
则可以得到对偶问题为:
也可以把这个问题写成这样的形式;
共轭函数法
由于线性约束的问题和共轭函数有密切的关系,很多时候我们可以利用共轭函数来求解对偶问题的约束。
例如最大化熵问题:
我们知道,负熵函数f(x)=xlogx的共轭函数是f∗(y)=ey−1,定义域是R。可以看出上面f0的共轭函数是:
定义域是Rn。
由线性约束问题的对偶函数与共轭函数的关系可得:
这里ai是A矩阵的第i列。
所以,这个问题也转化为了一个无约束的优化问题:
弱对偶
如果我们把拉格朗日对偶问题的最优值记为d⋆。相对于原始问题的最优值p⋆,我们有如下关系:
这个关系就被称为弱对偶关系。
弱对偶关系即使在d⋆或p⋆为无穷的时候也是成立的。如果原始问题是无界的,即p⋆=−∞,则d⋆=−∞,即拉格朗日对偶问题是不可行的。相应的,如果对偶问题无界,即d⋆=∞,则p⋆=∞,即原始问题是不可行的。
我们把原始问题和对偶问题最优值之间的差值p⋆−d⋆称为最有对偶间隙(optimal duality gap)。显然,这个值总是正的。
强对偶
如果原始问题和对偶问题的最优值相等,即:
我们就称这种关系为强对偶关系。在这种情况下,我们仅仅从对偶问题中就可以知道原始问题的最优解。
通常情况下强对偶关系并不成立。但是如果原始问题是凸的,即对于这样的形式:
有f0,…,fm都是凸的,那么我们通常能够得到强对偶关系。但是这种情况下也存在两个问题都无可行解的情况,此时强对偶关系不成立。为了确保我们一定能得到强对偶关系,除了原始问题是凸的之外,我们还需要更多的限制条件。
一种经常被用到的条件是
- Slator条件:存在一点x∈relint D (D的相对内点集)满足
fi(x)<0,i=1,…,m,Ax=b
这样的点也可称之为 严格可行 的。
可以证明,如果原问题是凸的,并且Slator条件成立的情况下,强对偶条件一定成立。
如果有一些不等约束是仿射的,Slator条件还可以被弱化。假设前k个不等约束是仿射的,则Slator条件可以被转化为:
- Refined Slater’s 条件:存在一点x∈relint D (D的相对内点集)满足
fi(x)≤0,i=1,…,k,fi(x)<0,i=k+1,…,mAx=b
即仿射的不等约束不必取严格小于。
此外,满足 Slater’s 条件(或 Refined Slater’s 条件) 不仅意味着(凸优化问题)强对偶性的成立,而且也表示当d⋆>−∞时,存在一组对偶变量(λ⋆,ν⋆)满足g(λ⋆,ν⋆)=d⋆=p⋆,即此时对偶最优值是可取到的。
原始问题与对偶问题的关系
- 原始问题和对偶问题都是可行的,则弱对偶关系成立,强对偶关系不一定成立。
- 原始问题和对偶问题都不可行,则弱对偶关系依然成立,但强对偶关系不成立。
- 关于原始问题和对偶问题之间的解的关系,可以整理如下表格:
对偶问题\原始问题 | 可行 | 无下界 | 不可行 |
---|---|---|---|
可行 | √ | × | × |
无上界 | × | × | √ |
不可行 | × | √ | √ |
最优条件
现在假设我们现在已经知道了原始问题和对偶问题的最优值相等(强对偶)。x∗是原始问题的最优解,(λ∗,ν∗)是对偶问题的最优解。我们可以写出如下的式子:
强对偶存在的情况下,上面的不等号都要取到等号。
这里有两个不等号,第三行取到等号的必要条件是:
这个条件会出现在下面的KKT条件中。
而第四行取到等号的条件是:
这个条件可以得到下面的互补松弛(Complementary slackness)条件。
互补松弛条件
上面得到:
由于这个求和的每一项都小于等于0,所以我们可以得到:
这就是著名的互补松弛条件。由这个条件我们可以得到如下结论:
- 如果拉格朗日不等约束乘子λ∗i>0,则该乘子对应的约束条件严格取等号,即fi(x∗)=0。
- 如果某不等约束严格取不等号,即fi(x∗)<0,则该约束对应的乘子一定为零,即λ∗i=0。
互补松弛条件通常代表着一定物理意义。其中的乘子常常是一个明确的状态指示器。代表着约束的有效与否。
KKT条件
一般问题的KKT条件
将上面讨论的条件结合起来,我们就得到了著名的KKT条件:
这里前两行条件是原始问题的约束,第三行是拉格朗日函数的要求,第四行是互补松弛条件,最后一行是对拉格朗日函数取极值时候带来的一个必要条件。
容易看出,由于最后一个条件的限制,对于任意优化问题,只要x∗和(λ∗,ν∗)是原始问题和对偶问题的最优解,则其一定满足KKT条件。即KKT条件是一组解成为最优解的必要条件。
凸问题的KKT条件
如果原始问题是凸的,则KKT条件也是充分的。这是因为KKT的最后一个条件在对拉格朗日函数取下确界的时候成为了充要条件。这时候我们有如下结论:
- 如果一个凸优化问题有可微的目标函数和约束,并且满足Slater条件,则KKT条件是取得最优的充要条件:Slater条件保证了最优对偶间隙为零并且最优点可以取到;在此基础上x是最优当且仅当(x,λ,ν)满足KKT条件。
KKT条件的用途
KKT条件在优化问题中有重要意义。它可以用于如下方面:
- 有时候可以直接从KKT条件里得到最优的解析解。
- 等式约束的优化问题,可以通过KKT条件转化为无约束方程求零点问题。
- 有不等式约束的优化问题,可以使用KKT条件来简化,帮助求解。
拉格朗日乘数法的形象化解读
上面的论述都是拉格朗日乘子法的数学基础。但是上面的公式无法解释一个问题:为何要如此构造拉格朗日函数?其背后的意义是什么?这一部分就试图来回答这个问题。
等式约束的拉格朗日乘子法
考虑这个决策变量是二维平面内点(x,y)的优化问题:
我们在二维平面内画出两个函数的图像。由于缺少第三维,我们使用等高线来表示目标函数f(x,y)的函数值。如下图:
图中画出了两条f(x,y)的等高线,黑色箭头则是等高线上的梯度∇f(x,y)。从梯度的方向上来看,显然有d1>d2。绿色的线是约束,也就是说,只要正好落在这条绿线上的点才可能是满足要求的点。如果没有这条约束,f(x,y)的最小值应该会落在最小那圈等高线内部的某一点上。而现在加上了约束,最小值点应该在哪里呢?显然应该是在f(x,y)的等高线正好和约束线相切的位置。如果我们对约束也求梯度∇g(x,y),则其梯度如图中绿色箭头所示。很容易看出来,要想让目标函数f(x,y)的等高线和约束相切,则他们切点的梯度一定在一条直线上,即:
其中ν可以是任何实数。
因此,我们通过观察可以得到优化取到最小值的条件:
最为对比,我们使用前一部分推导的KKT条件来直接写出这个问题的KKT条件:
可以看到这两个条件几乎完全一样,唯一的不同就是ν的符号。由于我们并没有对ν的符号有任何限制,所以是否取负号对于这个问题没有任何影响。
仍然需要提醒的是,这些条件对于一般问题只是取到最优的必要条件。但是对于大多数凸问题来说,这个条件也是充分条件。具体情况请看上面公式推导。
含有不等约束的情况
上面仅仅考虑了等式约束的情况。那么含有不等式的约束情况下,λ乘子又有什么意义呢?
我们还是考虑一个和上面问题类似的问题:
我们同样在平面内画下这个问题的图像:
这个和之前的图不同之处在于:约束决定的可行区域由一条直线变成了一段带状区域。这个带状区域由两条边界g(x,y)=c和g(x,y)=d来决定。
大家立刻可以从图中发现,这个问题的最优解和之前的等式约束情况下没有任何区别。也就是依然满足条件:
我们来看看不等约束的KKT条件怎么说:
这两个条件看起来一点也不像。。。。。。好吧,让我们来仔细分析一下这个KKT条件。
这里的核心问题是互补松弛条件。我们上面已经说过了由于互补松弛条件的存在,λ乘子是一个非常明确的状态指示器。如果不等约束能够取到等号,则λ乘子是个正数;如果不等约束只能取严格不等,则λ乘子必然为0。我们也很容易从图里看出来,要想取到最优,我们首先需要:
这时候我们有:
把这样两个关系带入KKT条件,可以得到:
果然和我们之前的最优点条件一模一样了。
由上面的问题可以看出来,不等约束的拉格朗日乘子λ确实就是一个状态指示器,它起到了一个开关的作用。当不等约束能够取到等号的时候,开关打开(λ>0),λ乘子的作用就和前面等式约束乘子ν的作用一样,使目标函数的梯度和约束的梯度保持线性关系;而不等约束无法取到等号的时候,开关关闭(λ=0),λ乘子就带着对应的约束从梯度运算中消失了,并不去影响目标函数的梯度。
参考文献
- Stephen Boyd, Lieven Vandenberghe. Convex Optimization.
- 维基百科.拉格朗日乘数.
作者:@wzyer
原文出处:http://www.moozhi.com/topic/show/54a8a261c555c08b3d59d996
装载:关于拉格朗日乘子法与KKT条件的更多相关文章
- 拉格朗日乘子法与KKT条件 && SVM中为什么要用对偶问题
参考链接: 拉格朗日乘子法和KKT条件 SVM为什么要从原始问题变为对偶问题来求解 为什么要用对偶问题 写在SVM之前——凸优化与对偶问题 1. 拉格朗日乘子法与KKT条件 2. SVM 为什么要从原 ...
- 关于拉格朗日乘子法与KKT条件
关于拉格朗日乘子法与KKT条件 关于拉格朗日乘子法与KKT条件 目录 拉格朗日乘子法的数学基础 共轭函数 拉格朗日函数 拉格朗日对偶函数 目标函数最优值的下界 拉格朗日对偶函数与共轭函数的联系 拉 ...
- 【机器学习之数学】03 有约束的非线性优化问题——拉格朗日乘子法、KKT条件、投影法
目录 1 将有约束问题转化为无约束问题 1.1 拉格朗日法 1.1.1 KKT条件 1.1.2 拉格朗日法更新方程 1.1.3 凸优化问题下的拉格朗日法 1.2 罚函数法 2 对梯度算法进行修改,使其 ...
- 机器学习——支持向量机(SVM)之拉格朗日乘子法,KKT条件以及简化版SMO算法分析
SVM有很多实现,现在只关注其中最流行的一种实现,即序列最小优化(Sequential Minimal Optimization,SMO)算法,然后介绍如何使用一种核函数(kernel)的方式将SVM ...
- 约束优化方法之拉格朗日乘子法与KKT条件
引言 本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可以直接应用拉格朗日乘子法去求取最优值:对于含有不等式约束的优化问题,可以转化为在满足 KKT ...
- 【365】拉格朗日乘子法与KKT条件说明
参考:知乎回答 - 通过山头形象描述 参考:马同学 - 如何理解拉格朗日乘子法? 参考: 马同学 - 如何理解拉格朗日乘子法和KKT条件? 参考:拉格朗日乘数 - Wikipedia 自己总结的规律 ...
- 拉格朗日乘子法以及KKT条件
拉格朗日乘子法是一种优化算法,主要用来解决约束优化问题.他的主要思想是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有n+k个变量的无约束优化问题. 其中,利用拉格朗日乘子法 ...
- 拉格朗日乘子法与KKT条件
拉格朗日乘子法 \[min \quad f = 2x_1^2+3x_2^2+7x_3^2 \\s.t. \quad 2x_1+x_2 = 1 \\ \quad \quad \quad 2x_2+3x_ ...
- 机器学习——最优化问题:拉格朗日乘子法、KKT条件以及对偶问题
1 前言 拉格朗日乘子法(Lagrange Multiplier) 和 KKT(Karush-Kuhn-Tucker) 条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等 ...
随机推荐
- POJ 1202 Family 概率,DP,高精 难度:2
http://poj.org/problem?id=1202 难度集中在输出格式上,因为输出格式所以是高精度 递推式: 血缘肯定只有从双亲传到儿子的,所以,设f,m为双亲,son为儿子,p[i][j] ...
- 使用read write 读写socket
一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用. 由此网络程序里最基本的函数就是read和write函数了. 写函数: ssize_t write(int fd, con ...
- Android在Eclipse上的环境配置
哈哈,首先转一个:https://my.oschina.net/fusxian/blog/293935 谢谢分享者 1.android SDK安装出现Failed to fetch URL http: ...
- eval函数的缺陷
1.今天在维护产品目录的时候,发现了个奇葩的事情,eval函数转换出错,查验之后发现字符串中如果加入了换行符就会导致该问题. 2.测试程序 info.file [{productDirIds:'1', ...
- source 命令与“ . ”点命令
http://wenku.baidu.com/link?url=r3_WjJwQziv5wooIiatYbIMotPHcop56ZyakNGFor5DgJLQD-orAwVmOwp80RAnJ3tRD ...
- ZooKeeper启动过程2:FastLeaderElection
前一篇文章中说到,启动ZooKeeper集群时,需要分别启动集群中的各个节点,各节点以QuorumPeer的形式启动,最后到达startLeaderElection和lookForLeader. 先说 ...
- Linux内核-链表
linux内核链表的定义(定义了双向链表,不含数据域) 定义在 /linux-source-3.13.0/include/linux/types.h 头文件中. struct list_head { ...
- php中遍历二维数组并以表格的形式输出
一.索引数组 <?php //使用array()语句结构将联系人列表中所有数据声明为一个二维数组,默认下标是顺序数字索引 $contact1 = array( //定义外层数组 array(1, ...
- C++数据结构之Queue(队列)
Queue,队列,和我们日常生活中的队列是同样的规则,"先进先出",从尾入,从首出. Queue,主要有三种基本操作,append(添加元素至队尾):serve(队首元素出列):r ...
- hdu 2060
ps:天了噜...WA了无数次...结果就是粗心了...先是YES和Yes的错,再后来是运算的错....想死 题意:先给出N,接下来是N个数据,给出a,b,c,分别是桌面剩下的球数,p的分数,q的分数 ...