【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和
KKT条件
在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法。在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。我们这里提到的最优化问题通常是指对于给定的某一函数,求其在指定作用域上的全局最小值(因为最小值与最大值可以很容易转化,即最大值问题可以转化成最小值问题)。提到KKT条件一般会附带的提一下拉格朗日乘子。对学过高等数学的人来说比较拉格朗日乘子应该会有些印象。二者均是求解最优化问题的方法,不同之处在于应用的情形不同。一般情况下,最优化问题会碰到一下三种情况:(1)无约束条件这是最简单的情况,解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点。将结果带回原函数进行验证即可。(2)等式约束条件设目标函数为f(x),约束条件为h_k(x),形如: s.t. 表示subject to ,“受限于”的意思,l表示有l个约束条件。则解决方法是消元法或者拉格朗日法。消元法比较简单不在赘述,这里主要讲拉格朗日法,因为后面提到的KKT条件是对拉格朗日乘子法的一种泛化。例如给定椭球: 求这个椭
球的内接长方体的最大体积。这个问题实际上就是条件极值问题,即在条件下,求的最大值。当然这个问题实际可以先根据条件消去z (消元法),然后带入转化为无条件极值问题来处理。但是有时候这样做很困难,甚至是做不到的,这时候就需要用拉格朗日乘数法了。首先定义拉格朗日函数F(x):(其中λk是各个约束条件的待定系数。)
然后解变量的偏导方程:......, 如果有l个约束条件,就应该有l+1个方程。求出的方程组的解就可能是最优化值(高等数学中提到的极值),将结果带回原方程验证就可得到解。回到上面的题目,通过拉格朗日乘数法将问题转化为对求偏导得到
联立前面三个方程得到和,带入第四个方程解之
带入解得最大体积为:至于为什么这么做可以求解最优化?维基百科上给出了一个比较好的直观解释。举个二维最优化的例子:
min f(x,y) s.t. g(x,y) = c 这里画出z=f(x,y)的等高线(函数登高线定义见百度百科):
绿线标出的是约束g(x,y)=c的点的轨迹。蓝线是f(x,y)的等高线。箭头表示斜率,和等高线的法线平行。从梯度的方向上来看,显然有d1>d2。绿色的线是约束,也就是说,只要正好落在这条绿线上的点才可能是满足要求的点。如果没有
这条约束,f(x,y)的最小值应该会落在最小那圈等高线内部的某一点上。而现在加上了约束,最小值点应该在哪里呢?显然应该是在f(x,y)的等高线正好和约束线相切的位置,因为
如果只是相交意味着肯定还存在其它的等高线在该条等高
线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优值。如果我们对约束也求梯度?g(x,y),则其梯度如图中绿色箭头所示。很容易看出来,要想让目标函数f(x,y)的等高线和约束相切,则他们切点的梯度一定在一
条直线上(f和g的斜率平行)。
也即在最优化解的时候:?f(x,y)=λ(?g(x,y)-C) (其中?为梯度算子; 即:f(x)的梯度= λ* g(x)的梯度,λ是常数,可以是任何非0实数,表示左右两边同向。)即:
▽[f(x,y)+λ(g(x,y)?c)]=0λ≠0那么拉格朗日函数:
F(x,y)=f(x,y)+λ(g(x,y)?c) 在达到极值时与f(x,y)相等,因为
F(x,y)达到极值时g(x,y)?c总等于零。min( F(x,λ) )取得极小值时其导数为0,即▽f(x)+▽∑ni=λihi(x)=0,也就是说f(x)和h(x)的梯度共线。简单的说,在F(x,λ)取得最优化解的时候,即F(x,λ)取极值(导数为0,▽[f(x,y)+λ(g(x,y)?c)]=0)的时候,f(x)与g(x) 梯度共线,此时就是在条件约束g(x)下,f(x)的最优化解。(3)不等式约束条件设目标函数f(x),不等式约束为g(x),有的教程还会添加上等式约束条件
h(x)。此时的约束优化问题描述如下:
则我们定义不等式约束下的拉格朗日函数L,则L表达式为:其中f(x)是原目标函数,hj(x)是第j个等式约束条件,λj是对应的约束系数,gk是不等式约束,uk是对应的约束系数。
常用的方法是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) 接下来主要介绍KKT 条件,推导及应用。详细推导过程如下:参考:【1】拉格朗日乘数法【2】KKT条件介绍【3】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件【4】拉格朗日乘子法和KKT条件