前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >拉格朗日乘数法的原理,我用10幅图把它讲清楚

拉格朗日乘数法的原理,我用10幅图把它讲清楚

作者头像
double
发布于 2019-12-27 05:28:53
发布于 2019-12-27 05:28:53
4.4K0
举报
文章被收录于专栏:算法channel算法channel

机器学习是一个目标函数优化问题,给定目标函数f,约束条件会有一般包括以下三类:

  1. 仅含等式约束
  2. 仅含不等式约束
  3. 等式和不等式约束混合型

当然还有一类没有任何约束条件的最优化问题

关于最优化问题,大都令人比较头疼,首先大多教材讲解通篇都是公式,各种符号表达,各种梯度,叫人看的云里雾里。

有没有结合几何图形阐述以上问题的?很庆幸,还真有这么好的讲解材料,图文并茂,逻辑推导严谨,更容易叫我们理解拉格朗日乘数法KKT条件为什么就能求出极值。

1 仅含等式约束

假定目标函数是连续可导函数,问题定义如下:

然后,

通过以上方法求解此类问题,但是为什么它能求出极值呢

这是本篇文章写作目的,解释为什么这种方法就能求出极值。

2 找找 sense

大家时间都有限,只列出最核心的逻辑,找找sense, 如有兴趣可回去下载PPT仔细体会。

此解释中对此类问题的定义:

为了更好的阐述,给定一个具体例子,锁定:

所以,f(x)的一系列取值包括0,1,100,10000等任意实数:

但是,约束条件h(x)注定会约束f(x)不会等于100,不会等于10000...

一个可行点:

3 梯度下降

我们想要寻找一个移动x的规则,使得移动后f(x+delta_x)变小,当然必须满足约束h(x+delta_x)=0

使得f(x)减小最快的方向就是它的梯度反方向,即

因此,要想f(x+delta_x) 变小,通过图形可以看出,只要保持和梯度反方向夹角小于90,也就是保持大概一个方向,f(x+delta_x)就会变小,转化为公式就是:

如下所示的一个delta_x就是一个会使得f(x)减小的方向,但是这种移动将会破坏等式约束: h(x)=0,关于准确的移动方向下面第四小节会讲到

4 约束面的法向

约束面的外法向:

约束面的内法向:

绿圈表示法向的正交方向

x沿着绿圈内的方向移动,将会使得f(x)减小,同时满足等式约束h(x) = 0

5 提出猜想

我们不妨大胆假设,如果满足下面的条件:

根据第四小节讲述,delta_x必须正交于h(x),所以:

所以:

至此,我们就找到f(x)偏导数等于0的点,就是下图所示的两个关键点(它们也是f(x)与h(x)的临界点)。且必须满足以下条件,也就是两个向量必须是平行的:

6 完全解码拉格朗日乘数法

至此,已经完全解码拉格朗日乘数法,拉格朗日巧妙的构造出下面这个式子:

还有取得极值的的三个条件,都是对以上五个小节中涉及到的条件的编码

关于第三个条件,稍加说明。

对于含有多个变量,比如本例子就含有2个变量x1, x2,就是一个多元优化问题,需要求二阶导,二阶导的矩阵就被称为海塞矩阵(Hessian Matrix)

