拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件。前提是:只有当目标函数为凸函数时,使用这两种方法才保证求得的是最优解。

对于无约束最优化问题,有很多经典的求解方法,参见无约束最优化方法

拉格朗日乘子法

先来看拉格朗日乘子法是什么,再讲为什么。

$\min\;f(x)\\s.t.\;h_{i}(x)=0\;\;\;\;i=1,2...,n$

这个问题转换为

\begin{equation}min\;[f(x)+\sum_{i=1}^{n}\lambda_{i}h_{i}(x)]\label{lagrange}\end{equation}

其中$\lambda_{i}\ne{0}$,称为拉格朗日乘子。

下面看一下wikipedia上是如何解释拉格朗日乘子法的合理性的。

现有一个二维的优化问题:

$\min\;f(x,y)\\s.t.\;g(x,y)=c$

我们可以画图来辅助思考。

绿线标出的是约束$g(x,y)=c$的点的轨迹。蓝线是$f(x,y)$的等高线。箭头表示斜率,和等高线的法线平行。

从图上可以直观地看到在最优解处,f和g的斜率平行。

$\bigtriangledown[f(x,y)+\lambda(g(x,y)-1)]=0\;\;\;\;\lambda\ne{0}$

一旦求出$\lambda$的值,将其套入下式,易求在无约束极值和极值所对应的点。

$F(x,y)=f(x,y)+\lambda(g(x,y)-c)$

新方程$F(x,y)$在达到极值时与$f(x,y)$相等,因为$F(x,y)$达到极值时$g(x,y)-c$总等于零。

\eqref{lagrange}取得极小值时其导数为0,即$\bigtriangledown{f(x)}+\bigtriangledown{\sum_{i=1}^{n}\lambda_{i}h_{i}(x)}=0$,也就是说$f(x)$和$h(x)$的梯度共线。

KKT条件

先看KKT条件是什么,再讲为什么。

$\begin{equation}let\;L(x,\mu)=f(x)+\sum_{k=1}^q\mu_{k}g_{k}(x)\end{equation}$

其中$\mu_{k}\ge{0},g_{k}(x)\le{0}$

$\because \left.\begin{matrix}\mu_{k}\ge{0}\\g_{k}(x)\le{0}\end{matrix}\right\}$=>$\mu{g(x)}\le{0}$

$\therefore$ \begin{equation}\max_{\mu}L(x,\mu)=f(x)\label{a}\end{equation}

$\therefore$\begin{equation}\min_{x}f(x)=\min_{x}\max_{\mu}L(x,\mu)\label{firsthalf}\end{equation}

$\max_{\mu}\min_{x}L(x,\mu)=\max_{\mu}[\min_{x}f(x)+\min_{x}\mu{g(x)}]=\max_{\mu}\min_{x}f(x)+\max_{\mu}\min_{x}\mu{g(x)}=\min_{x}f(x)+\max_{\mu}\min_{x}\mu{g(x)}$

又$\because\left.\begin{matrix}\mu_{k}\ge{0}\\g_{k}(x)\le{0}\end{matrix}\right\}$=>$\min_{x}\mu{g(x)}=\left\{\begin{matrix}0 & if\;\mu=0\;or\;g(x)=0\\ -\infty  & if\;\mu>0\;and\;g(x)<0\end{matrix}\right.$

$\therefore \max_{\mu}\min_{x}\mu{g(x)}=0$此时$\mu=0\;or\;g(x)=0$

\begin{equation}\therefore \max_{\mu}\min_{x}L(x,\mu)=\min_{x}f(x)+\max_{\mu}\min_{x}\mu{g(x)}=\min_{x}f(x)\label{secondhalf}\end{equation}此时$\mu=0\;or\;g(x)=0$

联合\eqref{firsthalf},\eqref{secondhalf}我们得到$\min_{x}\max_{\mu}L(x,\mu)=\max_{\mu}\min_{x}L(x,\mu)$

亦即$\left.\begin{matrix}L(x,\mu)=f(x)+\sum_{k=1}^q\mu_{k}g_{k}(x)\\\mu_{k}\ge{0}\\g_{k}(x)\le{0}\end{matrix}\right\}$=>$\min_{x}\max_{\mu}L(x,\mu)=\max_{\mu}\min_{x}L(x,\mu)=\min_{x}f(x)$

我们把$\max_{\mu}\min_{x}L(x,\mu)$称为原问题$\min_{x}\max_{\mu}L(x,\mu)$的对偶问题,上式表明当满足一定条件时原问题、对偶的解、以及$\min_{x}f(x)$是相同的,且在最优解$x^*$处$\mu=0\;or\;g(x^*)=0$。把$x^*$代入\eqref{a}得$\max_{\mu}L(x^*,\mu)=f(x^*)$,由\eqref{secondhalf}得$\max_{\mu}\min_{x}L(x,\mu)=f(x^*)$,所以$L(x^*,\mu)=\min_{x}L(x,\mu)$,这说明$x^*$也是$L(x,\mu)$的极值点,即$\frac{\partial{L(x,\mu)}}{\partial{x}}|_{x=x^*}=0$。

最后总结一下:

