任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~

以前学习SVM时曾草草了解到过KKT条件,当然,关于KKT条件的前身也就是拉格朗日乘子法,是高数就接触过的。如今学习最优化理论,又碰到了他俩,不得不说是一种缘分,当然这两个概念也是机器学习算法中非常重要的,因为机器学习归根到底就是一种优化。接下来让我们来一起看看。

拉格朗日乘子法

首先来了解拉格朗日乘子法,那么为什么需要拉格朗日乘子法?记住,有拉格朗日乘子法的地方,必然是一个组合优化问题。那么带约束的优化问题很好说,就比如说下面这个:

也就是说,自变量是一个n维向量,要最大化一个目标函数 ,满足若干等式和不等式约束。KKT条件宣称,如果有一个点 是满足所有约束的极值点,则

这是一个带等式约束的优化问题,有目标值,有约束条件。那么想想假设没有约束条件这个问题是怎么求解的呢?是不是直接f对各个x求导等于0,,解x就可以了,可以看到没有约束的话,求导为0,那么各个x均为0,这样f=0最小。也就是说,自变量 x 是一个n维向量,要最大化一个目标函数 f ,满足若干等式和不等式约束。

那么问题就来了,这里在说一点的是,为什么上面说求导为0就可以呢?理论上多数问题是可以的,但是有的问题不可以。如果求导为0一定可以的话,那么f一定是个凸优化问题,什么是凸呢?

  • 凸函数

严格说,我在泛函分析里看到的定义是这样的:设f为定义在区间I上的函数,和任意的实数 

则f称为I上的凸函数,当且仅当其上境图(在函数图像上方的点集)为一个凸集。如果通俗点说,我们在数学分析中学到的函数图像,如果函数任意一点的一阶导数(切线)值总是位于函数曲线的下方,那么就是凸函数。

  • 凸优化

为目标函数,为限制条件。 如果此处目标函数和限制条件为凸函数,即满足下式时优化问题即为一个凸优化问题

想象一下,目标函数是一座山的高度,约束是镶嵌在山上的一条曲线如下图。

你为了找到曲线上的最低点,就从最低的等高线(0那条)开始网上数。数到第三条,等高线终于和曲线有交点了(如上图所示)。因为比这条等高线低的地方都不在约束范围内,所以这肯定是这条约束曲线的最低点了。

而且约束曲线在这里不可能和等高线相交,一定是相切。因为如果是相交的话,如下图所示,那么曲线一定会有一部分在B区域,但是B区域比等高线低,这是不可能的。

两条曲线相切,意味着他们在这点的法线平行,也就是法向量只差一个任意的常数乘子(取为 -lambda ):
我们把这个式子的右边移到左边,并把常数移进微分算子,就得到
把这个式子重新解释一下,这个就是函数
无约束情况下极值点的充分条件。


 

如绿线所示,目标函数 f(x,y)f(x,y) 与约束 g(x,y)g(x,y) 只有三种情况,相交、相切或者没有交集,没交集肯定不是解,只有相交或者相切可能是解,但相交得到的一定不是最优值,因为相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,这就意味着只有等高线与目标函数的曲线相切的时候,才可能得到可行解。因此给出结论:拉格朗日乘子法取得极值的必要条件是目标函数与约束函数相切,这时两者的法向量是平行的。(关于法向量平行,推荐大家去看看MIT公开课:多变量微积分:拉格朗日乘数法,老师讲的很好)

KKT条件

在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值;如果含有不等式约束,可以应用KKT条件去求取。当然,这两个方法求得的结果只是必要条件,只有当是凸函数的情况下,才能保证是充分必要条件。

其实我们都知道,KKT条件是拉格朗日乘子法的泛化,在最优化理论中,KKT条件又叫做一阶(最优性)条件,其实还有一个二阶最优条件,但是这里我们暂且不讨论,想要了解的朋友欢迎去翻看教材,任何一本优化书里都有。

对于含有不等式约束的优化问题,如何求取最优值呢?常用的方法是KKT条件,同样地,把所有的不等式约束、等式约束和目标函数全部写为一个式子L(a, b, x)= f(x) + a*g(x)+b*h(x),KKT条件是说最优值必须满足以下条件:

满足 KKT 条件后极小化 Lagrangian 即可得到在不等式约束条件下的可行解。 KKT 条件看起来很多,其实很好理解:

  • (1) :拉格朗日取得可行解的必要条件;
  • (2) :这就是以上分析的一个比较有意思的约束,称作松弛互补条件;
  • (3) ∼∼ (4) :初始的约束条件;
  • (5) :不等式约束的 Lagrange Multiplier 需满足的条件。

求取这三个等式之后就能得到候选最优值。其中第2个式子非常有趣,因为g(x)<=0,如果要满足这个等式,必须B=0或者g(x)=0. 这是SVM的很多重要性质的来源,如支持向量的概念。

为什么要这么求能得到最优值?先说拉格朗日乘子法,设想我们的目标函数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)对参数求导的结果。

参考文章:

约束优化方法之KKT条件

优化算法—凸优化

SVM-拉格朗日乘数法与KKT条件

