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

在求取有约束条件的优化问题时,拉格朗日乘子法(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条件视为是拉格朗日乘子法的泛化。

时间: 2024-10-13 01:50:10

深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件的相关文章

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

拉格朗日乘子法:对于等式约束的优化问题,求取最优值. KKT条件:对于含有不等式约束的优化问题,求取最优值. 最优化问题分类: (1)无约束优化问题: 常常使用Fermat定理,即求取的导数,然后令其为零,可求得候选最优值. (2)有等式约束的优化问题:, 使用拉格朗日乘子法,把等式约束用一个系数与写为一个式子,称为拉格朗日函数.再通过对各个参数求取导数,联立等式进行求取最优值. (3)有不等式约束的优化问题.,,. 把所有的不等式约束.等式约束和目标函数全部写为一个式子:. KKT条件的最优值

增广拉格朗日乘子法(Augmented Lagrange Method)

转载自:增广拉格朗日乘子法(Augmented Lagrange Method) 增广拉格朗日乘子法的作用是用来解决等式约束下的优化问题, 假定需要求解的问题如下: minimize f(X) s.t.: h(X)=0 其中,f:Rn->R; h:Rn->Rm 朴素拉格朗日乘子法的解决方案是: L(X,λ)=f(X)+μh(X); μ:Rm 此时,求解L对X和μ的偏导同时为零就可以得到最优解了. 增广拉格朗日乘子法的解决方案是: Lc(x,λ)=f(X)+μh(X)+1/2c|h(X)|2 每

关于拉格朗日乘子法与KKT条件

关于拉格朗日乘子法与KKT条件 关于拉格朗日乘子法与KKT条件 目录 拉格朗日乘子法的数学基础 共轭函数 拉格朗日函数 拉格朗日对偶函数 目标函数最优值的下界 拉格朗日对偶函数与共轭函数的联系 拉格朗日对偶问题 如何显式的表述拉格朗日对偶问题 由定义消去下确界 隐式求解约束 共轭函数法 弱对偶 强对偶 原始问题与对偶问题的关系 最优条件 互补松弛条件 KKT条件 一般问题的KKT条件 凸问题的KKT条件 KKT条件的用途 拉格朗日乘数法的形象化解读 等式约束的拉格朗日乘子法 含有不等约束的情况

拉格朗日乘子法 那些年学过的高数

最近在做通信网络相关的仿真,今天拿到了一些别人仿真的代码来学习,其中看到了一个double Lambda[T_Node_Number][M][Low_iteration];的参数,注释写着拉格朗日乘子式.本来对于这个名词感觉很陌生,后来查了一些资料,才回忆起这似乎是大一高数曾经学过的知识,经查书,果不其然,高数下P113页 条件极值拉格朗日法讲的就是这个内容.以前被忽视的知识点,再次重现,我觉得要好好学习一下.一下是学习笔记: 如何理解 先看一个二维的例子:假设有函数:f(x,y),要求其极值(

机器学习中的数学——拉格朗日乘子法

拉格朗日乘子法:应用在求有约束条件的函数的极值问题上. a. 对于没有约束的函数求极值,只要求导,令导函数等于零即可. b. 对于约束条件是等式的函数. 目标函数:f(x), 约束条件:g(x)=0 求解f(x)在此约束条件下的极值. 定义拉格朗日函数 : L(x,λ)=f(x)+ λg(x) 分别对参数求偏导数,置零.

拉格朗日乘子法

基本的拉格朗日乘子法是求函数f(x1,x2,...)在g(x1,x2,...)=0的约束条件下的极值的方法. 主要思想:引入一个新的参数λ(即拉格朗日乘子),将约束条件函数与原函数联系到一起,使能配成与变量数量相等的等式方程,从而求出得到原函数极值的各个变量的解. 假设需要求极值的目标函数为f(x,y),限制条件为φ(x,y)=M 解:设g(x,y)=M-φ(x,y) 定义一个新函数:F(x,y,λ)=f(x,y)+λg(x,y) 则用偏导数方法列出方程:?F/?x=0,?F/?y=0,?F/?

非负矩阵分解(3):拉格朗日乘子法求解

作者:桂. 时间:2017-04-07  07:11:54 链接:http://www.cnblogs.com/xingshansi/p/6679325.html 声明:欢迎被转载,不过记得注明出处哦~ 前言 最近发这类文章,动不动就被管理员从首页摘除,如果你觉得这个文章还说得过去,麻烦帮忙点个赞吧,这样移除的概率小一些.... 本文为非负矩阵分解系列第三篇,在第二篇中介绍了不同准则下乘法算法的推导及代码实现,这里不免有一个疑问:明明是一个约束的优化问题,虽然乘法算法巧妙地将其变为一个无约束优化

拉格朗日乘子法与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_3 = 2 \] \[ min \quad f = 2x_1^2+3x_2^2+7x_3^2 +\alpha _1(2x_1+x_2- 1)+\alpha _2(2x_2+3x_3 - 2) \] \[ \dfrac{\partial f}{\partial x_1}=4x_1+2\alpha_1

【机器学习之数学】03 有约束的非线性优化问题——拉格朗日乘子法、KKT条件、投影法

目录 将有约束问题转化为无约束问题 拉格朗日法 KKT条件 拉格朗日法更新方程 凸优化问题下的拉格朗日法 罚函数法 对梯度算法进行修改,使其运用在有约束条件下 投影法 梯度下降法 to 投影梯度法 正交投影算子 References 相关博客 梯度下降法.最速下降法.牛顿法等迭代求解方法,都是在无约束的条件下使用的,而在有约束的问题中,直接使用这些梯度方法会有问题,如更新后的值不满足约束条件. 那么问题来了,如何处理有约束的优化问题?大致可以分为以下两种方式: 将有约束的问题转化为无约束的问题,