KKT(Karush-Kuhn-Tucher)条件
在优化理论中,KKT条件是非线性规划(nonlinear programming)最佳解的必要条件。KKT条件将lagrange乘数法(Lagrange multipliers)中的等式约束优化问题推广至不等式约束。本文从Lagrange乘数法推导KKT条件。
给定一个目标函数f:Rn→Rf:Rn→R,我们希望找到x∈Rnx∈Rn ,在满足约束条件g(x)=0g(x)=0的前提下,使得f(x)f(x)有最小值。这个约束优化问题如下:
minimize f(x)f(x)
subject to g(x)=0g(x)=0
为方便分析,假设ff对gg是连续可导函数。Lagrange乘数法是含等式约束条件优化问题的典型解法。定义Lagrangian函数
L(x,λ)=f(x)+λg(x)L(x,λ)=f(x)+λg(x)
其中λλ为Lagrange乘数。Lagrange乘数法将原来的约束优化问题转化成等价的非约束问题
minimize x,λL(x,λ)minimize x,λL(x,λ)
优化必要条件:
▽xL=∂L∂x=▽f+λg(x)=0▽xL=∂L∂x=▽f+λg(x)=0
▽λL=∂L∂λ=g(x)=0▽λL=∂L∂λ=g(x)=0
其中第一个为stationary equation,第二个为约束条件。通过求解上述方程,可得L(x,λ)L(x,λ)的驻点(stationary point)x∗x∗以及λλ的值(正负数皆可能)。
接下来我们将约束等式g(x)=0g(x)=0推广为g(x)⩽0g(x)⩽0。优化问题如下:
minimize f(x)f(x)
subject to g(x)⩽0g(x)⩽0
约束不等式g(x)⩽0g(x)⩽0称为primal feasibility, 由此定义可行域(feasible region)K={x∈Rn∣g(x)⩽0}K={x∈Rn∣g(x)⩽0}。假设x∗x∗为满足约束条件的最佳解,分两种情况讨论:(1)g(x∗)⩽0g(x∗)⩽0,最佳解位于KK的内部,称为interior solution,这时约束条件是无效的;(2)g(x∗)=0g(x∗)=0,最佳解落在KK的边界,称为boundary solution,此时约束条件是有效的。这两种情况的最佳解具有不同的必要条件。
- 内部解:在约束条件无效的情形下, g(x)g(x)不起作用,约束优化问题退化为无约束优化问题,因此驻点x∗x∗满足▽f=0▽f=0且λ=0λ=0。
- 边界解:在约束条件有效的情形下,约束不等式变成等式g(x)=0g(x)=0,这与前面Lagrange乘数法的情况相同。我们可以证明驻点x∗x∗发生在▽f∈span{▽g}▽f∈span{▽g},换句话说,存在λλ使得▽f=−λg(x)▽f=−λg(x),但这里λλ的正负号是尤其意义的。因为我们希望最小化ff,梯度▽f▽f应该指向可行域KK的内部,但▽g▽g指向可行域KK的外部(即g(x)>0g(x)>0的区域),因此λ⩾0λ⩾0称为对偶可行性
- 更直观的图解来自https://en.wikipedia.org/wiki/Karush%E2%80%93Kuhn%E2%80%93Tucker_conditions 及 http://blog.csdn.net/johnnyconstantine/article/details/46335763:
不论是内部解还是边界解,λg(x)=0λg(x)=0恒成立,称为complementary slckness。综上,最佳解的必要条件包括lagrangian函数L(x,λ)L(x,λ)的定常方程式、原始可行性、对偶可行性,以及complementary slckness:
▽xL=▽f+λg(x)=0▽xL=▽f+λg(x)=0
g(x)⩽0g(x)⩽0
λ⩾0λ⩾0
λg(x)=0λg(x)=0
以上就是KKT条件。如果我们要做大化f(x)f(x)且受限于g(x)⩽0g(x)⩽0,那么对偶可行性要改成λ⩽0λ⩽0
考虑标准约束优化问题
minimize f(x)f(x)
subject to g(x)=0g(x)=0, j=1,...,mj=1,...,m
hk(x)⩽0hk(x)⩽0, k=1,...,pk=1,...,p
定义拉格朗日函数
L(x,{λj},{μk})=f(x)+∑mj=1λjgj(x)+∑pk=1μkhk(x)L(x,{λj},{μk})=f(x)+∑j=1mλjgj(x)+∑k=1pμkhk(x)
其中λjλj是对应gj(x)=0gj(x)=0的拉格朗日乘数,μkμk是对应hk(x)⩽0hk(x)⩽0的拉格朗日乘数,KKT条件
▽xL=0▽xL=0
gj=0,j=1,...,mgj=0,j=1,...,m
hk(x)⩽0hk(x)⩽0
μk⩾0μk⩾0
μkhk(x)=0,k=1,...,p
(转https://blog.csdn.net/chensheng312/article/details/73166909)
KKT(Karush-Kuhn-Tucher)条件的更多相关文章
- Support Vector Machine(2):Lagrange Duality求解线性可分SVM的最佳边界
在上篇文章<Support Vector Machine(1):线性可分集的决策边界>中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式: 到这一步后,我个人又花了很长的时 ...
- 【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
[整理] 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有 ...
- 真正理解拉格朗日乘子法和 KKT 条件
这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容. 首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值: \[min \quad f(x)\] 如 ...
- 拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
参考文献:https://www.cnblogs.com/sddai/p/5728195.html 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush ...
- 装载:关于拉格朗日乘子法与KKT条件
作者:@wzyer 拉格朗日乘子法无疑是最优化理论中最重要的一个方法.但是现在网上并没有很好的完整介绍整个方法的文章.我这里尝试详细介绍一下这方面的有关问题,插入自己的一些理解,希望能够对大家有帮助. ...
- 关于拉格朗日乘子法与KKT条件
关于拉格朗日乘子法与KKT条件 关于拉格朗日乘子法与KKT条件 目录 拉格朗日乘子法的数学基础 共轭函数 拉格朗日函数 拉格朗日对偶函数 目标函数最优值的下界 拉格朗日对偶函数与共轭函数的联系 拉 ...
- 从感知机到 SVM,再到深度学习(二)
这篇博文承接上一篇,详细推导了 SVM 算法,包括对偶算法,SMO 优化算法,核函数技巧等等,最后还提到用高度非线性的曲线代替超平面,就是神经网络的方法. 在第一篇中已经得到了最优间隔 ...
- SVM笔记
1.前言 SVM(Support Vector Machine)是一种寻求最大分类间隔的机器学习方法,广泛应用于各个领域,许多人把SVM当做首选方法,它也被称之为最优分类器,这是为什么呢?这篇文章将系 ...
- 图解AI数学基础 | 概率与统计
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/83 本文地址:http://www.showmeai.tech/article-det ...
随机推荐
- int**a = new int[5][6] 怎么delete
int **a = new int[5][6],这个根本编译不过去吧. 如果你想new一个二维数组出来,应该这样: int** a= new int*[5]; for (int i = 0; i &l ...
- 最新版本elasticsearch本地搭建入门篇
最新版本elasticsearch本地搭建入门篇 项目介绍 最近工作用到elasticsearch,主要是用于网站搜索,和应用搜索. 工欲善其事,必先利其器. 自己开始关注elasticsearch, ...
- 使用vue-cli开发过程中如何把jQuery设置为全局
说明:vue-cli是vue快速构建项目的命令行式开发模式. vue主要针对数据层,更多的操作在数据上,很少在DOM上,偶尔也会需要操作DOM,偶尔也会用到JQ插件,下面简单说下如何在使用vue-cl ...
- Runtime和Process
private void runByshcommand(String command) { try { System.out.println("开始执行命令....."); Pro ...
- python 类函数,实例函数,静态函数
一.实现方法 class Function(object): # 在类定义中定义变量 cls_variable = "class varibale" def __init__(se ...
- Autoit3操作网页实现自动化
Autoit3 本身有内置的用户自定义函数IE.au3,只限于IE浏览器,如果是Firefox浏览器需要另外自定义函数. 找了很多资料发现有个FF.au3的自定义函数,下载地址 http://www. ...
- loadrunner 运行场景-场景运行原理
运行场景-场景运行原理 by:授客 QQ:1033553122 运行原理 1 Remote Agent Dispatcher(Process) 运行Controller在负载机上开启应用程序. 2 ...
- 自定义控件详解(二):Path类 相关用法
Path:路径 绘制路径:void drawPath (Path path, Paint paint) Path 可以绘制的路径 一.直线路径 1.基本方法 void moveTo (float st ...
- genymotion 模拟器内安装软件 the app contains ARM native code and your devices cannot run ARM instructions
问题如图: 解决方法: 下载一个Genymotion-ARM-Translation软件,安装到模拟器中就好了
- python接口测试—post请求(二)
使用post请求登陆小极客网. 1.获取登陆接口,及用户名和密码参数 进入小极客网,先注册个账户,修改用户名和密码,然后点击登陆,打开debug调试-进入到network下 输入用户名和密码,点击登陆 ...