约束下的最优求解:拉格朗日乘数法和KKT条件

2023-11-11

  机器学习面对各种各样的求解极值或者最值问题 ,现在对常见的求解极值或者最值问题思路做一下理论上的梳理。

最值问题

简单了解最值问题

  求最值是非常常见的问题,比如如何选择交通路线,最快地到达某地;如何用手头的钱买到分量最重的水果等等。
  我们可以把需求定义为一个目标函数: f(x)
  最值问题也就可以表示为 min[f(x)]
  对于一个函数求解最值问题,我们要先查看函数的特性,比如是否单调,是否有拐点,是否有峰谷等。
  比如,在可导时,利用导数函数是否大于0,来判断函数是否增减,并且令导数为0来找到极值点。
  利用二阶导数是否大于0,来判断函数是否凹凸。

常见几种最值问题的形式

  (1)

min/maxf(w)

  (2)
min/maxf(w)
   s.t.gi(w)=0,i=1,2,...,n

  (3)
min/maxf(w)
   s.t.gi(w)=0,i=1,2,...,n;
   hj(w)0,j=1,2,...,m

  整体思路,就是无约束最好解决,带约束的转化为无约束的问题再解决。

约束

  上面说的是一般情况下,直接对函数求解最值。实际问题不会总是这么简单,还会有老多的限制的,比如我想省时间,还只花10元路费,那么该怎么选择路线;所买的商品单价不能小于15元,该怎么才能买到分量最多的水果。
  在实际情形下,比如我们的逻辑回归,我们会加上惩罚项 12wTw ,得到新的目标函数:
  

f(x)=Ferror+Fpenalty

  效果是对权重进行了约束,而且这个权重是分布于0附近的,这个惩罚怎么解释呢。这是一个直接给出的结果,其实最本质的表示应该是:
  
minFerror
  在约束 wTw1

 对原来的误差函数进行最优化求解。于是才有了上面那个加入惩罚之后的目标函数。

约束下的最值问题

  为什么会有上面的变换呢,可能大家还是一头雾水,为什么我在某个约束条件下求某个目标函数的最优解,就突然变成了最上面的新目标函数?
  这个疑惑的解答要先从拉格朗日乘数法讲起。

拉格朗日乘数法

  对于第二种形式,带约束条件的问题,我们更倾向于将其转化为无约束问题。在数学最优化问题中,拉格朗日乘数法是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。这种方法将一个有n 个变量与k 个约束条件的最优化问题转换为一个有n + k个变量的方程组的极值问题,其变量不受任何约束。这种方法引入了一种新的标量未知数,即拉格朗日乘数(:约束方程的梯度(gradient)的线性组合里每个向量的系数,搞不懂这句话在说神马)。
  上面这段话读起来挺绕的,还是举个例子吧
  目标是求 f(x,y)=x2y 的最大值
  同时满足 x2+y2=1
  怎么将这两个式子凑到一起呢?引入个系数变量 λ
  构造新目标函数 F(x,y,λ)=x2y+λ(x2+y21)
  我们看看新目标函数的特点:
  对 λ 求导,则得:(1) f(x,y,λ)λ=x2+y21
  对 x 求导,则得:(2)f(x,y,λ)x=2xy+2λx
  对 y 求导,则得:(3)f(x,y,λ)y=x2+2λy
  若是按照一个函数的最值存在于其极值的思想来解答,则令这三个式子为0,可以看到,原来的约束也包括进了新目标函数中,不过是引入了个新变量 λ
  并且在 F(x,y,λ) 取得极值时,与 f(x,y) 相等,因为 F 取得极值时,f(x,y,λ)λ=x2+y21=0 F(x,y,λ) 变为 f(x,y) 。故, F(x,y,λ) 的极值必然是f(x, y)的极值。这段话很重要~
  
  但是这里对原参数的偏导数里多出来的 λ 项怎么解释呢?
   λ 的物理意义:表示原目标函数在约束下,所能达到的最大增长率(梯度)。其解释如下:
   F(w,λ)=f(w)+λg(w) ;
   Fw=fw+λgw ;
   Fλ=g(w)
  令 Fw=0 ,则得 λ=fwgw 可以看出来原目标函数 f(w) 的的梯度(最大增长率)受到了 g(w) 的梯度约束。
  若是将 Fλ=g(w)=0 带入上述 λ 式子中,可以得到在确定约束条件下的原目标函数的梯度。(这个说法有问题没有?上面 λ 式子已经是在极值下求解得到的,不过没有考虑约束 g(x)=0 ,所以这个说法是没问题的)
  (因此,上面的求解最优值,就变成了在约束条件下,原目标函数在约束函数下的梯度求解问题。怎么感觉怪怪的,没想到就变成了这样的问题。错误原因:有地方理解的有问题,对新目标求极值,中间找到了参数间的关系,然后把一个变量表示了出来,只能说明新目标函数在极值时的某个参数的样子)
  
  画个图或许更直观一些。
  在约束条件下某目标函数的最值,只可能出现在约束函数的等高线和目标函数在参数面投影的相切的地方。
  

