机器学习笔记——拉格朗日乘子法和KKT条件

时间:2022-12-22 10:56:09

  拉格朗日乘子法是一种寻找多元函数在一组约束下的极值方法,通过引入拉格朗日乘子,可将有m个变量和n个约束条件的最优化问题转化为具有m+n个变量的无约束优化问题。在介绍拉格朗日乘子法之前,先简要的介绍一些前置知识,然后就拉格朗日乘子法谈一下自己的理解。

一 前置知识

1.梯度

   梯度是一个与方向导数有关的概念,它是一个向量。在二元函数的情形,设函数f(x,y)在平面区域D内具有一阶连续偏导,则对于每一点P(x0,y0)∈D,都可以定义出一个向量:fx(x0,y0)i+fy(x0,y0)j ,称该向量为函数f(x,y)在点P(x0,y0)

的梯度。并记作grad f(x0,y0)
或者∇f(x0,y0),即 grad f(x0,y0)
= ∇f(x0,y0) = fx(x0,y0)i+fy(x0,y0)

  再来看看梯度和方向导数的关系:如果函数f(x,y)在P(x0,y0)点可微,e= (cosα,cosβ)是与方向L同向的单位向量,则∂f/∂L|(x0,y0) = fx(x0,y0)cosα+fy(x0,y0)cosβ = grad f(x0,y0).el =  |grad f(x0,y0)|.cosθ ,其中θ表示的梯度与e的夹角。由此可知,当θ = 0时,el 与梯度的方向相同时,此时方向导数最大,函数f(x,y)增长最快;当θ = π时,e与梯度的方向相反时,此时方向导数最小且为负,函数f(x,y)减小最快。

2.等高线(等值线)

  通常来说,二元函数 z = f(x,y)在几何上表示一个曲面,这个曲面被平面 z = c(c为常数)所截得的曲线L的方程为:

                                    机器学习笔记——拉格朗日乘子法和KKT条件

这是一条空间曲线,这条曲线L在xOy平面上的投影是一条平面曲线L*,它在xOy平面直角坐标系中的方程为:f(x,y) = c .对于曲线L*上的一切点,已给函数的函数值都是c,所以我们称平面曲线L*为函数z = f(x,y)的等值线(等高线)。再来看看等高线的一些性质:

  若fx,fy不同时为零,则等高线 f(x,y) = c上任一点P(x0,y0)处的一个单位法向量为:

                             机器学习笔记——拉格朗日乘子法和KKT条件

这表明函数f(x,y)在一点(x0,y0)的梯度∇f(x0,y0)的方向就是等高线f(x,y) = c在这点的法向量的方向,而梯度的模|∇f(x0,y0)|就是沿这个法线方向的方向导数∂f/∂n,于是有:

                                 机器学习笔记——拉格朗日乘子法和KKT条件

二 拉格朗日乘子法

1.等式约束

  首先看一下什么是拉格朗日乘子法,已知一个问题:

          机器学习笔记——拉格朗日乘子法和KKT条件

要求f(x,y)在g(x,y)=c的前提下的最小值,我们可以构造一个函数L(λ,x,y) = f(x,y) + λ(g(x,y) - c),其中λ(λ不等于0)称为拉格朗日乘子,而函数L(λ,x)称为拉格朗日函数。通过拉格朗日函数对各个变量求导,令其为零,可以求得候选值集合,然后验证求得最优值。这就是拉格朗日乘子法。那么拉格朗日乘子法为什么是合理的?下面分别从几何和代数两方面解释下自己对其的一些见解:

(1)从几何的角度

先来看一幅图:

          机器学习笔记——拉格朗日乘子法和KKT条件

图中的虚线表示f(x,y)的等高线,如果满足g(x,y)=c这个约束,必然是等高线与g(x,y)=c这条曲线的交点;假设g(x)与等高线相交,交点就是同时满足等式约束条件和目标函数的可行域的值,但并不是最优值,因为相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,才可能取得最优值。假设该切点为P(x0,y0),则f(x,y)在p点的梯度必然垂直于其在该点处的法向量(前面已经说过),又由于p点是曲线g(x,y)=c的切点,故曲线在p点的法向量平行于等高线在p点法向量(也可以看做两条曲线在该点有相同的法向量),故g(x,y)=c的梯度必然也垂直于它在p点的法向量。所以最优值必须满足:∇f(x,y) = λ* ∇(g(x)-c),λ是常数且不等于0,表示左右两边平行。这个等式就是L(λ,x)对参数分别求偏导的结果,即:

                                机器学习笔记——拉格朗日乘子法和KKT条件

  也就是说满足∇f(x,y) = λ* ∇(g(x)-c)的点必然是式子min L(λ,x) = f(x,y) + λ(g(x,y) - c)的解,所以min L(λ,x) = f(x,y) + λ(g(x,y) - c)这个式子与原问题是等价的(可以先简单的认为g(x,y) - c = 0造成的)。

