【数学基础】拉格朗日乘子法

article/2025/8/20 18:15:41

概述

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

我们这里提到的最优化问题通常是指对于给定的某一函数,求其在指定作用域上的全局最小值(因为最小值与最大值可以很容易转化,即最大值问题可以转化成最小值问题)。提到KKT条件一般会附带的提一下拉格朗日乘子。对学过高等数学的人来说比较拉格朗日乘子应该会有些印象。二者均是求解最优化问题的方法,不同之处在于应用的情形不同。

(1)无约束条件

  这是最简单的情况,解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点。将结果带回原函数进行验证即可。

拉格朗日乘子法实例

(2)等式约束条件

      设目标函数为f(x),约束条件为h_k(x),形如:

        s.t. 表示subject to ,“受限于”的意思,l表示有l个约束条件。

        

   则解决方法是消元法或者拉格朗日法。消元法比较简单不在赘述,这里主要讲拉格朗日法,因为后面提到的KKT条件是对拉格朗日乘子法的一种泛化。

例如给定椭球:

               

    求这个椭球的内接长方体的最大体积。这个问题实际上就是条件极值问题,即在条件      下,求的最大值。

         当然这个问题实际可以先根据条件消去 z (消元法),然后带入转化为无条件极值问题来处理。但是有时候这样做很困难,甚至是做不到的,这时候就需要用拉格朗日乘数法了。

         首先定义拉格朗日函数F(x):

          ( 其中λk是各个约束条件的待定系数。)                                                           

        然后解变量的偏导方程:

          ......,

   如果有l个约束条件,就应该有l+1个方程。求出的方程组的解就可能是最优化值(高等数学中提到的极值),将结果带回原方程验证就可得到解。

           回到上面的题目,通过拉格朗日乘数法将问题转化为

         

   对求偏导得到

          

   联立前面三个方程得到,带入第四个方程解之

          

   带入解得最大体积为:

          

为什么这么做可以求解最优化

举个例子:

1

这个式子可以好好考量一下,结合下文那个简单的例子,可以发现例子中的1,2两个偏导保证了梯度同向,第3个偏导保证了满足等式约束。

 

拉格朗日乘子法的几何认识

现在,我们来感性地认识一下,为什么拉格朗日认为相切才能找到最低点(只是感性认识,不添加任何数学推导)。

在橙点这个位置,由于两条曲线不相切,所以橙线的梯度(上图橙色箭头)和蓝线的切线(蓝色虚线)肯定不垂直。在这种情况下,蓝线的两个切线方向,必定有一个往函数高处走(与梯度的夹角小于 90 度),有一个往函数低处走(与梯度的夹角大于 90 度)。所以,在两条曲线相交时,我们肯定不在最低点或最高点的位置。

那么,反过来想,如果两条曲线相切(上图),那么在切点这个位置,蓝线的切线和橙线的梯度是垂直的,这个时候,蓝线的切线方向都指向橙线的等高线方向。换句话说,在切点的位置沿蓝线移动很小的一步,都相当于在橙线的等高线上移动,这个时候,可以认为函数值已经趋于稳定了。所以,我们认为这个点的值“可能”是最低(高)的(之后解释为什么是“可能“。另外,个人觉得拉格朗日乘子法最好用反证法从不相切的点入手思考,从相切的点思考总有点别扭)

根据拉格朗日乘子法的定义,这是一种寻找极值的策略,换句话说,该方法并不能保证找到的一定是最低点或者最高点。事实上,它只是一种寻找极值点的过程,而且,拉格朗日乘子法找到的切点可能不只一个(也就是上面的方程组可能找到多个解),例如下图:

图中相切的点有两个,而红点的函数值明显比黑点小。事实上,要想判断找到的点是极低点还是极高点,我们需要将切点代入原函数再进行判断。

很简单例子1

虽然上面已经有一个实例的例子了,但总感觉有点乱,原理啥的也不是让人特别清晰。所以接下来会再举一个便于理解的例子。

