最近在视频的变换编码里推导最优变换(KL变换)时需要用拉格朗日乘子法,之前在机器学习的各种优化问题里也要用到这个方法,特此仔细钻研一番,总结如下:

注:这篇博客讲的很全面,这里部分参考了他的讲解。

注:本文只讲了拉格朗日函数的构造,看完本文后再去了解拉格朗日对偶函数的推导以及对偶问题


先上浓缩精华

  • 核心极值点处,函数和约束条件一定相切,梯度一定共线(同向or反向)!!!
    以此为思想基础构建拉格朗日函数,把等式约束条件和不等式约束都通过引入拉格朗日乘子(就是个系数)整合到一个新函数里,使得原本的复杂的多约束优化问题变成了最简单的无约束优化问题,直接对构造出的拉格朗日函数的所有变量(包括原本的变量xi,i=1,2…,mx_i,i=1,2\ldots,mxi​,i=1,2…,m和新引入的乘子变量 λk,μj,j=1,2…,n,k=1,2…,l\lambda_k,\mu_j,j=1,2\ldots,n,k=1,2\ldots,lλk​,μj​,j=1,2…,n,k=1,2…,l)求偏导等于零,得到的就是最终解。

  • 用途:求解含有等式约束的最优化问题的局部最优解!!(极值点不一定是最小点,所以不是全局最小哟);对于含有不等式约束的问题,要用到扩展的拉格朗日乘数法,这个扩展就是KKT条件的引入,更多细节参见这篇博文。


再谈完整细节

最优化问题按照约束条件的有无和类别可分为三类:
(一) “无约束" 优化问题
直接对所有mmm个变量求偏导,令偏导等于0,联立方程组求出来的点就可能是极值点,具体是不是那就代到原函数里看看是不是比周围的值都小就行。
∂Fxi=0i=1,2…,m\frac{\partial F}{x _i}=0 \quad i=1,2\ldots,mxi​∂F​=0i=1,2…,m
补充注解:

  1. 偏导等于0只是极值点的必要条件,所以可能是。
  2. 直观地看,极值点左右的导数一定异号,又因为函数连续,所以极值点的导数只能为0。
  3. 必要条件:满足必要条件不能说明一定是;不满足则一定不是!!
  4. 充分条件:满足充分条件则一定是;不满足则给出的信息为0

下面(二)(三)类优化问题都是通过构造拉格朗日函数把问题转化为第(一)类的。

(二)“等式约束” 优化问题
目标函数(待优化的函数)为f(x)f(x)f(x),约束条件为hk(x),k=1,2…,lh_k(x),k=1,2\ldots,lhk​(x),k=1,2…,l,问题建模为
minf(x)s.t.hk(x)=0min f(x) \quad s.t. \quad h_k(x)=0minf(x)s.t.hk​(x)=0
这时候我们构建拉格朗日函数
为什么这么构建参见知乎这个回答,很好理解,就因为梯度共线:
一个等式约束欸但表示对理解共线最有帮助:
∇f(x∗)+λ∇h(x∗)=0,x∗为极值点\nabla f(x^*)+\lambda\nabla h(x^*)=0,x^*为极值点∇f(x∗)+λ∇h(x∗)=0,x∗为极值点
多个等式约束则表示为:
∇f(x∗)+∑k=1lλk∇hk(x∗)=0,x∗为极值点\nabla f(x^*)+\sum_{k=1}^l\lambda_k \nabla h_k(x^*)=0,x^*为极值点∇f(x∗)+k=1∑l​λk​∇hk​(x∗)=0,x∗为极值点
L(x,λ)=f(x)+∑k=1lλkhk(x)L(x,\lambda)=f(x)+\sum_{k=1}^l\lambda_kh_k(x)L(x,λ)=f(x)+k=1∑l​λk​hk​(x)
L(x,λ)L(x,\lambda)L(x,λ)即拉格朗日函数,λk\lambda_kλk​是拉格朗日乘子.上面的公式实际上就是下面的拉格朗日函数对x求偏导的结果。