如何直观理解拉格朗日乘子法与KKT条件相关推荐

  1. 转 机器学习系列 08:深入理解拉格朗日乘子法、KKT 条件和拉格朗日对偶性

    深度理解拉格朗日乘子法.KKT条件与线性规划对偶理论的微妙关系 https://blog.csdn.net/benzhujie1245com/article/details/85270058?utm_ ...

  2. 直观理解拉格朗日乘子法和Karush-Kuhn-Tucker(KKT)条件

    在最优化问题中,经常是会有约束条件的,而约束条件可分为等式约束条件和不等式约束条件,对于前者,我们有拉格朗日乘子法,对于后者,有KKT条件,对于既有等式约束又有不等式约束的最优化问题,只需要结合拉格朗 ...

  3. 一文看懂拉格朗日乘子法、KKT条件和对偶问题

    因为想申请 CSDN 博客认证需要一定的粉丝量,而我写了五年博客才 700 多粉丝,本文开启关注才可阅读全文,很抱歉影响您的阅读体验 拉格朗日乘子法是解约束优化问题的常用方法,它和 KKT 条件.Sl ...

  4. 拉格朗日乘子法与KKT条件

    欢迎转载,转载请注明出处:https://blog.csdn.net/qq_41709378/article/details/106599811 --------------------------- ...

  5. SVM中拉格朗日乘子法、KKT条件、对偶问题详解

    SVM中拉格朗日乘子法.KKT条件.对偶问题详解 创作目的 1.SVM回顾 2.拉格朗日乘子法 3.KKT条件 4.对偶问题 强对偶性证明 总结 创作目的 我是机器学习初学者,目前正在上机器学习课,老 ...

  6. 最优化之凸集、凸函数、上确界、Jensen不等式、共轭函数、Fenchel不等式、拉格朗日乘子法、KKT条件

    最优化之凸集.凸函数.上确界.Jensen不等式.共轭函数.Fenchel不等式.拉格朗日乘子法.KKT条件.拉格朗日对偶 1.直线的向量表达 1.1 共线定理 对于任意两个向量a⃗,b⃗\vec{a ...

  7. 拉格朗日乘子法、KKT条件、拉格朗日对偶性

    拉格朗日乘子法.KKT条件.拉格朗日对偶性 转载于http://blog.csdn.net/sinat_17496535/article/details/52103852 笔记主要来源于维基百科和&l ...

  8. 一文详解从拉格朗日乘子法、KKT条件、对偶上升法到罚函数与增广Lagrangian乘子法再到ADMM算法(交替方向乘子法)

    最近看了ADMM算法,发现这个算法需要用到许多不少前备知识,在搜索补齐这些知识的过程中感觉网上的资料与总结在零散的同时又不够清晰,在此本文对这一块的内容进行汇总,同时表达自己的一些理解. 目录 拉格朗 ...

  9. 约束优化方法之拉格朗日乘子法与KKT条件

    来源:https://www.cnblogs.com/ooon/p/5721119.html 引言 本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可 ...

  10. 【数学理论】最优化问题:拉格朗日乘子法、KKT条件以及对偶问题

    前言 最优化问题的求解方法在机器学习算法中是经常被用到的.下面是一个最优化问题的一个简单概述: 求解f(x)f(x)f(x)最小值时的x∗x^*x∗,即: min⁡xf(x)\mathop {\min ...

最新文章

  1. Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点
  2. 实战|手把手教你训练一个基于Keras的多标签图像分类器
  3. 一个大神的Android成长之路
  4. 如何把暂存区恢复成和HEAD的一样?
  5. mysql如何抛出错误信息_如何捕获并重新抛出MySQL中的所有错误
  6. php 音频上传之ogg格式,如何快速将MP3格式转化成ogg格式
  7. VsCode使用EmmyLua插件调试Unity工程Lua代码
  8. IO流文件指针(移动和获取文件读指针)
  9. Albert Einstein—一个真正值得敬仰的伟人(什么超级什么星什么一班都靠边站兼滚蛋!)...
  10. 【Unity】【Android】问题记录
  11. 用Python将excel表格按照列拆分为多个表格
  12. Python 使用csv库处理CSV文件
  13. AI语音助手识别动画AE制作教程
  14. python结束运行快捷键_汇总学习Python必备的42个快捷键,看完收获满满
  15. php 获取某个日期n天之后的日期
  16. 电脑飞车,qq飞车电脑版
  17. 工程机械设备电子监测仪软件测试研究
  18. B2C的革命: QQ网购
  19. [国家集训队]数颜色
  20. 统计员工作总结范文参考

热门文章

  1. ATS连接 https
  2. TX2在Turtlebot测试kobuki
  3. vue.js开发环境部署
  4. NOIP2016愤怒的小鸟 题解报告 【状压DP】
  5. uitableView group模式下的间距问题
  6. 了解Linux操作系统的引导过程
  7. 自己动手打造属于自己的智能家居(二)
  8. Windows2000计划任务对机器进行重新启动
  9. 在 Windows下使用 fastText
  10. GBDT 和 AdaBoost