与求解一元问题一样,仅凭一阶导数等于是无法判断极值的,需要求二阶导,并且二阶导大于0才是极小值,小于0是极大值,等于0依然无法判断是否在此点去的极值。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
今天,我要干掉 if ... else ...
近日在公司领到一个小需求,需要对之前已有的试用用户申请规则进行拓展。我们的场景大概如下所示:
没有故事的陈师傅
2021/04/26
5770
今天,我要干掉 if ... else ...
抛弃繁杂的if判断,使用它试一试!
近日在公司领到一个小需求,需要对之前已有的试用用户申请规则进行拓展。我们的场景大概如下所示:
Java技术精选
2021/09/15
3000
Java规则引擎drools:drt动态生成规则并附上具体项目逻辑
由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面。
ydymz
2018/09/05
5.4K0
一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService
本文进行JavaSE基础内容:Executor执行器体系的整体介绍。该文是整体框架介绍,并非局限于某一个使用的细节。由于我不止一次的被咨询说ExecutorService和ScheduledExecutorService什么区别和联系,以及ThreadPoolExecutor和ThreadPoolTaskExecutor有什么不一样之类的问题,因此决定写此文科普一下。
YourBatman
2020/04/08
3K0
一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService
徒手撸了一个API网关,理解更透彻了,代码已上传github,自取~
来源 | cnblogs.com/2YSP/p/14223892.html 一、背景 最近在github上看了soul网关的设计,突然就来了兴趣准备自己从零开始写一个高性能的网关。经过两周时间的开发,
猿天地
2021/02/22
7510
徒手撸了一个API网关,理解更透彻了,代码已上传github,自取~
30个类手写Spring核心原理之自定义ORM(上)(6)
说到ResultSet,有Java开发经验的“小伙伴”自然最熟悉不过了,不过我相信对于大多数人来说也算是“最熟悉的陌生人”。从ResultSet取值操作大家都会,比如:
Tom弹架构
2021/12/16
5620
Java各种规则引擎
(2)新建配置文件/src/resources/META-INF/kmodule.xml
matinal
2020/11/27
5.3K1
Java各种规则引擎
Executor执行器与线程池
Java使用Executor框架执行多线程任务,创建与操作系统线程一对一的映射线程,由操作系统分配CPU来执行。称为任务的两级调度模型,如下图所示:
搬砖俱乐部
2019/06/15
9670
编程写判断还在用if?试试规则执行器是不是用的更顺手!
近日在公司领到一个小需求,需要对之前已有的试用用户申请规则进行拓展。我们的场景大概如下所示:
Java程序猿
2021/06/18
4230
dubbo路由代码分析3(condition路由器)
这篇说说,dubbo condition类型路由器的路由解析和执行过程 由 https://cloud.tencent.com/developer/article/1109552 这篇我们可以看到 condition类型路由器是由condition路由工厂获取,源码如下 public class ConditionRouterFactory implements RouterFactory { public static final String NAME = "condition";
技术蓝海
2018/04/26
1.5K0
dubbo路由代码分析3(condition路由器)
XXL-JOB系列二之执行器注册
如果是在基于Spring的项目中使用xxl-job,那么是由XxlJobSpringExecutor这个类来进行JobHanlder的初始化,首先这个类实现了SmartInitializingSingleton接口,这个接口的作用是在Spring容器管理的所有单例对象(非懒加载)完成实例化之后执行其回调方法afterSingletonsInstantiated, 在该方法中由initJobHanlderMethodRepository去完成初始化操作
用户9511949
2024/06/27
5340
报警系统QuickAlarm之报警执行器的设计与实现
根据前面一篇总纲的博文,将整体结构划分为了四大块,本文则主要目标集中在第一块,报警执行器(AlarmExecute)的设计与加载上了 主要的关注点无外乎 定义-》加载-》实现逻辑三块了: AlarmExecute 的接口定义 如何加载用户自定义的AlarmExecute AlarmExecute的内部实现 I. AlarmExecute接口定义 在定义接口之前,先来根据几个问题来加深下这个概念的理解: 1. 基础知识 说一下这个报警执行器到底是干嘛的? 执行具体的报警逻辑(感觉说了依据废话) 因此不同的报警
一灰灰blog
2018/03/29
7130
报警系统QuickAlarm之报警执行器的设计与实现
用建造者模式实现一个防SQL注入的ORM框架
以构建一门课程为例,一个完整的课程由PPT课件、回放视频、课堂笔记、课后作业组成,但是这些内容的设置顺序可以随意调整,我们用建造者模式来代入理解一下。首先创建一个产品类Course。
Tom弹架构
2021/10/28
1K0
Spark sql规则执行器RuleExecutor(源码解析)
Spark sql通过Analyzer中 定义的rule把Parsed Logical Plan解析成 Analyzed Logical Plan;通过Optimizer定义的rule把 Analyzed Logical Plan 优化成 Optimized Logical Plan 。
数据仓库践行者
2020/10/29
1.5K0
Spark sql规则执行器RuleExecutor(源码解析)
数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 执行
本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述 2. ExecutorEngine 2.1 ListeningExecutorService 2.2 关闭 2.3 执行 SQL 任务 3. Executor 3.1 StatementExecutor 3.2 PreparedStatementExecutor 3.3 BatchPreparedStatementExecutor 4. ExecutionEvent 4.1 EventBus 4.2 BestEffortsDelive
芋道源码
2018/03/02
1.2K0
数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 执行
Elastic-Job系列一之执行器注册启动
以springboot为例看下elastic-job的执行器启动流程,启动配置类为elasticjob-lite-spring-boot-starter中的ElasticJobLiteAutoConfiguration,如下
用户9511949
2024/07/07
4160
mybatis源码之执行器解析 原
-从上图中可以看出所有执行器都实现了Executor接口,定义了一些通用的操作,Executor的接口定义如下
用户2603479
2019/08/31
7200
Dubbo 路由机制的实现
Dubbo 路由机制是在服务间的调用时,通过将服务提供者按照设定的路由规则来决定调用哪一个具体的服务。
ytao
2020/06/04
1.1K0
Dubbo 路由机制的实现
SpringBoot入门建站全系列(三十四)使用Drools规则引擎做排班系统
Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接嵌入到规则文件中,这令 Drools 的学习更加吸引人。
品茗IT
2020/05/28
2.6K0
if-else 判断语句过多该如何处理?
我们平时在写代码的时候,if-else判断语句基本上必不可少,当我们的判断语句只有一两层的时候,类似下面这种,情况还好,基本上能接受;
Java极客技术
2022/12/04
6260
推荐阅读
相关推荐
今天,我要干掉 if ... else ...
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 1 仅含等式约束
    • 这是本篇文章写作目的,解释为什么这种方法就能求出极值。
  • 2 找找 sense
  • 3 梯度下降
    • 如下所示的一个delta_x就是一个会使得f(x)减小的方向,但是这种移动将会破坏等式约束: h(x)=0,关于准确的移动方向下面第四小节会讲到
  • 4 约束面的法向
    • x沿着绿圈内的方向移动,将会使得f(x)减小,同时满足等式约束h(x) = 0
  • 5 提出猜想
    • 我们不妨大胆假设,如果满足下面的条件:
  • 6 完全解码拉格朗日乘数法
    • 还有取得极值的的三个条件,都是对以上五个小节中涉及到的条件的编码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档