约束下目标函数最值图解

  上图中, f(x,y) 为目标函数, g(x,y)=c 为约束条件,我们将两者投影到 xy 平面上得到两者的等高线分布,体现在空间中就是 g(x,y)=0 向上做垂直切面,切割了 f(x,y) ,得到了个曲线,这个曲线投影到 xy 面上刚好与 g(x,y)=0 重合,可以看到随着 f(x,y) xy 范围缩小(对应其值逐渐增大),会有个与 g(x,y)=0 的切点B,对应于 f(x,y) 上的A点。A点则是满足约束的,刚好又是最值的地方。

对逻辑回归里惩罚的解释

  现在回过头来看,线性回归目标函数里面的惩罚,是怎么个情况,明白了没?结果发现还是没能够解释为什么要加惩罚 12wTw 。哎~!~好囧~!~
  经过跟马博和贾老师的讨论,终于把这个问题整出了一个较为合理的解释。
  首先高次多项式回归的评估函数是误差函数:
   cost(x,w)=12Mi=1[f(x,w)y]2 ;前面的1/2是为了后期求导的时候方便。
  现在对参数 w 进行约束,因为高次对应的参数会很大程度上影响拟合度,并且会有甩尾现象,想把其影响降到较小程度,并且尽可能保留主要部分(w0对应的信息)使得泛化能力强,我们想怎么去约束 w 呢?
  如果wTww20(二阶范数约束,肯定还有其他约束的情况),那岂不是实现了我们的约束目的,一方面对高次对应的参数进行了约束,一方面他们对整体的影响还不会对整体超过 w0 的影响。
  这样,还不能够用拉格朗日乘子法,因为该方法是解决等式约束的最值问题。怎么办呢?好好看看误差函数,这是一个凸函数,我们对 w 的约束是在某个范围内,那么根据上面手绘图来看,最值的解只可能出现在,误差函数的等高线与约束最外边缘的切点上。啊哈,这个地方给了我们很大启示,可以直接在约束边缘上找到误差函数的最小值即可。
  看下面这个图,就很直观地说明了这个问题。左侧为二阶范数约束,右侧为一阶范数约束。
  这里写图片描述
  于是对误差函数的在不等式wTww20的最值问题的解,就是误差函数在等式 wTw=w20 的最值的解。
  哈哈,终于可以正大光明的应用拉格朗日乘子法了,于是就有了我们加入惩罚之后的新的代价函数:
   Cost(x,w)=Mi=1[f(x,w)y]2+λ[wTww20]
  这地方离着我们在书本上看到的代价函数还有点区别,就是 λ 向量统一变成了 12 ,目测估计是为了方便求解。
  可以有其他的约束,比如 Mj=0|wj|qη

KKT条件下最优求解

  对于第三种情况,又有等式约束,又有不等式约束的,怎么搞呢?上面我们是用拉格朗日乘数法搞定的等式约束的问题,那么对于包括有不等式约束的,可不可以把拉格朗日乘数法扩展一下,充分利用它,解决现在的问题呢?答案是可以,就是满足KKT条件时的最值求解。
  KKT条件:在满足一些有规则的条件下,一个非线性规划(Nonlinear Programming)问题能有最优化解的一个必要和充分条件。这是一个广义化拉格朗日乘数的成果,KKT是三个作者的首字母,Karush & Kuhn &Tucker。
  求解的问题是:
  

