关于Karush-Kuhn-Tucker(KKT)条件的几何分析
来源:互联网 发布:算法竞赛入门经典 豆瓣 编辑:程序博客网 时间:2024/05/21 01:27
写在前面的话
Karush-Kuhn-Tucker(简称“KKT”)条件是优化学里解决拉格朗日对偶问题的一种重要思想,被广泛应用在运筹学,凸与非凸优化,机器学习等领域。在这篇博客中我尝试用几何的角度解释拉格朗日对偶问题与对KKT条件的理解。如果想进一步学习凸优化内容,推荐Stanford CS229课程与Stephen Boyd教授的经典教材《Convex Optimization》,都对凸优化的内容进行了非常清晰的讲解。在这篇博客中我会尽量假设读者对凸优化相关内容比较陌生,所以用比较通俗易懂的语言进行描述,在一些有延伸的地方用注解的方式加以说明。如果有理解上有问题或言之不确之处,可以在留言中指正,欢迎一起探讨。
凸优化问题
凸优化问题是一类比较特殊的优化问题,在世界上其实只有比较少数的问题可以适用于凸优化来解决,但因为凸优化理论被研究得比较彻底,也被广泛应用在精确方法问题[^footnote]的解决上,所以研究凸问题仍然是非常重要的。关于凸函数的定义与基本性质,本文就不赘述了。
凸优化的定义是求取最小值的目标函数为凸函数的一类优化问题。其中,目标函数为凸函数且定义域为凸集的优化问题称为无约束凸优化问题。目标函数和不等式约束函数均为凸函数,等式约束函数为仿射函数,并且定义域为凸集的优化问题为带约束凸优化问题。我们在这里探讨带约束凸优化问题,具有如下的形式:
这里我们定义函数集
一边优化一边带着约束是很困难的。对于等式约束,典型的解决办法有牛顿迭代法:
求解迭代
如公式中所揭露的,当解从负方向靠近0时会承受对数障碍带来的惩罚效果。关于牛顿迭代法与对数障碍法有兴趣的同学可以搜索相关教程,在此不再赘述。下面从对偶问题和原始问题两方面分析拉格朗日函数。
拉格朗日函数
拉格朗日乘子法,(或称广义拉格朗日函数)与前两种方法的区别在于,前两种优化方法直接将约束条件融合进了目标函数,令约束依然维持强约束的效果。但拉格朗日试图构造一个原问题的对偶问题,将约束从强约束转化为弱约束,使约束关系可以在某些情况下被违反。拉格朗日对偶问题表述为:
这种构造看起来确实很奇怪,既然约束都变成可以违反的了,还怎么保证能找到原问题的最优解呢?这就是拉格朗日对偶问题有趣的地方了。在这个对偶问题中,引入了两个标量矢量
对偶问题
什么是对偶问题?这可以牵扯到认知世界的方法论。比如我们永远无法知道别人眼中的自己是什么样的,有趣的是我们往往不关心自己是否真的好看,而更希望别人认为我们好看,这其实是两个问题(所以美颜相机会如此风靡全球)。如果后者是优化的原问题,那前者就是这个问题的对偶问题。因为我们没办法知道别人眼中的自己是什么样子,所以我们只能通过优化对偶问题(对着镜子打扮)来间接地优化原问题。
回到拉格朗日问题上来,我们假设这些约束可以添加一些任意程度的影响(或“惩罚”)到原问题上,但这些约束到底是怎么影响原问题的呢?因为我们最终的目的是最小化拉格朗日函数,我们需要首先选择一个变量,这里我们选原变量
找到了这个最优值之后,对偶问题就变为关于
我们可以这样理解,固定了最优解
现在将拉格朗日对偶函数的极大极小问题表示为约束最优问题,即:
注意此处有约束
原始问题
这里对拉格朗日问题的原始问题稍作探讨。由上得知拉格朗日函数是三个变量
关于惩罚的思维在原始问题中同样适用,例如如果有某个
下面考虑极小化问题,类似的得知
这被称为拉格朗日的极小极大问题,经过观察可以发现这个问题与原问题是等价的,他们有相同的解,假设其为
对偶性关系
若原始问题与对偶问题都有最优值,则存在
即
又因
所以
在这里我们要提到两个优化学概念,即强对偶性与弱对偶性。强对偶性指如果原始问题与对偶问题是等价的,相对地弱对偶性指二者并不等价且原始问题的最优解大于或等于对偶问题的最优解(这个差被称为“对偶间隙”
KKT条件的几何解释
上面我们谈了很多繁琐复杂的定义与数学关系。在这部分我尝试用简洁的语言探讨拉格朗日问题的几何意义。
首先考虑等式约束。让我们从不失一般性的最简单模型开始,可以很轻松的推广到更复杂的模型。我们首先假设一个最简单的凸优化问题,带有一个等式约束:
由此构造拉格朗日函数
情况对于不等式约束会复杂一点。这里涉及到一个优化学概念叫互补松弛[^footnote]。我们可以同样写出带有一个不等式约束的凸优化问题:
构造拉格朗日函数有
如图1,此时我们要分两种情况讨论。第一种情况是当最优解发生在
第二种情况是当最优解
以上的分析构成了KKT条件的几何描述,KKT条件保证了拉格朗日问题与原始问题的解是等价的。
原始问题约束:
fi(x)≤0,i=1,...,m,hi(x)=0,i=1,...,p
对偶问题约束:λ⪰0
互补松弛:λifi(x)=0,i=1,...,m
拉格朗日极值点:∇L(x,λ,ν)=∇f0(x)+∑mi=1λi∇fi(x)+∑pi=1νi∇hi(x)=0
以上就构成了KKT条件的定义,当KKT条件满足时,拉格朗日问题与原问题是等价的,也就构成了我们之前所提到的强对偶。另一个有趣的是,当KKT条件满足时(或原问题与对偶问题是强对偶时),参数
敏感度问题
KKT问题有非常多可以分析的话题,这里简单介绍一个敏感度问题,有兴趣的朋友可以继续延伸。如果我们尝试对对偶函数求关于约束的偏微分,可以看到结果是拉格朗日乘子:
根据我们之前所叙述的,如果
- 关于Karush-Kuhn-Tucker(KKT)条件的几何分析
- 拉格朗日对偶和KKT条件(Karush-Kuhn-Tucker)
- Karush-Kuhn-Tucker 最优化条件 (KKT 条件)
- Karush-Kuhn-Tucker 最优化条件 (KKT 条件)(转载)
- Lagrange Multiplier and KKT(Karush-Kuhn-Tucker)
- KKT(Karush-Kuhn-Tucher)条件
- SVM中的Karush-Kuhn-Tucker条件和对偶问题
- SVM中的Karush-Kuhn-Tucker条件和对偶问题
- SVM中的Karush-Kuhn-Tucker条件和对偶问题
- Gradient And Karush-Kuhn-Tucker Conditions
- Gradient And Karush-Kuhn-Tucker Conditions
- Gradient And Karush-Kuhn-Tucker Conditions
- Gradient And Karush-Kuhn-Tucker Conditions
- Gradient And Karush-Kuhn-Tucker Conditions
- KKT条件的推导
- 关于拉格朗日乘子法与KKT条件
- 关于拉格朗日乘子法与KKT条件
- 关于拉格朗日乘子法与KKT条件的相关数学概念
- Java操作PDF之iText超入门
- 用NDK构建osg库到Android 平台几点经验
- java爬虫爬取主流房屋网站
- Charles抓取http与https数据
- Java之冒泡排序
- 关于Karush-Kuhn-Tucker(KKT)条件的几何分析
- python生成pyc文件
- 用k近邻和logistic回归模型识别手写数字,并比较结果
- Java之折半查询(二分法)
- 高数08.04 一阶线性微分方程
- 事件绑定(事件处理程序)
- python的pip安装、setuptools安装
- Unity中构建现实世界中的地形(插件 World Composer)
- my常用命令集