(2)从代数的角度

  先来看一下z = f(x,y)在条件g(x,y) = c下取得极值的必要条件。

如果z=f(x,y)在(x0.y0)处取得所求的极值,那么有 g(x0,y0) = c,假定在(x0,y0)的某一领域内f(x,y)与g(x,y) = c均有一阶段连续偏导(对于凸函数很显然是成立的)并且gy(x0,y0)≠0.由隐函数的存在定理可知方程g(x,y)=c能够确定一个连续且具有连续偏导的函数y = μ(x),将其带入z= f(x,y)中可以得到一个变量x的函数:z = f[x,μ(x)].

  于是z=f(x,y)在x=x0处取得极值,相当于z = f[x,μ(x)]在x=x0处取得极值,又由一元可导函数取得极值的必要条件可知:

                                  机器学习笔记——拉格朗日乘子法和KKT条件

而又由y = μ(x)用隐函数求导公式,有

                                    

                                    机器学习笔记——拉格朗日乘子法和KKT条件

将以上两式结合可得,

                                    机器学习笔记——拉格朗日乘子法和KKT条件

上式与g(x0,y0)=c 就是函数z=f(x,y)在g(x,y)=c的条件下取得极值的必要条件。如果令:

                                     机器学习笔记——拉格朗日乘子法和KKT条件  

上述的必要条件就变为

                                  机器学习笔记——拉格朗日乘子法和KKT条件

同从几何角度推出的结论一致。

  综上所述,对于问题

            机器学习笔记——拉格朗日乘子法和KKT条件

(x可以为一个矢量,也可以为一个标量)

等价于求 

              机器学习笔记——拉格朗日乘子法和KKT条件

  三  KKT条件

    

1.关于不等式约束             

  上述问题中讲述的都是约束条件为等式的情况,对于约束条件为不等式的情况,通常引入KKT条件(在不等式约束下,函数求极值的必要条件)来解决,具体如下:

对于问题

            机器学习笔记——拉格朗日乘子法和KKT条件

我们也引入拉格朗日函数

            机器学习笔记——拉格朗日乘子法和KKT条件

其中μj≥0。

再看一个关于x的函数:

              机器学习笔记——拉格朗日乘子法和KKT条件

而实际上F(x)可以看做是f(x)的另一种表达形式;由于hi(x)=0,所以拉格朗日函数中的第二项为0;又由于gj(x) ≤ 0且μj ≥ 0,所以μjgj(X) ≤ 0,所以只有μjgj(X) = 0时L取到最大值;因此F(x)在满足约束条件时就是f(x)。由此,目标函数可以表述为如下的形式:

              机器学习笔记——拉格朗日乘子法和KKT条件

我们称这个式子为原问题。并定义原问题的最优值为P*

然后再看关于λ和μ的一个式子:

              机器学习笔记——拉格朗日乘子法和KKT条件

考虑该式子的极大化:

              机器学习笔记——拉格朗日乘子法和KKT条件

我们称这个式子为原问题的对偶问题。并定义对偶问题的最优值为d*

