参考文献:https://www.cnblogs.com/sddai/p/5728195.html

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

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

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

(1)无约束条件

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

(2)等式约束条件

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

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

        

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

   例如给定椭球:

          

    求这个椭球的内接长方体的最大体积。这个问题实际上就是条件极值问题,即在条件      下,求的最大值。

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

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

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

然后解变量的偏导方程:

    ......,

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

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

         

   对求偏导得到

     

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

          

   带入解得最大体积为:

    

 我们现在需要证明:F取得极值的时候f也能取得极值?

   至于为什么这么做可以求解最优化?维基百科上给出了一个比较好的直观解释。

 举个二维最优化的例子:

     min f(x,y)

      s.t. g(x,y) = c

  这里画出z=f(x,y)的等高线(函数登高线定义见百度百科):

                    

绿线标出的是约束g(x,y)=c的点的轨迹。蓝线是f(x,y)的等高线。箭头表示斜率,和等高线的法线平行。从梯度的方向上来看,显然有d1>d2。绿色的线是约束,也就是说,只要正好落在这条绿线上的点才可能是满足要求的点。如果没有这条约束,f(x,y)的最小值应该会落在最小那圈等高线内部的某一点上。而现在加上了约束,最小值点应该在哪里呢?显然应该是在f(x,y)的等高线正好和约束线相切的位置,因为如果只是相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优值。

  如果我们对约束也求梯度∇g(x,y),则其梯度如图中绿色箭头所示。很容易看出来,要想让目标函数f(x,y)的等高线和约束相切,则他们切点的梯度一定在一条直线上(f和g的斜率平行)。

  也即在最优化解的时候:∇f(x,y)=λ(∇g(x,y)-C)    (其中∇为梯度算子; 即:f(x)的梯度 = λ* g(x)的梯度,λ是常数,可以是任何非0实数,表示左右两边同向。)

即:▽[f(x,y)+λ(g(x,y)−c)]=0,λ≠0

至此,我们的问题已经明了了:要想得到在g约束下f的极值就得让f的导数和g的导数共线,(看图可知这样才能两条线相切,从而取得约束下的最小值),而二者导函数共线即是F导函数为0。

接下来我们证明:在二者取得极值时的极值为什么会是相等的?

  由于g(x,y)−c总等于零,F(x,y,λ)=f(x,y)+λ(g(x,y)−c) 在达到极值时,该极值也就等于f(x,y)的极值。

简单的说,在F(x,y,λ)取得最优解时,(由于F(x,y,λ)已经转化为了无约束的最优化问题,所以其最优解也就是极值点,即导数为0,▽[f(x,y)+λ(g(x,y)−c)]=0的点),f(x)与g(x) 梯度共线▽f(x,y)=λ(g(x,y)−c),即在条件约束g(x)下,f(x)的最优化解。而且λ(g(x,y)−c)始终为0,所以此时F(x,y,λ)的极值也就是f(x,y)的极值。

(3)不等式约束条件

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

       

则我们定义不等式约束下的拉格朗日函数L,则L表达式为L(a, b, x)= f(x) +∑λj(hj(x))+ ∑uk(gk(x)):

        

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

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

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

接下来主要介绍KKT条件,推导及应用。详细推导过程如下:(这里的证明其实是证明了如果满足了KKT条件,为什么可以使用对偶函数公式和拉格朗日乘子法求解原问题,菜菜的pdf里面则是从解决原始问题为什么需要满足KKT条件这一角度来讲解的)

下式中公式(2),由于此时μ是变量,f(x)是常数,所以可以如此计算。

对于软间隔的公式推导以及理解:https://blog.csdn.net/Dominic_S/article/details/83002153

拉格朗日乘子法(Lagrange Multiplier) 和KKT条件的更多相关文章

  1. 拉格朗日乘子法(Lagrange multiplier)和KKT条件

    拉格朗日乘子法: KKT条件:

  2. 【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

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

  3. 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

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

  4. 装载:深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

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

  5. Machine Learning系列--深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

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

  6. 【机器学习】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

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

  7. 支持向量机(SVM)必备概念(凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件、KKT条件)

    SVM目前被认为是最好的现成的分类器,SVM整个原理的推导过程也很是复杂啊,其中涉及到很多概念,如:凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件.KKT条件还有 ...

  8. 拉格朗日乘子法 Lagrange multipliers

  9. 机器学习——最优化问题:拉格朗日乘子法、KKT条件以及对偶问题

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

随机推荐

  1. redis批量操作

    由于redis没有批量删除命令,所以借助xargs redis-cli -h 127.0.0.1 keys testdata_2018* |xargs redis-cli -h 127.0.0.1 d ...

  2. 大爽Python入门教程 0-1 安装python

    大爽Python入门公开课教案 点击查看教程总目录 一 如何找到下载地址并下载 下面展示找到下载地址的方法步骤 嫌步骤太慢可直接跳到第4步, 查看详细下载地址 使用搜索引擎搜索python 打开搜索结 ...

  3. python实现开闭操作

    目录: 开闭操作的作用 (一)开操作 (二)闭操作 (三)开操作完成其他任务 (1)提取水平垂直线 (2)消除干扰线 (3)提取满足要求的形状 开闭操作的作用: (一)开操作(特点作用:消除噪点--- ...

  4. [bzoj2668]交换棋子

    基本思路是,要让所有黑点都相对应(所以首先判断黑点的个数).如果没有交换限制,可以按以下方法建图:源点向所有初始黑点连(1,0)的边,最终黑点向汇点连(1,0)的边,相邻的两点连边(inf,1),最小 ...

  5. 洛谷 P7718 -「EZEC-10」Equalization(差分转化+状压 dp)

    洛谷题面传送门 一道挺有意思的题,现场切掉还是挺有成就感的. 首先看到区间操作我们可以想到差分转换,将区间操作转化为差分序列上的一个或两个单点操作,具体来说我们设 \(b_i=a_{i+1}-a_i\ ...

  6. CSP-S 2021 游记

    福兮祸之所伏 胜利是一种肯定,代表我应该在这条路上坚定不移地走下去. 胜利也是一种危机,它粉饰太平.养虎自齧,并把人最丑陋的一些想法暴露出来:虚荣心.骄傲心都在这个过程中被放大,懒惰心.自满心也找到了 ...

  7. 走向深蓝:那些 Linshey 不会的算法

    网络流 树论: Algorithm Round-1 Round-2 Algorithm Round-1 Round-2 点分治 \(\checkmark\) 边分治 \(\checkmark\) 动态 ...

  8. Python—安装跟爬虫相关的包

    舆情爬虫分析:硬件:   4台服务器,分别放redis.python爬虫.mysql和 kafka四大板块.软件:1. mysql2. redis    #leap1  /usr/bin/redis- ...

  9. open 函数小结

    umask 掩码 open 函数的时候需要注意,掩码去反之后和设置的值想与,得到真正的值. 可以在命令行 使用umask 来查询 umask 000 设置掩码

  10. Python os模块与sys模块

    1.os模块简单使用及说明 # -*- coding:utf-8 -*- """ os模块主要用于系统,处理程序与系统交互问题 大部分如属性等功能在linux系统中会使用 ...