目录

1. 拉格朗日乘子法用于最优化的原因

2. 最优化问题三种情况

2.1 无约束条件

2.2 等式约束条件:拉格朗日乘子法

2.3 不等式约束条件:KKT

3. Lagrange对偶函数

3.1 对偶函数与原问题的关系

3.2 Lagrange对偶问题

(1)弱对偶性

(2)强对偶性

(3)KKT条件


在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法,即:

  • 拉格朗日乘子法:在有等式约束时使用拉格朗日乘子法;
  • KKT条件:在有不等约束时使用KKT条件。

1. 拉格朗日乘子法用于最优化的原因

考虑一个简单的问题目标函数f,等式约束,求解极小值点。

f(x)在二维平面上画出等高线就是一条条斜率相同的直线,h(x)=0在二维平面上画出等高线就是一个圆,如下图所示。可以明显的看出,在圆圈h(x)的限制下,直线f(x)的最小值为-2,在左下角直线x1+x2=2和圆的交点上。

(1)不考虑圆h(x)的限制时,f(x)要得到极小值,需要往f(x)的负梯度(下降最快的方向)方向走,如下左图蓝色箭头。

(2)考虑圆h(x)的限制时,要得到极小值,需要沿着圆的切线方向走,如下右图红色粗箭头。注意这里的方向不是h(x)的梯度,而是正交于h(x)的梯度,h(x)梯度:右图的红色细箭头。在极小值点,f(x)和h(x)的等高线是相切的。

容易发现,在关键的极小值点处,f(x)的负梯度和h(x)的梯度在同一直线上,如下图左下方critical point的蓝色和红色箭头所示。注意图中所示是同向的,但是这里并不一定是同向,有可能反向(因为等式约束h(x)=0,把h(x)变成-h(x)求解是一样的,这个时候h(x)的梯度就相反了)。

由此可知,在极小值点,h(x)和f(x)的梯度在同一线上,有

所以,对于f(x)和h(x)而言,只要满足上面这个式子,同时使得h,解得的x就是我们要求的极小值点(或极大值点,为了简单起见我们只讨论极小值点)

要做到这一点,可以构造一个拉格朗日函数,对函数令偏导等于0求解,恰好等价于“满足上面这个式子,同时使得h(x) = 0",原问题转化为对拉格朗日函数求极值问题,这就是拉格朗日乘子法,如下图所示(注意一下这个μ的正负变化)。

参考:拉格朗日乘子法和KKT条件

2. 最优化问题三种情况

     我们这里提到的最优化问题通常是指对于给定的某一函数,求其在指定作用域上的全局最小值(因为最小值与最大值可以很容易转化,即最大值问题可以转化成最小值问题)。提到KKT条件一般会附带的提一下拉格朗日乘子。对学过高等数学的人来说比较拉格朗日乘子应该会有些印象。二者均是求解最优化问题的方法,不同之处在于应用的情形不同,KKT条件是对拉格朗日乘子法的一种泛化。

一般情况下,最优化问题会碰到一下三种情况:

2.1 无约束条件

  这是最简单的情况,解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点。将结果带回原函数进行验证即可。

2.2 等式约束条件:拉格朗日乘子法

设目标函数为f(x),约束条件为h_k(x),形如:

s.t. 表示subject to ,“受限于”的意思,表示有个约束条件。

                       

  则解决方法是消元法或者拉格朗日法。消元法比较简单不在赘述,这里主要讲拉格朗日法,因为后面提到的KKT条件是对拉格朗日乘子法的一种泛化。

拉格朗日乘子法的求解流程大概包括以下几个步骤: 
     1)构造拉格朗日函数 
     2)解变量的偏导方程 
     3)代入目标函数即可 
   关键在于构造拉格朗日函数,后面求解实际上就是高数里面基本的求偏导数的问题了。我们不妨另: 

  然后分别对每一个变量求导,得出来的解代入目标函数就ok了!

                                           

  例如:求这个椭球的内接长方体的最大体积

在条件

下,求

最大值。

这个问题实际上就是条件极值问题,即在条件(1) 下,求的最大值。

  当然这个问题实际可以先根据条件消去 z (消元法),然后带入转化为无条件极值问题来处理。但是有时候这样做很困难,甚至是做不到的,这时候就需要用拉格朗日乘数法了。

    首先定义拉格朗日函数F(x):

          ( 其中λk是各个约束条件的待定系数。)

然后解变量的偏导方程:

                                  ......,

   如果有个约束条件,就应该有+1个方程。求出的方程组的解就可能是最优化值(高等数学中提到的极值),将结果带回原方程验证就可得到解。

   回到上面的题目,通过拉格朗日乘数法将问题转化为

         

   对求偏导得到

     

   联立前面三个方程得到,带入第四个方程解之

          

   带入解得最大体积为:

    

2.3 不等式约束条件:KKT

设目标函数f(x),不等式约束为g(x),有的教程还会添加上等式约束条件h(x)。此时的约束优化问题描述如下:

        

则我们定义不等式约束下的拉格朗日函数L,即广义拉格朗日函数

        

