转载自:https://www.cnblogs.com/xinchen1111/p/8804858.html

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

minf(x)minf(x)

min f(x)
 如果问题是 maxf(x)maxf(x)maxf(x) 也可以通过取反转化为求最小值 min−f(x)min−f(x) min−f(x),这个是一个习惯。对于这类问题在高中就学过怎么做。只要对它的每一个变量求导,然后让偏导为零,解方程组就行了。

     所以在极值点处一定满足 df(x)dx=0df(x)dx=0\frac {df(x)}{dx}=0(只是必要条件,比如 f(x)=x3f(x)=x3f(x)=x^3在 x=0x=0x=0 处就不是极值点),然后对它进行求解,再代入验证是否真的是极值点就行了。对于有些问题可以直接通过这种方法求出解析解(如最小二乘法)。

     但是也有很多问题解不出来或者很难解,所以就需要梯度下降法、牛顿法、坐标下降法之类的数值迭代算法了(感知机 、logistic 回归中用到)。

     对于这些迭代算法就像下面这张图一样,我们希望找到其中的最小值。一个比较直观的想法是先找一个起点,然后不断向最低点靠近。就先把一个小球放到一个碗里一样。

     一开始要找一个起始点,然后确定走的方向和距离,最后还要知道什么时候停止。这三步中最难的应该是确定走的方向。走的慢点还可以接受,要是方向错了就找不到最小值了~。所以走的距离可以简单的设为一个比较小的值。起始点可以随机选一个 (x0,y0)(x0,y0)(x_0,y_0)。关键是方向,可以选择 (x0,y0)(x0,y0)(x_0,y_0) 处的梯度的反方向,这是函数在这个点下降最快的方向(原因可以看知乎中忆臻的回答)。它是一个向量,然后它的大小就是走的距离,为了防止太大而走过头,导致不断在最小值附近震荡,需要乘上一个比较小的值(称为学习率),最终的停止条件就是梯度的大小很接近于 0(在极值点处的梯度大小就是 0)就行了。这种方法依靠梯度确定下降方向的方法叫做梯度下降法。

 对 f(x)f(x)f(x) 求极小值的流程就是:

  1. 随机选定x0x0x_0
  2. 得到函数在 x0x0x_0 的梯度,然后从 x0x0x_0 向前走一步。计算式是:xnew0=xold0−α∇f(x)x0new=x0old−α∇f(x)x_0^{new}=x_0^{old}-\alpha \nabla f(x)
  3. 重复第 2 步,直到梯度接近于 ooo(小于一个事先设定的很小的数),或者到达指定的迭代上限。

     除了这种方法之外,其中第 2 步还可以这样做,固定 x" role="presentation" style="position: relative;">xxx, 把它作为常数。就变成只有一个变量的优化问题了,直接求导为 0 就可以得到最优点,向前走到 (x0,y1)(x0,y1)(x_0,y_1)处,然后固定 y1y1y_1, 对 xxx 进行相同的操作。这种每次只优化一个变量的方法叫做坐标下降法。

     然后就是进一步的,我们可能要在满足一定约束条件的情况下最小化目标函数,比如有一个等式约束:

minf(x)s.t.h(x)=0" role="presentation">minf(x)s.t.h(x)=0minf(x)s.t.h(x)=0

min f(x) \\ s.t. h(x)=0
     解决这个的时候问题不能先用上面的方法求出 f(x)f(x)f(x) 的极值点,然后留下满足方程 h(x)=0h(x)=0h(x)=0 的。因为这个问题的解可能根本不是 minf(x)minf(x)minf(x) 的解,它们是没有关系的。那么还是要从问题本身去找线索:

     如图,其中的圆圈是指目标函数 f(x,y)f(x,y)f(x,y) 投影在平面上的等值线,表示在同一个圆圈上,黑线是约束条件h(x)=0h(x)=0h(x)=0的函数图像。所以等值线与函数图像相交的点其实就是所有满足约束的点。那么极值点只有可能在等值线与函数图像相切的地方取到,因为如果在相交的地方取到,那么沿着 h(x)h(x)h(x) 的图像往前走或者往后走,一定还有其它的等值线与它相交,也就是 f(x,y)f(x,y)f(x,y) 的值还能变大和变小,所以交点不是极值点,只有相切的时候才有可能是极值点(不可能同时变大和变小了)。在相切的地方 h(x)h(x)h(x) 的梯度和 f(x,y)f(x,y)f(x,y) 的梯度应该是在同一条直线上的。(这一点可以这么想,在切点处两个函数的梯度都与切平面垂直,所以在一条直线上) 

 所以满足条件的极值点一定满足:∇f(x,y)=λ∇h(x,y)(λ=0是允许的,表示f(x,y)本身的极值点刚好在切点上)∇f(x,y)=λ∇h(x,y)(λ=0是允许的,表示f(x,y)本身的极值点刚好在切点上)∇f(x,y)=λ∇h(x,y)( λ=0是允许的,表示 f(x,y) 本身的极值点刚好在切点上)然后和原来的等式方程 h(x,y)=0h(x,y)=0h(x,y)=0 联立,然后只要解出这个方程组,就可以得到问题的解析解了。当然也存在解不出来的情况,就需要用罚函数法之类的方法求数值解了。

     为了方便和好记,就把原来的优化问题写成 f(x,y)+λh(x,y)f(x,y)+λh(x,y)f(x,y)+λh(x,y)的形式,然后分别对 λ,x,yλ,x,yλ,x,y求偏导,并且令偏导为 0 就行了,和之前得到的方程组是一样的。这种方法叫拉格朗日乘数法。    

 如果有多个等式约束怎么办呢,如下图:

     这里的平面和球面分别代表了两个约束 h1(x)h1(x)h1(x) 和 h2(x)h2(x)h2(x),那么这个问题的可行域就是它们相交的那个圆。这里蓝色箭头表示平面的梯度,黑色箭头表示球面的梯度,那么相交的圆的梯度就是它们的线性组合(只是直观上的),所以在极值点的地方目标函数的梯度和约束的梯度的线性组合在一条直线上。所以就满足:

