转自 http://www.moozhi.com/topic/show/54a8a261c555c08b3d59d996
拉格朗日乘子法无疑是最优化理论中最重要的一个方法。但是现在网上并没有很好的完整介绍整个方法的文章。我这里尝试详细介绍一下这方面的有关问题,插入自己的一些理解,希望能够对大家有帮助。本文分为两个部分:第一部分是数学上的定义以及公式上的推导;第二部分主要是一些常用方法的直观解释。初学者可以先看第二部分,但是第二部分会用到第一部分中的一些结论。请读者自行选择。
拉格朗日乘子法的数学基础
共轭函数
对于一个函数
f:Rn→R
(不要求是凸函数),我们可以定义它的共轭函数
f⋆:Rn→R
为:
下面是一些常用函数的对偶函数:
- 线性函数 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
自由变化时所取到的最小值:
目标函数最优值的下界
假设原始问题目标函数最优值是
p⋆
。如果令
λ≥0
,则对于任何一个原问题的可行解
x~
,都有
fi(x~)≤0,hi(x~)=0
。我们很容易发现:
下面讨论里有人问为什么要求 λ≥0 。其实从这一段的推导就可以看出,这是为了让 ∑mi=1λifi(x~) 这一项不会大于0。否则,就无法构造满足那么多不等关系的拉格朗日对偶函数了。
拉格朗日对偶函数与共轭函数的联系
线性约束的问题的拉格朗日对偶函数可以通过对共轭函数来表达出来。考虑如下线性约束问题:
拉格朗日对偶问题
由于我们知道
g(λ,ν)
是一定不会大于原问题的最优解的,我们可以通过构造一个如下的最优化问题来寻找原始优化问题的最优下界:
由于我们知道拉格朗日对偶函数 g(λ,ν) 一定是凹的(不论原始优化问题凹凸性如何),因此我们知道这个拉格朗日对偶问题一定是个凸优化问题。
如何显式的表述拉格朗日对偶问题
上面形式的拉格朗日对偶问题很难在实际中求解。通常情况下为了求解,我们需要一些更明确的条件来把拉格朗日对偶问题表述出来。一般我们如下几种方法。
由定义消去下确界
如果拉格朗日函数能够简单的求得下确界。我们就可以直接消去原始问题的变量,得到明确的对偶问题。
例如对于:
隐式求解约束
有时候拉格朗日对偶函数可以取到无穷。为了得到有意义的解,我们可以求出对偶可行域,即让 g(λ,ν)=infx∈DL(x,λ,ν)>−∞ 成立所需要的约束。然后可得对偶问题。
例如对于标准线性规划问题:
共轭函数法
由于线性约束的问题和共轭函数有密切的关系,很多时候我们可以利用共轭函数来求解对偶问题的约束。
例如最大化熵问题:
由线性约束问题的对偶函数与共轭函数的关系可得:
所以,这个问题也转化为了一个无约束的优化问题:
弱对偶
如果我们把拉格朗日对偶问题的最优值记为
d⋆
。相对于原始问题的最优值
p⋆
,我们有如下关系:
弱对偶关系即使在 d⋆ 或 p⋆ 为无穷的时候也是成立的。如果原始问题是无界的,即 p⋆=−∞ ,则 d⋆=−∞ ,即拉格朗日对偶问题是不可行的。相应的,如果对偶问题无界,即 d⋆=∞ ,则 p⋆=∞ ,即原始问题是不可行的。
我们把原始问题和对偶问题最优值之间的差值 p⋆−d⋆ 称为最优对偶间隙(optimal duality gap)。显然,这个值总是正的。
强对偶
如果原始问题和对偶问题的最优值相等,即:
通常情况下强对偶关系并不成立。但是如果原始问题是凸的,即对于这样的形式:
一种经常被用到的条件是
- Slater条件:存在一点
x∈relint D
(D的相对内点集)满足
fi(x)<0,i=1,…,m,Ax=b这样的点也可称之为 严格可行 的。
可以证明,如果原问题是凸的,并且Slater条件成立的情况下,强对偶条件一定成立。
如果有一些不等约束是仿射的,Slater条件还可以被弱化。假设前 k 个不等约束是仿射的,则Slater条件可以被转化为:
- Refined Slater 条件:存在一点
x∈relint D
(D的相对内点集)满足
fi(x)≤0,i=1,…,k,fi(x)<0,i=k+1,…,mAx=b
即仿射的不等约束不必取严格小于。
此外,满足 Slater 条件(或 Refined Slater 条件) 不仅意味着(凸优化问题)强对偶性的成立,而且也表示当 d⋆>−∞ 时,存在一组对偶变量 (λ⋆,ν⋆) 满足 g(λ⋆,ν⋆)=d⋆=p⋆ ,即此时对偶最优值是可取到的。
原始问题与对偶问题的关系
- 原始问题和对偶问题都是可行的,则弱对偶关系成立,强对偶关系不一定成立。
- 原始问题和对偶问题都不可行,则弱对偶关系依然成立,但强对偶关系不成立。
- 关于原始问题和对偶问题之间的解的关系,可以整理如下表格:
对偶问题\原始问题 | 可行 | 无下界 | 不可行 |
---|---|---|---|
可行 | √ | × | × |
无上界 | × | × | √ |
不可行 | × | √ | √ |
最优条件
现在假设我们现在已经知道了原始问题和对偶问题的最优值相等(强对偶)。
x∗
是原始问题的最优解,
(λ∗,ν∗)
是对偶问题的最优解。我们可以写出如下的式子:
这里有两个不等号,第三行取到等号的必要条件是:
而第四行取到等号的条件是:
互补松弛条件
上面得到:
- 如果拉格朗日不等约束乘子 λ∗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) (为了和图片配合,只有取个负号了,希望不影响理解)。从负梯度的方向上来看,显然有 d1>d2 。绿色的线是约束,也就是说,只要正好落在这条绿线上的点才可能是满足要求的点。如果没有这条约束, f(x,y) 的最小值应该会落在最小那圈等高线内部的某一点上。而现在加上了约束,最小值点应该在哪里呢?显然应该是在 f(x,y) 的等高线正好和约束线相切的位置。如果我们对约束也求负梯度 −∇g(x,y) ,则其梯度如图中绿色箭头所示。很容易看出来,要想让目标函数 f(x,y) 的等高线和约束相切,则他们切点的梯度一定在一条直线上,即:
因此,我们通过观察可以得到优化取到最小值的条件:
仍然需要提醒的是,这些条件对于一般问题只是取到最优的必要条件。但是对于大多数凸问题来说,这个条件也是充分条件。具体情况请看上面公式推导。
含有不等约束的情况
上面仅仅考虑了等式约束的情况。那么含有不等式的约束情况下, λ 乘子又有什么意义呢?
我们还是考虑一个和上面问题类似的问题:
这个和之前的图不同之处在于:约束决定的可行区域由一条直线变成了一段带状区域。这个带状区域由两条边界 g(x,y)=c 和 g(x,y)=d 来决定。图中的箭头都是负梯度方向。
大家立刻可以从图中发现,这个问题的最优解和之前的等式约束情况下没有任何区别。也就是依然满足条件:
这里的核心问题是互补松弛条件。我们上面已经说过了由于互补松弛条件的存在,
λ
乘子是一个非常明确的状态指示器。如果不等约束能够取到等号,则
λ
乘子是个正数;如果不等约束只能取严格不等,则
λ
乘子必然为0。我们也很容易从图里看出来,要想取到最优,我们首先需要:
由上面的问题可以看出来,不等约束的拉格朗日乘子 λ 确实就是一个状态指示器,它起到了一个开关的作用。当不等约束能够取到等号的时候,开关打开( λ>0 ), λ 乘子的作用就和前面等式约束乘子 ν 的作用一样,使目标函数的梯度和约束的梯度保持线性关系;而不等约束无法取到等号的时候,开关关闭( λ=0) , λ 乘子就带着对应的约束从梯度运算中消失了,并不去影响目标函数的梯度。
参考文献
- Stephen Boyd, Lieven Vandenberghe. Convex Optimization.
- 维基百科. 拉格朗日乘数.