这时就成了第一类的无约束优化了,只是变量增多了lll个,同第一类问题,分别对m+lm+lm+l个变量求偏导,得出来的解代入目标函数就ok了!
∂Fλk=0,这得到的就是那组等式约束\frac{\partial F}{\lambda _k}=0 , 这得到的就是那组等式约束λk​∂F​=0,这得到的就是那组等式约束
∂Fxi=0,这得到的就是∇f(x∗)+∑k=1lλk∇hk(x∗)=0\quad \frac{\partial F}{x _i}=0,这得到的就是\nabla f(x^*)+\sum_{k=1}^l\lambda_k \nabla h_k(x^*)=0xi​∂F​=0,这得到的就是∇f(x∗)+k=1∑l​λk​∇hk​(x∗)=0
(三)“等式约束+不等式约束” 优化问题
这是最复杂也最常见的一种模型。问题建模为:
minf(x)s.t.hk(x)=0,gj(x)≤0j=1,2…,n;k=1,2…,lminf(x) \quad s.t.h_k(x)=0\quad,\quad g_j(x)\leq0\quad j=1,2\ldots,n;k=1,2\ldots,lminf(x)s.t.hk​(x)=0,gj​(x)≤0j=1,2…,n;k=1,2…,l
思路一样,还是要最终转化为无约束的简单优化问题,但这里要分为两步:

  1. 先把不等式约束条件转化为等式约束条件。 how?→\to→ 引入 松弛变量 / KKT乘子
  2. 再把等式约束转化为无约束优化问题。 how? →\to→ 同(二),引入拉格朗日乘子

构造拉格朗日函数为:
L(x,λ,μ)=f(x)+∑k=1lλkhk(x)+∑j=1nμjgj(x)L(x,\lambda,\mu)=f(x)+\sum_{k=1}^l\lambda_kh_k(x)+\sum_{j=1}^n\mu_jg_j(x)L(x,λ,μ)=f(x)+k=1∑l​λk​hk​(x)+j=1∑n​μj​gj​(x)

λk\lambda_kλk​是为等式约束引入的拉格朗日乘子
μj\mu_jμj​是为不等式约束引入的松弛变量