∇f(x)=λμi∇hi(x)=∑i=12λi∇hi(x)h1(x)=0h2(x)=0∇f(x)=λμi∇hi(x)=∑i=12λi∇hi(x)h1(x)=0h2(x)=0

\nabla f(x) = \lambda \mu_i \nabla h_i(x) = \sum \limits _{i=1}^2 \lambda _i \nabla h_i(x)\\ h_1(x) =0\\ h_2(x)=0
 大于2个约束的情况也一样。为了好记,将原来的约束的问题写成 L(x,λ)=f(x)+∑i−1nλi∇hi(x)L(x,λ)=f(x)+∑i−1nλi∇hi(x)L(x,\lambda) = f(x)+\sum \limits _{i-1}^n \lambda_i\nabla h_i(x)的形式,然后对x,λx,λx,\lambda 求偏导,然后让它们为 0。结果像上面一样直接列方程组是一样的。这个可以看做是一种简记,或者是对偶问题,这个函数叫做拉格朗日函数。

  再进一步,如果问题中既有等式约束,又有不等式约束怎么办呢?对于:

minf(x)s.t.h(x)=0g(x)≤0minf(x)s.t.h(x)=0g(x)≤0

min\qquad f(x)\\ s.t. \quad h(x)=0\\ g(x) \le 0
 当然也同样约定不等式是 ⩽⩽\leqslant ,如果是 ⩾⩾\geqslant 只要取反就行了。对于这个问题先不看等式约束,对于不等式约束和目标函数的图:

 阴影部分就是可行域,也就是说可行域从原来的一条线变成了一块区域。那么能取到极值点的地方可能有两种情况:

  • 还是在h(x)h(x) h(x) 和 等值线相切的地方
  • f(x)f(x)f(x) 的极值点本身就在可行域里面。

 因为如果不是相切,那么同样的,对任意一个在可行域中的点,如果在它附近往里走或者往外走,f(x)f(x)f(x)一般都会变大或者变小,所以绝大部分点都不会是极值点。除非这个点刚好在交界处,且和等值线相切;或者这个点在可行域内部,但是本身就是 f(x)f(x)f(x)的极值点。如下图(维基百科上的图~):

 对于第一种情况,不等式约束就变成等式约束了,对f(x)+λh(x)+μg(x)f(x)+λh(x)+μg(x)f(x)+\lambda h(x)+\mu g(x)

 用拉格朗日乘子法:

∇(x)+λ∇h(x)+μ∇g(x)=0h(x)=0g(x)=0μ≥0(1)(1)∇(x)+λ∇h(x)+μ∇g(x)=0h(x)=0g(x)=0μ≥0

\begin{equation} \begin{aligned} \nabla(x) +\lambda\nabla h(x)+\mu \nabla g(x) = 0\\ h(x) = 0 \\ g(x)= 0\\ \mu \ge 0 \end{aligned} \end{equation}
 这里需要解释一下,为什么不是 μ≠0μ≠0\mu \ne 0而是 μ≥0μ≥0\mu \ge 0。后面的约束比前面的更强。看“不等式约束”那个图,我们已经知道了问题中的可行域是在 g(x)≤0g(x)≤0g(x)\le 0 一侧,而 g(x)g(x)g(x)的梯度是指向大于 0 的一侧,也就是不是可行域的一侧。而求的问题是极小值,所以 f(x)f(x)f(x)在交点处的梯度是指向可行域的一侧,也就是说两个梯度一定是相反的。所以也就可以确定这里的系数一定是大于 0 的。而等式约束由于不知道 h(x)h(x)h(x)的梯度方向,所以对它没有约束,那么为什么 μμ\mu 还能等于 0 呢,因为极值点可能刚好在 g(x)g(x)g(x) 上。

 对于第二种情况,不等式约束就相当于没有,对 f(x)+λh(x)f(x)+λh(x)f(x)+\lambda h(x) 用拉格朗日乘子法:
$$
\begin{equation}
\begin{aligned}
\nabla(x) +\lambda\nabla h(x)+= 0\
h(x) = 0 \
g(x) \le 0\