其中,是拉格朗日乘子,f(x)是原目标函数,hj(x)是第j个等式约束条件,λj是对应的约束系数,gk是不等式约束,uk是对应的约束系数。

  常用的方法是KKT条件,同样地,把所有的不等式约束、等式约束和目标函数全部写为一个式子L(a, b, x)= f(x) + a*g(x)+b*h(x),

  KKT条件是说最优值必须满足以下条件:

    (1)        原约束

    (2) 

    (3) 

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

  基于KKT条件,不等式约束条件的问题基本也就解决了,下面来说说我自己的一点心得吧! 
第一点:拉格朗日乘子法求解优化问题是很有效的方法,对于限制条件比较多的情况下,特别是限制条件较为复杂的情况下,利用该方法可以很容易的求解出来。 
第二点:约束条件其实就是限定了问题的解决范围,学会如何转化和考量限制条件是解决问题的关键。 
第三点:基础知识的重要性,比如说高数如果学不好的话。

3. Lagrange对偶函数

在约束优化问题中,常常用拉格朗日对偶性来将原始问题转为对偶问题,通过解对偶问题的解来得到原始问题的解。

3.1 为什么要利用对偶?

首先要明确,对偶问题的解不一定直接等于原问题的解(弱对偶),但是,对偶问题有两点性质。

(1) 满足某些条件时,对偶问题直接等于原问题的解(强对偶)

(2)无论原始问题是否是凸的,对偶问题都是凸优化问题

显然,在某些情况下,直接对对偶问题求解可以得到原问题的解,而且对偶问题是凸优化,易于求解。所以利用对偶来求解是很有用的。

3.2 对偶函数与原问题的关系

(1)原始问题:

假设f(x),ci(x),hj(x)是定义在Rn上的联系可微函数,考虑约束条件下最优化问题:

称此约束最优化问题为原问题

(2)广义拉格朗日函数

(3)Lagrange对偶函数:

定义拉格朗日对偶函数或者对偶函数g为拉格朗日函数关于x取得的最小值,即对α、β,有:

通俗理解就是每确定一组(α,β),就要找到一个x使得L最小,不同的(α,β)对应不同的g函数值。

(4)对偶函数与原问题的关系:

所以对偶函数是原问题的最优值下界,虽然不等式成立,但是如果α<0,并且让α趋近于负无穷,这个时候g(α,β)=-∞,虽然也满足不等式,但是此时没有任何意义。所以只有当α≥0,这个时候g(α,β)>-∞时,对偶函数才能给出原目标函数一个非平凡有意义的下界,称此条件下的(α,β)是对偶可行的。图示如下:

在图中,实线——代表的是目标函数f(x),虚线——代表的是约束条件c(x),彩色的点线——代表λ取不同值的时候对应的拉格朗日函数L。我们可以看到,在约束条件可行(c(x)≤0)的区间内,拉格朗日函数都是小于目标函数的。在可行区间内,目标函数的最值将在x = -0.46处取得p∗=1.54。

为什么对偶函数一定是凹函数呢?

其实L可以理解为一个以固定x带入c(x)和h(x)作为常数值系数,α、β作为变量的仿射函数。所谓仿射函数,就是f(x)=a*x+b形式,其实就是线性函数了。

所以,g(α,β)为很多个仿射函数的逐个x取值点取最小值:

L=Aα+Bβ+C      其中:A=c(x)    B=h(x)    C=f(x)

例如:L=2α+3β+1,L=α+2β+4, L=5α+β+3等等。

便于理解,先不考虑β,这样大致展示的图像就是如下:

里面的每一条直线,都是以某一固定x作为系数,α作为变量的线性函数的直线,也就是当x固定时候,随着α的变化,L的值不断发生变化。

当我们沿着L所在轴竖着切下来的时候,也就是图中个蓝色线,这个时候其实就是α固定,而对应不同的x情况下,L值的一个变化范围。由图可知,红色线就是每次固定α,而找到一个x,使得L最小的走势线,也就是g(α,β)的函数曲线,如下图:

凹折线就是g(α,β)的曲线,水平虚线就是原问题的最优函数值P*。由此可知,无论原问题和约束条件是什么样的,对偶函数都是凹函数,且都小于等于原问题最优值。

3.3 Lagrange对偶问题

对于任意一组(α,β),其中α≥0,拉格朗日对偶函数给出了原问题的最优值的一个下界,因此,我们可以得到和参数α、β相关的一个下界。一个自然问题是:从Lagrange函数能得到的最好下界是什么?可以将这个问题表述为优化问题:

上述问题就称之为Lagrange对偶问题

前面讲只有当α≥0,g(α,β)>-∞时此时才有意义,满足这样一组条件的(α,β)是上述对偶问题的一个可行解。如果一个解(α*,β*)是上述对偶问题的最优解,则称解(α*,β*)是对偶最优解或者最优Lagrange乘子。

此时对偶问题是一个凸优化问题,这是因为极大化目标函数是一个凹函数,且约束集合是一个凸集。

(1)弱对偶性