minf(w)
   s.t.gi(w)=0,i=1,2,...,n;
   hj(w)0,j=1,2,...,m;

  什么条件下,上述问题有最值解呢?
  KKT出场了~
  先说 充分条件:
  如果有常数 μi0 vj 满足下述条件:
   f(w)+ni=1μigi(w)+mj=1vjhj(w)=0
  且 μigi(w)=0 for all i=1,2,...,n
  当然有个重要的前提假设,就是目标函数 f 和约束函数g都是凸函数。
  再说 必要条件:
  如果目标函数和约束函数在某点 w 连续可微,点w为一局部极小值,那么则存在一组所称乘子的常数 λ0, μi0(i=1,2,3,...,n) vj(j=1,2,...,m) 满足如下条件:
   λ+ni=1μi+mj=1|vj|>0
   λf(w)+ni=1μigi(w)+mj=1vjhj(w)=0
   μigi(w)=0 for i=1,2,...,n
  那么这个点 w 是全局最小值。(都是对参数 w <script type="math/tex" id="MathJax-Element-93">w</script>求导)

小结

  约束下的函数最值问题求解,即将约束问题转化为无约束问题,然后再去解决。
  中间会有一些小技巧,自己需要在实际应用中灵活应变。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

约束下的最优求解:拉格朗日乘数法和KKT条件 的相关文章

  • 文件或目录损坏且无法读取怎么删除文件或目录

    解决方法有几种 1 尝试为文件重命名 如果可以重命名的话 运行cmd 打开任务管理器 结束explorer进程 切换到cmd命令提示符状态下输入 Del 文件名 后就可以删除文件了 这种方法只适用于可以重命名的文件 在进行操作时先关闭其他一
  • SpringMvc进阶

    SpringMvc进阶 SpringMVC引言 一 常用注解 二 参数传递 三 返回值 SpringMVC引言 在Web应用程序开发中 Spring MVC是一种常用的框架 它基于MVC Model View Controller 模式 提
  • Java中的抽象类和接口

    目录 一 什么是抽象类 抽象类在实现多态中的意义 二 接口是什么 通过接口实现多态 三 抽象类和接口的区别 各位铁汁们大家好呀 今天让我们继续学习java 看看java中的抽象类和接口到底是什么 一 什么是抽象类 我们之前学过什么是类 那么
  • Jackson常用方法以及jacksonUtil工具类

    前言 项目中我们通常使用ajax返回json数据格式的形式进行前后端数据交互 所以会用到java数据json数据互相转化 通常我们的做法是在项目中创建一个工具类进行转化处理 如下 我的demo包含了项目中常用的jacksonUtil类 以及