求此方程的最大值:

f(x,y)=x^2y

s.t  x^2+y^2=1

因为只有一个未知数的限制条件,我们只需要用一个乘数λ.

g(x,y)=x^2+y^2-1

L(x,y,\lambda )=x^2y+\lambda (x^2+y^2-1)

将所有L方程的偏微分设为零,得到一个方程组,最大值是以下方程组的解中的一个:

\frac{\partial L}{\partial x}=2xy+2\lambda x=0

\frac{\partial L}{\partial y}=x^2+2\lambda y=0

\frac{\partial L}{\partial \lambda }=x^2+y^2-1=0

由上面三个条件可以知道,f(x,y)取到最优解时,必然满足等式约束。

解得x=\frac{\sqrt6}{3}      y=\frac{\sqrt3}{3}      \lambda =-\frac{\sqrt3}{3}

实际上这边没必要对\lambda求偏导,求了也就是原来的等式约束。

很简单例子2

又看到一个例子,mark一下,希望能帮助理解。

这边为什么没有对\alpha _1,\alpha _2求导呢?注意看,有一句话“把它在带到约束条件中去”,其实就是对\alpha _1,\alpha _2求导了,因为f对\alpha _1,\alpha _2求导之后就是约束条件。

系数λ的作用

这边的λ和上面的\alpha一样的。

对于有不等式约束的问题我们要引进KKT条件和对偶变换。在下一篇中会详细介绍。

 

参考文章:

深入理解拉格朗日乘子法

拉格朗日乘子法:写得很通俗的文章

 


http://chatgpt.dhexx.cn/article/KTCdFupT.shtml

相关文章

拉格朗日乘数法

拉格朗日乘数法是用来求条件极值的,极值问题有两类,其一,求函数在给定区间上的极值,对自变量 没有其它要求,这种极值称为无条件极值。其二,对自变量有一些附加的约束条件限制下的极值,称为 条…

如何理解拉格朗日乘子法?

1 与原点的最短距离 假如有方程: 图像是这个样子滴: 现在我们想求其上的点与原点的最短距离: 这里介绍一种解题思路。首先,与原点距离为 的点全部在半径为 的圆上: 那么,我们逐渐扩大圆的半径:…

拉格朗日乘数法 —— 通俗理解

拉格朗日乘数法(Lagrange Multiplier Method)在数学最优问题中,是一种寻找变量受一个或多个条件所限制的多元函数的极值的方法。记得以前大学高数、数模等课程多次提到过,在求解最有问题中很有用处,最近重温了下拉格朗…

拉格朗日乘子法(简单易懂的说明)

拉格朗日乘子法(Lagrange Multiplier) 之前在高中就有一直听到拉格朗日,拉格朗日是一个很牛逼哄哄的大佬。在学习SVM的时候,居然也见到了他的身影。让我们了解一下拉格朗日乘子法的具体内容。 在学习过程中,有时会遇到…

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

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

拉格朗日乘子法

周志华《机器学习》如何理解拉格朗日乘子法? 1. 介绍 拉格朗日乘子法 (Lagrange multipliers)是一种寻找多元函数在一组约束下的极值的方法。通过引入拉格朗日乘子,可将有 d d d 个变量与 k k k 个约束条件的最优化问题转化为具有 d k d k dk 个变…

拉格朗日乘子法 (Lagrange multipliers)

目录 约束最优化问题等式约束的优化问题二元函数多元函数 不等式约束的优化问题 (KKT 条件)推广到多个约束拉格朗日对偶 (Dual Problem)前置知识 inf \text{inf} inf 和 sup \text {sup} sup 符号凸函数仿射函数凸优化 从广义拉格朗日函数到拉格朗日对偶函数从原问题到拉格朗日…

拉格朗日乘子