Lagrange对偶问题的最优值,我们用*表示,根据定义,这是通过Lagrange函数得到的原问题最优值*的最好下界。特别地,我们有下面简单但是非常重要的不等式

即使原问题不是凸问题,上述不等式也成立,这个性质称为弱对偶性。

(2)强对偶性

与弱对偶性相对应的有一个强对偶性(strong duality) ,强对偶即满足:

强对偶是一个非常好的性质,因为在强对偶成立的情况下,可以通过求解对偶问题来得到原始问题的解,在 SVM 中就是这样做的。当然并不是所有的对偶问题都满足强对偶性 ,在 SVM 中是直接假定了强对偶性的成立,其实只要满足一些条件,强对偶性是成立的,比如说 Slater 条件与KKT条件。

(3)KKT条件

假设x*是原始问题的最优解,α*和β*是对偶问题的最优解。如果强对偶成立,那么原问题最优解和对偶问题最优解必须满足KKT条件,属于充分必要条件。

参考:

拉格朗日对偶理解:https://www.cnblogs.com/gczr/p/10521551.html

拉格朗日乘子法 KKT条件相关推荐

  1. 最优控制理论 六、拉格朗日乘子法和KKT条件

    拉格朗日乘子法和KKT条件 1. 等式约束最优化 2. 不等式约束最优化 2.1 1个不等式约束 2.2 KKT条件 2.3 二维不等式约束图解 3. MATLAB不等式约束优化 总结 4. 参考文献 ...

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

    转载自:https://www.cnblogs.com/xinchen1111/p/8804858.html  这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容. 首先从无约束的优 ...

  3. 【数学基础】运筹学:拉格朗日乘子法和KKT条件(上)

    引言 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.通常,对于等式约束问题,采用拉格朗日乘子法.对 ...

  4. 解密SVM系列(一):关于拉格朗日乘子法和KKT条件

    转载 原地址https://blog.csdn.net/on2way/article/details/47729419 写在之前 支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧 ...

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

    转自:http://www.cnblogs.com/zhangchaoyang/articles/2726873.html 拉格朗日乘子法(Lagrange Multiplier)和KKT(Karus ...

  6. 拉格朗日乘子法-KKT不等式约束

    文章目录 不等式约束 极小值点落在可行域内(不包含边界) 极小值点落在可行域外(包含边界) 总结 不等式约束 对于不等式约束g(x)<=0,和等式约束h(x)=0不一样,h(x)=0可以在平面上 ...

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

    转载于:https://www.cnblogs.com/invisible2/p/11441485.html

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

    拉格朗日乘子法(Lagrange Multiplier)和KKT条件 一:前言 如果我们现实生活中的多元值求最优化的问题,我们会遇到一下三种场景: 无条件约束的优化问题 有等式约束的优化问题 有不等式 ...

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

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

最新文章

  1. 微软Win8将有多个版本 四款面向ARM平台
  2. w7设置双显示器_win7怎么用双显示器,如何设置???
  3. 23种设计模式C++源码与UML实现--命令模式
  4. Node.js 官方文档中文版
  5. 解决spring boot1.5以上版本@ConfigurationProperties提示“Spring Boot Configuration Annotation Processor not..
  6. mysql必会语法_sql语法:sql必读必会(二)mysql中的函数大全
  7. Linux之进程通信20160720
  8. 《数据挖掘——概念与技术》笔记
  9. cad怎么倒圆角_CAD哪些技巧是菜鸟必备,哪些又让你相见恨晚?
  10. 【小5聊】重装系统之台式电脑BIOSTAR映泰主板,启动U盘PE系统以及重装后无法启动情况
  11. python换证件照底色
  12. 解决 zsh:command not found
  13. 2022年安全员-A证操作证考试题模拟考试平台操作
  14. 【Java8新特性】Stream流
  15. 小红书最新用户量数据_近半年DAU峰回路转 重新审视小红书用户价值
  16. 典型计算机电路组成,硬件工程师必会的几道题
  17. 中富金石股票投资靠谱吗?如何收取服务费
  18. shell脚本中的export和PWD的作用
  19. 如何看待马云又唱歌又拍电影
  20. 阿里巴巴Java 开发手册 码出高效,码出质量 1.4.0

热门文章

  1. 框架:SpringBoot构建Restful service完成Get和Post请求
  2. 2.LRU算法实现 [C++]
  3. 常见拒绝服务型攻击原理及行为特征
  4. Android --- RecyclerViwe中使用SnapHelper报错:“An instance of OnFlingListener already set.”
  5. Py之smtplib:smtplib(aiosmtplib)的简介、安装、使用方法之详细攻略
  6. HighNewTech之Job:关于人工智能领域专业的公司求职数据分析(最全)
  7. Crawler:爬虫基于urllib.request库实现获取指定网址上的所有图片
  8. DL框架之Keras:深度学习框架Keras框架的简介、安装(Python库)、相关概念、Keras模型使用、使用方法之详细攻略
  9. CSDNmarkdown编辑器直接写代码的小效果(一生愿)
  10. ajax和jsonp