\end{aligned}
\end{equation}
$$
 最好把两种情况用同一组方程表示出来。对比一下两个问题,不同的是第一种情况中有 $\mu \ge 0$且

g(x)=0g(x)=0g(x)=0, 第二种情况 μ=0μ=0\mu =0 且 g(x)≤0g(x)≤0g(x)\le 0 综合两种情况,可以写成 μg(x)=0μg(x)=0\mu g(x)=0且 μ≥0μ≥0\mu \ge 0 且 g(x)≤0g(x)≤0g(x)\le 0

∇(x)+λ∇h(x)+μ∇g(x)=0μg(x)=0μ≥0h(x)=0g(x)≤0(2)(2)∇(x)+λ∇h(x)+μ∇g(x)=0μg(x)=0μ≥0h(x)=0g(x)≤0

\begin{equation} \begin{aligned} \nabla(x) +\lambda\nabla h(x)+\mu \nabla g(x) = 0\\ \mu g(x)= 0\\ \mu \ge 0 \\ h(x) = 0 \\ g(x) \le 0 \end{aligned} \end{equation}
 这个就是 KKT 条件。它的含义是这个优化问题的极值点一定满足这组方程组。(不是极值点也可能会满足,但是不会存在某个极值点不满足的情况)它也是原来的优化问题取得极值的必要条件,解出来了极值点之后还是要代入验证的。但是因为约束比较多,情况比较复杂,KKT 条件并不是对于任何情况都是满足的。要满足 KKT 条件需要有一些规范性条件(Regularity conditions),就是要求约束条件的质量不能太差,常见的比如:

  1. LCQ:如果 h(x)h(x)h(x) 和 g(x)g(x)g(x)都是形如 Ax+bAx+bAx+b的仿射函数,那么极值一定满足 KKT 条件。
  2. LICQ:起作用的 g(x)g(x)g(x) 函数(即g(x)g(x)g(x) 相当于等式约束的情况)和 h(x)h(x)h(x) 函数在极值点处的梯度要线性无关,那么极值一定满足 KKT 条件。
  3. Slater 条件:如果优化问题是个凸优化问题,且至少存在一个点满足 h(x)=0h(x)=0h(x)=0 和g(x)=0g(x)=0 g(x)=0,极值一定满足 KKT 条件。并且满足强对偶性质。

真正理解拉格朗日乘子法和KKT条件相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 拉格朗日乘子法 KKT条件

    目录 1. 拉格朗日乘子法用于最优化的原因 2. 最优化问题三种情况 2.1 无约束条件 2.2 等式约束条件:拉格朗日乘子法 2.3 不等式约束条件:KKT 3. Lagrange对偶函数 3.1  ...

  8. 拉格朗日乘子法和KTT条件

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

  9. 机器学习之拉格朗日乘子法和 KKT

    有约束的最优化问题 最优化问题一般是指对于某一个函数而言,求解在其指定作用域上的全局最小值问题,一般分为以下三种情况(备注:以下几种方式求出来的解都有可能是局部极小值,只有当函数是凸函数的时候,才可以 ...

最新文章

  1. [译]开始学习webpack
  2. javax.servlet.jsp.JspTagException:
  3. 相机下载_索尼黑卡相机与手机互联APP相关
  4. MyCat分布式数据库集群架构工作笔记0012---高可用_Mycat双主双从复制原理
  5. Hadoop-MR实现日志清洗(三)
  6. java中10个用户注册_JavaWeb(十)Session
  7. python输出姓名
  8. java计算器项目 wbs分解_WBS功能分解
  9. android 资源国际化 国家/地区 语言缩写代码
  10. 日志分析软件 Splunk
  11. 看漫画学Python:有趣、有料、好玩、好用:全彩版PDF
  12. STM32F401的PWM输出
  13. Linux查看最近开关机记录
  14. 关于csdn 博客图片无法加载的问题!
  15. STM32【H7】理论——综述、HAL库简述
  16. PS进阶篇——如何PS软件给衣服换个颜色或图案风格(七)
  17. uni-app项目(分类页)
  18. 「镁客·请讲」小不点刘筱璇:新制造时代,用3D打印让世界个性起来
  19. linux如何转汇编,你如何在linux中创建一个将文件转换为大写的x86汇编程序?
  20. 基于android的智能照明,一种基于Android、IOS与ZigBee的智能LED照明控制系统的制作方法...

热门文章

  1. 谷歌地球最新host_高大上,谷歌黑科技让你看够
  2. 管道流量采集实验指导书
  3. contenteditable=“true“
  4. PMP_蒙特卡洛分析_风险定量分析工具
  5. 计算机病毒常见的寄生场所,4章节 计算机病毒寄生环境分析.ppt
  6. __thiscall 转 __cdecl 时的问题,关于函数指针
  7. LBS 百度地图定位APP
  8. 软件设计模式介绍与入门
  9. 有什么性价比高的运动蓝牙耳机值得推荐?双十一运动装备必选!
  10. 银行招聘考试怎么备考