至此,含不等式约束的最复杂的优化问题也转化为无约束的简单问题了,剩下的就只有求偏导了。
即最终只需要求解,解出来的就可能是极值点啦(KKT也只是必要条件):
{∇f(x∗)+∑kλk∇hk(x∗)+∑jμj∇gj(x∗)=0(1)μj≥0(2)μjgj(x∗)=0(3)hk(x∗)=0(4)gj(x∗)≤0(5)\left\{ \begin{aligned} \nabla f(x^*) + \sum_{k}\lambda_k\nabla h_k(x^*)+\sum_{j}\mu_j\nabla g_j(x^*)& = &0 \quad (1)\\ \mu_j & \geq & 0 \quad (2)\\ \mu_jg_j(x^*) & = & 0 \quad (3)\\ h_k(x^*) & = & 0 \quad (4)\\ g_j(x^*) & \leq & 0\quad (5)\\ \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧​∇f(x∗)+k∑​λk​∇hk​(x∗)+j∑​μj​∇gj​(x∗)μj​μj​gj​(x∗)hk​(x∗)gj​(x∗)​=≥==≤​0(1)0(2)0(3)0(4)0(5)​

这里由于有不等式约束因此要引入KKT条件(Karush–Kuhn–Tucker conditions)

这个KKT可以说是很神秘很厉害了,之前学无线网络也一直在用它求解不等式优化问题,现在学机器学习,视频编码竟然还是要用,所以只要有不等式约束的优化是绕不开了,不过thank god也不算太难?(手动一个不太自信还很尴尬的微笑) 关于KKT条件,我这篇博文做了详解。

拉格朗日乘子法详解(Lagrange multiplier)相关推荐

  1. 判断kkt条件的例题_KKT条件和拉格朗日乘子法详解

    \(\frac{以梦为马}{晨凫追风}\) 最优化问题的最优性条件,最优化问题的解的必要条件和充分条件 无约束问题的解的必要条件 \(f(x)\)在\(x\)处的梯度向量是0 有约束问题的最优性条件 ...

  2. 机器学习--支持向量机(二)拉格朗日乘子法详解

    上节我们从线性回归模型出发详细阐述了支持向量的来源,以及为什么需要寻找支持向量,如何找到这决策函数等问题,最后问题转化为下面的求最大值问题: 先说明一下分类就是如果:          则被分为    ...

  3. 增广拉格朗日乘子法(Augmented Lagrange Method)

    增广拉格朗日乘子法(Augmented Lagrange Method) 在了解增广拉格朗日乘子法之前,我们先了解一下基本拉格朗日乘子法 拉格朗日乘子法 基本的拉格朗日乘子法,常用于解决函数在约束条件 ...

  4. 增广拉格朗日乘子法、ADMM

    增广拉格朗日乘子法 关于拉格朗日的定义,具体见:http://mp.blog.csdn.net/mdeditor/79341632 概述 增广拉格朗日乘子法(Augmented Lagrange Me ...

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

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

  6. 拉格朗日乘子法(Lagrange Multiplier)详解以及乘子lambda的意义

    注:目前开通个人网站朝思录,之后的博文将在上面更新,CSDN博客会滞后一点 主要介绍经典拉格朗日乘子法的原理,之后讨论该方法中出现的参数 λ \lambda λ的意义 拉格朗日乘子法的数学原理 经典拉 ...

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

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

  8. SVM-支持向量机理解(拉格朗日乘子法(Lagrange multiplier))

    关于支持向量机里的拉格朗日乘子法有很多文章,作为学习笔记这里就不详细描述了,只记录一些一般文章里跳过的难以理解部分 Support Vector Machine wiki : https://en.w ...

  9. 求解最优化问题的方法:拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

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

最新文章

  1. JFET直耦级联放大电路:MPF102,2SK102
  2. YYAnimatedImageView--gif在ios14之后只能播放一次
  3. python 连接db2_大迷糊的博客
  4. 【C++】45.尽量不要在构造函数中调用函数或开启线程
  5. Processing--鼠标响应(1)
  6. python123 helloworld_python入门
  7. C#黔驴技巧之去重(Distinct)
  8. 如何集成和使用EclEmma插件来获得良好的Junit覆盖率
  9. py脚本:linux系统下定时清理文件
  10. 如何使antd中table表格不换行
  11. Hive数仓之拉链表(原理、设计以及在Hive中的实现)
  12. Nginx源码分析 - 实战篇 - 编写一个阶段化的模块(25)
  13. mysql数据库数据表的指令_mysql数据库和表操作命令
  14. 高中计算机奥林匹克竞赛试题及答案,高中数学奥林匹克竞赛试题及答案.doc
  15. Eclipse中怎样将java项目转化为web项目?
  16. python数据分析学生成绩查询系统_python数据分析-学生成绩分析
  17. 2019.8.7 金华正睿集训总结Day11(ACM)
  18. 基于Xilinx CPLD的看门狗电路设计
  19. 鼠标移上去触动hover致使div向上移动几个相素(动画transition轻轻的移动)
  20. 2019java面试3年_Java回顾#3 – 2019年对于社区而言最重要的事情

热门文章

  1. 远程网络教学系统功能(用例图)
  2. python多任务,线程详解
  3. Flink 运维与调优
  4. 随便写的:新戏剧之王,一部广义上的烂片观后感
  5. Windows磁盘管理软件/磁盘管理工具/硬盘分区管理工具
  6. Java基础23 网络编程 socket套接字流 TCP传输总结
  7. mac下vscode代码格式化及其他常用快捷键
  8. [重磅]秦雯讲大数据:心动.幡动.风动
  9. 22一战上岸首师大电子信息经验分享|低成本获得大收益|电子信息
  10. excel表格如何换行