(关于拉格朗日的对偶性,可参考李航《统计学习方法》中的附录部分,或者参考博客:http://blog.pluskid.org/?p=702)

关于对偶性问题,通常分为弱对偶性强对偶性:

(1)考虑到原问题和对偶问题的最优值P*d*如果d* ≤  P*则称“弱对偶性”成立。

(2)如果d*  P*则称“强对偶性”成立。

通常情况下,强对偶性并不成立;但是当原问题和对偶问题满足以下条件时,则满足强对偶性。

(1)f(x)和gj(x)是凸函数。

(2)hi(x)是仿射函数。

(3)不等式约束gj(x)是严格可行的,即存在x,对所有j有gj(x) < 0 。

以上三个条件也称为Slater条件。如果满足Slater条件,即原问题和对偶问题满足强对偶性,则x*和λ*μ*分别为原问题和对偶问题的最优解的充要条件是x0和λ0、μ0满足下面的条件:

                    机器学习笔记——拉格朗日乘子法和KKT条件

                    机器学习笔记——拉格朗日乘子法和KKT条件

                  机器学习笔记——拉格朗日乘子法和KKT条件  

              机器学习笔记——拉格朗日乘子法和KKT条件

             机器学习笔记——拉格朗日乘子法和KKT条件

以上五个条件就是所谓的Karush-Kuhn-Tucher(KKT)条件。下面是关于这几个条件的简单阐述:

对于第一个条件,由于原问题和对偶问题满足强对偶性,所以

机器学习笔记——拉格朗日乘子法和KKT条件

机器学习笔记——拉格朗日乘子法和KKT条件

机器学习笔记——拉格朗日乘子法和KKT条件

即关于x的函数:

机器学习笔记——拉格朗日乘子法和KKT条件

在x*处取到了极值,由费马引理可知,该函数在x*处的偏导数为0,即:

机器学习笔记——拉格朗日乘子法和KKT条件

也就是条件(1)。该式子说明f(x)在极值点x*处的梯度是各个hi(x*)和gj(x*)的线性组合。

对于第二个条件,时在定义拉格朗日函数时的约束条件。

对于第三个条件,在定义F(x)时就已经体现了,由于:

机器学习笔记——拉格朗日乘子法和KKT条件

因为μjgj(x)≤0,要使得L最大,只有μjgj(x) = 0时满足。所以产生了第三个条件。

对于第四、五个条件,是原问题的自带的约束条件。

当原问题和对偶问题不满足强对偶性时,KKT条件是使一组解成为最优解的必要条件,即在不等式约束下,函数求极值的必要条件。可以把KKT条件看成是拉格朗日乘子法的泛化。

               

机器学习笔记——拉格朗日乘子法和KKT条件的更多相关文章

  1. 关于拉格朗日乘子法和KKT条件

    解密SVM系列(一):关于拉格朗日乘子法和KKT条件 标签: svm算法支持向量机 2015-08-17 18:53 1214人阅读 评论(0) 收藏 举报  分类: 模式识别&机器学习(42 ...

  2. 真正理解拉格朗日乘子法和 KKT 条件

        这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容.     首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值: \[min \quad f(x)\]     如 ...

  3. 拉格朗日乘子法和KKT条件

    拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件 ...

  4. 重温拉格朗日乘子法和KKT条件

    在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值:如果含有不等式 ...

  5. 第99:真正理解拉格朗日乘子法和 KKT 条件

  6. 拉格朗日乘子法 - KKT条件 - 对偶问题

    接下来准备写支持向量机,然而支持向量机和其他算法相比牵涉较多的数学知识,其中首当其冲的就是标题中的拉格朗日乘子法.KKT条件和对偶问题,所以本篇先作个铺垫. 大部分机器学习算法最后都可归结为最优化问题 ...

  7. 拉格朗日乘子法&amp&semi;KKT条件

    朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件.前 ...

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

    目录 1 将有约束问题转化为无约束问题 1.1 拉格朗日法 1.1.1 KKT条件 1.1.2 拉格朗日法更新方程 1.1.3 凸优化问题下的拉格朗日法 1.2 罚函数法 2 对梯度算法进行修改,使其 ...

  9. 深入理解拉格朗日乘子法(Lagrange Multiplier&rpar; 和KKT条件

    [整理]   在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有 ...

随机推荐

  1. Intellij IDEA&comma;WebStorm-keymap(转)

    1. ctrl + shift + n: 打开工程中的文件2. ctrl + j: 输出模板3. ctrl + b: 跳到变量申明处4. ctrl + alt + T: 围绕包裹代码(包括zencod ...

  2. 【BZOJ】3309&colon; DZY Loves Math 莫比乌斯反演优化

    3309: DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007) ...

  3. 如何以非 root 用户将应用绑定到 80 端口-ssh 篇 » 社区 » Ruby China

    如何以非 root 用户将应用绑定到 80 端口-ssh 篇 » 社区 » Ruby China 如何以非 root 用户将应用绑定到 80 端口-ssh 篇

  4. asp&period;net jquery&plus;ajax异步刷新1

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Django学习日记01&lowbar;环境搭建

    1. 使用Vagrant 创建ubuntu虚拟机: 首先安装vagrant,网上有比较多的方法,如:http://www.th7.cn/system/mac/201405/55421.shtml 我使 ...

  6. hibernate的开始

    1.1对象的持久化 对象持久化是指将内存中的对象保存到可永久保存的存储设备中(如磁盘)的一种技术.(hibernate是通过id来管理对象) 1.2怎样实现持久化 1 对象序列化 2 JDBC 3 O ...

  7. td 元素属性 noWrap 防止折行、撑开及文字换行

    最近调试程序,遇到如下问题: 也就是这个表格里面的文字被换行了,究其原因,主要是td中的width之和超过了100%导致的.谷歌了好久,终于发现,可以用noWrap="noWrap&quot ...

  8. 【2017-05-18】WebForm的Repeater控件及简单控件

    <%@ %> - 这里面写一些声明和引用的 <%  %> - 编写C#代码的 <%= %> - 往界面上输出一个变量的值 <%# Eval("属性名 ...

  9. 随机查出满足条件的5条数据(tp5)

    随机查出满足条件的5条数据 public function showQuestion() { $data[; $data[ $data['level'] = (int)$data['level']; ...

  10. git 自己易忘的命令

    1. git 更新远程分支列表 git remote update origin --prune git remote update origin -p 2. 查看远程分支: git branch - ...