$\left.\begin{matrix}L(x,\mu)=f(x)+\sum_{k=1}^q\mu_{k}g_{k}(x)\\\mu_{k}\ge{0}\\g_{k}(x)\le{0}\end{matrix}\right\}$=>$\left\{\begin{matrix}\min_{x}\max_{\mu}L(x,\mu)=\max_{\mu}\min_{x}L(x,\mu)=\min_{x}f(x)=f(x^*)\\\mu_{k}{g_{k}(x^*)=0}\\\frac{\partial{L(x,\mu)}}{\partial{x}}|_{x=x^*}=0\end{matrix}\right.$

KKT条件是拉格朗日乘子法的泛化,如果我们把等式约束和不等式约束一并纳入进来则表现为:

$\left.\begin{matrix}L(x,\lambda,\mu)=f(x)+\sum_{i=1}^{n}\lambda_{i}h_{i}(x)+\sum_{k=1}^q\mu_{k}g_{k}(x)\\\lambda_{i}\ne{0}\\h_{i}(x)=0\\\mu_{k}\ge{0}\\g_{k}(x)\le{0}\end{matrix}\right\}$=>$\left\{\begin{matrix}\min_{x}\max_{\mu}L(x,\lambda,\mu)=\max_{\mu}\min_{x}L(x,\lambda,\mu)=\min_{x}f(x)=f(x^*)\\\mu_{k}{g_{k}(x^*)=0}\\\frac{\partial{L(x,\lambda,\mu)}}{\partial{x}}|_{x=x^*}=0\end{matrix}\right.$

注:$x,\lambda,\mu$都是向量。

$\frac{\partial{L(x,\lambda,\mu)}}{\partial{x}}|_{x=x^*}=0$表明$f(x)$在极值点$x^*$处的梯度是各个$h_{i}(x^*)$和$g_{k}(x^*)$梯度的线性组合。

转载 http://www.cnblogs.com/zhangchaoyang/articles/2726873.html

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

  1. 关于拉格朗日乘子法和KKT条件

    解密SVM系列(一):关于拉格朗日乘子法和KKT条件 标签: svm算法支持向量机 2015-08-17 18:53 1214人阅读 评论(0) 收藏 举报  分类: 模式识别&机器学习(42 ...

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

        这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容.     首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值: \[min \quad f(x)\]     如 ...

  3. 机器学习笔记——拉格朗日乘子法和KKT条件

    拉格朗日乘子法是一种寻找多元函数在一组约束下的极值方法,通过引入拉格朗日乘子,可将有m个变量和n个约束条件的最优化问题转化为具有m+n个变量的无约束优化问题.在介绍拉格朗日乘子法之前,先简要的介绍一些 ...

  4. 重温拉格朗日乘子法和KKT条件

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

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

  6. 拉格朗日乘子法&KKT条件

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

  7. 拉格朗日乘子法 - KKT条件 - 对偶问题

    接下来准备写支持向量机,然而支持向量机和其他算法相比牵涉较多的数学知识,其中首当其冲的就是标题中的拉格朗日乘子法.KKT条件和对偶问题,所以本篇先作个铺垫. 大部分机器学习算法最后都可归结为最优化问题 ...

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

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

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

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

随机推荐

  1. iOS开发--应用崩溃日志揭秘(二)

    场景 4: 吃棒棒糖时闪退! 用户邮件说, “当rage master吃棒棒糖时应用就闪退…” 另一用户说, “我让rage master 吃棒棒糖,没几次应用就闪退了!”崩溃日志如下: Incide ...

  2. 表单验证:$tablePrefix(定义表前缀);$trueTableName = 'yonghu',找到真实表名(yonghu)表;create($attr,0)两个参数;批量验证(返回数组);ajax+动态验证表单

    *$tablePrefix是定义在Model中的,优先级大于配置文件中,如果项目中表前缀全部比如为"a_",并且在配置文件中定义了 'DB_PREFIX'=>'a_' 后期如 ...

  3. listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.

    1.错误提示:Cannot have multiple items selected when the SelectionMode is Single. 刚刚在处理两个Listbox时,将其中一个li ...

  4. Asp.net磁力链接搜索引擎源码-www.btboot.com

    演示网址:www.btboot.com 源码出售中.... 联系QQ:313843288

  5. LINQ to Entities does not recognize the method 'System.DateTime ToDateTime(System.String)' method

    System.Data.Objects.EntityFunctions和System.Data.Objects.SqlClient.SqlFunctions中的方法进行比较,如下 where Syst ...

  6. RocketMQ源码 — 三、 Consumer 接收消息过程

    Consumer pull message 订阅 在Consumer启动之前先将自己放到一个本地的集合中,再以后获取消费者的时候会用到,同时会将自己订阅的信息告诉broker 接收消息 consume ...

  7. 富文本编辑器Quill的使用

    我们经常需要使用富文本编辑器从后台管理系统上传文字,图片等用于前台页面的显示,Quill在后台传值的时候需要传两个参数,一个用于后台管理系统编辑器的显示,一个用前台页面的显示,具体代码如下截图: 另Q ...

  8. 标签传播算法(Label Propagation Algorithm, LPA)初探

    0. 社区划分简介 0x1:非重叠社区划分方法 在一个网络里面,每一个样本只能是属于一个社区的,那么这样的问题就称为非重叠社区划分. 在非重叠社区划分算法里面,有很多的方法: 1. 基于模块度优化的社 ...

  9. 如何在源码里修改openwrt root密码

    root密码在etc/shadow文件里,但里边的密码是加密过后的.具体的加密方式我不清楚,应该是Linux里的一套加密算法.但要达到修改源码密码的目的,我还是想到了一个间接的办法.首先在源码里改成t ...

  10. hdu 6168 Numbers

    Numbers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...