1,拉格朗日乘子(lagrange multiplier),又叫拉氏乘子或拉格朗日乘数。它是出现在拉格朗日乘数法中的概念。 拉格朗日乘数法可以解决多变量函数在其变量受到一个或多个约束条件时求极值的问题。 它可以将含有n个变量的函数(该函数的…

机器学习中的数学——拉格朗日乘子法(一):等式约束的拉格朗日乘子法

分类目录:《机器学习中的数学》总目录 相关文章: 拉格朗日乘子法(一):等式约束的拉格朗日乘子法 拉格朗日乘子法(二):不等式约束与KKT条件 拉格朗日乘子法是一种寻找多元函数在一组约…

拉格朗日乘子法详解

一、拉格朗日乘子法简介 拉格朗日乘子法的应用十分广泛,它是SVM的理论基础,是凸优化的重要研究部分。它用于求解约束条件下的极值问题,过程简单巧妙,也是各类考试的常考题型。然而,拉格朗日乘子法的原理我却一直模模糊…

日志服务与日志分析工具

系统日志生成服务 功能: 日志服务是根据日志配置文件进行提供相应的功能服务,对于各种服务的信息等级的设定将不同服务的不懂等级信息记录在不同的文件里面。 日志管理服务分类: 1.rsyslogd 普通日志管理服务 采集各种服务产生的信息根据…

Web日志分析

目录 1. Web日志 2. 日志分析技巧 常用分析工具: Apache日志分析技巧: 3. 日志分析案例 1、定位攻击源 2、搜索相关日志记录 3、对找到的访问日志进行解读,攻击者的访问路径..... 4. 日志统计分析技巧 1. Web日志 Web访问日志记录了W…

logparser日志分析详解

Logparser是微软的一款日志分析工具,使用方便功能强大。 支持的日志类型: IISW3C,NCSA,IIS,IISODBC,BIN,IISMSID,HTTPERR,URLSCAN,CSV,TSV,W3C,XML,EVT, ETW,NETMON, REG, ADS, TEXTLINE, TEXTWORD, FS,COM 可输出的文件类型 CSV, TSV, XML, DATAGRID, C…

(分析日志)

日志的分析也是一个很大的概念,可能对于运维和安全人员关注的是系统的所有日志,包括访问日志、系统监测的日志等,但是开发人员对于日志更多的是: 监控系统运行错误,并获取错误时的相关数据包记录重要的信息&#xff0…

日志分析及存储

一、系统日志概述 1.日志的用途 系统和程序的“日记本” −记录系统、程序运行中发生的各种事件 −通过查看日志,了解及排除故障 −信息安全控制的“依据” 2.Linux日志的种类 内核及系统日志 −由系统服务rsyslog统一管理,格式相似 用户日志 …

【linux】——日志分析

文章目录 1. 日志文件1.1 日志文件的分类1.2 日志文件保存位置1.2.1 内核及系统日志1.2.2 日志消息的级别1.2.3 日志记录的一般格式1.2.4 用户日志分析 程序日志分析日志管理策略 远程收集日志 1. 日志文件 1.1 日志文件的分类 ● 日志文件是用于记录Linux系统中各种运行消息的…

python日志分析

日志分析 生产中会出现大量的系统日志、应用程序日志,安全日志等,通过贵日志的分析可以了解服务器的负载,健康状况,可以分析客户的分布情况、客户的行为,甚至基于这些分析可以做出预测。 一般采集流程: 日…

日志分析工具

iis、windows日志做日志分析比较麻烦,这里找到了一款好用的免费的日志分析工具 Log Parser Lizard,下载这个工具之前建议先安装LogParser虽然他会自动弹窗提示。 1. 安装软件 安装没什么好说的一直下一步下一步就行 启动之后点击OK 弹出激活页面让激活…

redis日志分析

首先复习一下IO流: 关于读取文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取 InputStreamReader 字节流通向字符流的桥梁 以UTF-8编码读取 FileInputStream 从文件系统中的某…

【日志分析】Web日志分析

ox01 Web日志 Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进行修复。 我们来看一条Apache的访问日…