拉格朗日乘子法详解(Lagrange multiplier)
最近在视频的变换编码里推导最优变换(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
补充注解:
- 偏导等于0只是极值点的必要条件,所以可能是。
- 直观地看,极值点左右的导数一定异号,又因为函数连续,所以极值点的导数只能为0。
- 必要条件:满足必要条件不能说明一定是;不满足则一定不是!!
- 充分条件:满足充分条件则一定是;不满足则给出的信息为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λkhk(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
思路一样,还是要最终转化为无约束的简单优化问题,但这里要分为两步:
- 先把不等式约束条件转化为等式约束条件。 how?→\to→ 引入 松弛变量 / KKT乘子
- 再把等式约束转化为无约束优化问题。 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λkhk(x)+j=1∑nμjgj(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μjgj(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)相关推荐
- 判断kkt条件的例题_KKT条件和拉格朗日乘子法详解
\(\frac{以梦为马}{晨凫追风}\) 最优化问题的最优性条件,最优化问题的解的必要条件和充分条件 无约束问题的解的必要条件 \(f(x)\)在\(x\)处的梯度向量是0 有约束问题的最优性条件 ...
- 机器学习--支持向量机(二)拉格朗日乘子法详解
上节我们从线性回归模型出发详细阐述了支持向量的来源,以及为什么需要寻找支持向量,如何找到这决策函数等问题,最后问题转化为下面的求最大值问题: 先说明一下分类就是如果: 则被分为 ...
- 增广拉格朗日乘子法(Augmented Lagrange Method)
增广拉格朗日乘子法(Augmented Lagrange Method) 在了解增广拉格朗日乘子法之前,我们先了解一下基本拉格朗日乘子法 拉格朗日乘子法 基本的拉格朗日乘子法,常用于解决函数在约束条件 ...
- 增广拉格朗日乘子法、ADMM
增广拉格朗日乘子法 关于拉格朗日的定义,具体见:http://mp.blog.csdn.net/mdeditor/79341632 概述 增广拉格朗日乘子法(Augmented Lagrange Me ...
- 一文看懂拉格朗日乘子法、KKT条件和对偶问题
因为想申请 CSDN 博客认证需要一定的粉丝量,而我写了五年博客才 700 多粉丝,本文开启关注才可阅读全文,很抱歉影响您的阅读体验 拉格朗日乘子法是解约束优化问题的常用方法,它和 KKT 条件.Sl ...
- 拉格朗日乘子法(Lagrange Multiplier)详解以及乘子lambda的意义
注:目前开通个人网站朝思录,之后的博文将在上面更新,CSDN博客会滞后一点 主要介绍经典拉格朗日乘子法的原理,之后讨论该方法中出现的参数 λ \lambda λ的意义 拉格朗日乘子法的数学原理 经典拉 ...
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...
- SVM-支持向量机理解(拉格朗日乘子法(Lagrange multiplier))
关于支持向量机里的拉格朗日乘子法有很多文章,作为学习笔记这里就不详细描述了,只记录一些一般文章里跳过的难以理解部分 Support Vector Machine wiki : https://en.w ...
- 求解最优化问题的方法:拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...
最新文章
- JFET直耦级联放大电路:MPF102,2SK102
- YYAnimatedImageView--gif在ios14之后只能播放一次
- python 连接db2_大迷糊的博客
- 【C++】45.尽量不要在构造函数中调用函数或开启线程
- Processing--鼠标响应(1)
- python123 helloworld_python入门
- C#黔驴技巧之去重(Distinct)
- 如何集成和使用EclEmma插件来获得良好的Junit覆盖率
- py脚本:linux系统下定时清理文件
- 如何使antd中table表格不换行
- Hive数仓之拉链表(原理、设计以及在Hive中的实现)
- Nginx源码分析 - 实战篇 - 编写一个阶段化的模块(25)
- mysql数据库数据表的指令_mysql数据库和表操作命令
- 高中计算机奥林匹克竞赛试题及答案,高中数学奥林匹克竞赛试题及答案.doc
- Eclipse中怎样将java项目转化为web项目?
- python数据分析学生成绩查询系统_python数据分析-学生成绩分析
- 2019.8.7 金华正睿集训总结Day11(ACM)
- 基于Xilinx CPLD的看门狗电路设计
- 鼠标移上去触动hover致使div向上移动几个相素(动画transition轻轻的移动)
- 2019java面试3年_Java回顾#3 – 2019年对于社区而言最重要的事情