随机推荐

  • JDBC连接MySQL出现误com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database

    JDBC连接MySQL出现误com mysql jdbc exceptions jdbc4 MySQLSyntaxErrorException Unknown database test 问题原因 在用连接池进行MySQL连接时出错找不到改
  • UE_sqlite使用

    UE sqlite使用 PS 参考文档 https blog csdn net object article details 102785739 sqlite官方 https www sqlite org download html
  • 结构体中成员的引用

    结构体如下 struct student int num char name 20 char sex float score 1 结构体的初始化 struct student aa 1001 zhang M 80 5 2 引用整个结构体 s
  • Qt中的Q_D宏和d指针

    1 ZTS7QObject 一 Q D的在文件中的提法 Q D的设置意在方便地获取私有类指针 文件为qglobal h 下面的 是宏定义的连字符 假设类名是A 那么A Private翻译过来就是APrivate 1 define Q D C
  • MySQL服务无法启动。服务没有报告任何错误。问题解决!

    项目场景 提示 MySQL服务无法启动 服务没有报告任何错误 问题解决 问题描述 在启动MySQL是遇到问题 提示mysql服务无法启动 服务没有报告任何错误 原因分析 我这里的问题主要是因为你的data文件夹中有影响启动的文件 注意 清空
  • MyBatis-Plus&Druid

    MyBatis Plus Druid MyBatis Plus 核心功能 Spring Boot 集成 Druid 数据源 MyBatis Plus MyBatis Plus 简称 MP 是一个MyBatis 的增强工具 在MyBatis
  • 中兴e8820刷openwrt_中兴E8820V2(电信天翼宽带类似新路由3歌华链)-拆机及OpenWrt固件...

    本帖最后由 yumeimm 于 2020 12 20 10 53 编辑 2020 12更新 增加Openwrt v19 07 5固件 2020 10更新 添加openwrt v19 07 4固件 2020 05更新 添加openwrt v1
  • 什么是NAT?

    NAT是一种地址转换技术 它可以将IP数据报文头中的IP地址转换为另一个IP地址 并通过转换端口号达到地址重用的目的 NAT作为一种缓解IPv4公网地址枯竭的过渡技术 由于实现简单 得到了广泛应用 NAT解决了什么问题 随着网络应用的增多
  • 设计模式--装饰器模式

    装饰器模式 属于结构型模式基本原理 创建一个装饰器用来对一个现有对象添加新功能 不改变对象结构主要流程 1 根据对象创建一个修饰类 该修饰类要保持方法签名完整 2 在修饰类中根据需求添加新的功能 3 使用时将对象或对象的引用传入修饰类中 注
  • rabbitmq简介

    开发十年 就只剩下这套Java开发体系了 gt gt gt 1 AMQP AMQP协议是一个高级抽象层消息通信协议 RabbitMQ是AMQP协议的实现 它主要包括以下组件 1 1 Server broker 接受客户端连接 实现AMQP消
  • DELETE与DROP 在数据库中的使用方法和区别

    DML data manipulation language 数据操纵语言 就是我们最经常用到的 SELECT UPDATE INSERT DELETE 主要用来对数据库的数据进行一些操作 DML 语句都是显式提交 执行完之后 处理的数据
  • tsconfig之moduleResolution详解

    作用 moduleResolution 模块解析策略 是指编译器在查找导入模块内容时所遵循的流程 模块解析分析 如下代码 编辑器会采用模块解析策略 Node 和 Classic 去查找 moduleB 在哪里 如果最后找不到 编译器不能解析
  • RESTful API接口

    RESTful规范 Restful API是目前比较成熟的一套互联网应用程序的API设计理念 Rest是一组架构约束条件和原则 如何Rest约束条件和原则的架构 我们就称为Restful架构 Restful架构具有结构清晰 符合标准 易于理
  • JAVA报错:Variable 'vv' is accessed from within inner class, needs to be declared final

    内部类中使用但未声明的任何局部变量必须在内部类的正文之前明确分配
  • struts2中validator配置文件验证不起作用的问题解决办法、根源

    在采用struts的xml配置方式校验数据时 发现怎么也不起作用 无法按照正常流程 走到input指向的页面 一 问题的解决 很多博客说明了自己查找的方式 最后都指明了是因为配置文件格式不正确的原因 出现这种问题的时候 应该从下面4个部分考
  • SpringCloud Alibaba 教程

    SpringCloud Alibaba GitHub官方地址 https github com alibaba spring cloud alibaba blob master README zh md SpringCloud Alibab
  • 大学生团体天梯赛(第九届)

    题目地址 天梯赛 include
  • 憨批的语义分割重制版4——TF2 搭建自己的PSPNet语义分割平台

    憨批的语义分割重制版4 TF2 搭建自己的PSPNet语义分割平台 学习前言 什么是PSPNet模型 代码下载 PSPNet实现思路 一 预测部分 1 主干网络介绍 2 加强特征提取结构 3 利用特征获得预测结果 二 训练部分 1 训练文件
  • Vue3 之 readonly

    Vue3 之 readonly readonly 取得一个对象 反应性或普通 或ref并返回一个只读代理 访问的任何嵌套属性也将是只读的 传入普通对象等返回只读代理 传入普通数值或字符串不能变成只读 例如 readonly abc cons
  • 约束下的最优求解:拉格朗日乘数法和KKT条件

    机器学习面对各种各样的求解极值或者最值问题 现在对常见的求解极值或者最值问题思路做一下理论上的梳理 最值问题 简单了解最值问题 求最值是非常常见的问题 比如如何选择交通路线 最快地到达某地 如何用手头的钱买到分量最重的水果等等 我们可以把需