当前位置: 首页 > news >正文

机器学习基础:拉格朗日乘子法

在凸优化问题中,拉格朗日乘子法是最常用的方法之一。

先看个例题:求目标函数 f ( x , y ) = x 2 + y 2 \mathrm{f}(\mathrm{x}, \mathrm{y})=\mathrm{x}^{2}+\mathrm{y}^{2} f(x,y)=x2+y2,在约束条件 x y = 3 \mathrm{xy}=3 xy=3下的最小值。

这是一个典型的约束优化问题,根据我们中学知识,首先想到的是一个变量用另外一个变量进行替换,再带入目标函数就可以求出极值。

y = 3 x y=\frac{3}{x} y=x3带入 f ( x , y ) = x 2 + y 2 \mathrm{f}(\mathrm{x}, \mathrm{y})=\mathrm{x}^{2}+\mathrm{y}^{2} f(x,y)=x2+y2 ,可得 f ( x ) = x 2 + 9 x 2 ,然后求 f ( x ) \mathrm{f}(\mathrm{x})=\mathrm{x}^{2}+\frac{9}{\mathrm{x}^{2}} ,然后求 \mathrm{f}(\mathrm{x}) f(x)=x2+x29,然后求f(x)的最小值。
这就变成了求一元函数的无约束极值。求导, f ′ ( x ) = 0 \mathrm{f}^{\prime}(\mathrm{x})=0 f(x)=0的点即为极值点。推导可得,在点 ( 3 , 3 ) (\sqrt{3}, \sqrt{3}) (3 ,3 )和点 ( − 3 , − 3 ) (-\sqrt{3},-\sqrt{3}) (3 ,3 )处, f ( x , y ) \mathrm{f}(\mathrm{x}, \mathrm{y}) f(x,y)的最小值为6 。

更直观一些,将 x 2 + y 2 = c \mathrm{x}^{2}+\mathrm{y}^{2}=\mathrm{c} x2+y2=c的曲线族画出来,如图所示,当曲线族中的圆与 x y = 3 xy=3 xy=3 曲线相切时,切点到原点的距离最短。也就是说, f ( x , y ) = c f(x, y)=c f(x,y)=c的等高线和双曲线 g ( x , y ) g(x, y) g(x,y)相切时,可以得到上述优化问题的一个极值。那么,当 f ( x , y ) \mathrm{f}(\mathrm{x}, \mathrm{y}) f(x,y) g ( x , y ) \mathrm{g}(\mathrm{x}, \mathrm{y}) g(x,y) 相切时, x , y x,y x,y的值是多少呢? 该如何求解呢?

img

在讨论梯度概念时,梯度与等高线的关系描述如下:函数 z = f ( x , y ) z = f ( x , y ) z=f(x,y) 在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)梯度方向与过点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)的等高线 f ( x , y ) = c f(x,y)=c f(x,y)=c在这点的法线方向相同,且从数值较低的等高线指向数值较高等高线,而梯度的模等于函数在这个法线方向的方向导数。这个法线方向就是方向导数取得最大值的方向

根据梯度与等高线的关系描述,上面问题中 f ( x , y ) f(x,y) f(x,y) g ( x , y ) g(x,y) g(x,y)相切时,它们的切线相同,即法向量是相互平行的,因此,可以得到 ▽ f ( x , y ) = − λ ⋅ ▽ g ( x , y ) \triangledown f(x,y)=-\lambda \cdot \triangledown g(x,y) f(x,y)=λg(x,y) 。分别求偏导,并且加上约束条件 x y = 3 xy=3 xy=3,可以得到方程组:
{ ∂ f ∂ x = − λ ∂ g ∂ x ∂ f ∂ y = − λ ∂ g ∂ y x y = 3 \left\{\begin{array}{l} \frac{\partial f}{\partial x}=-\lambda \frac{\partial g}{\partial x} \\ \frac{\partial f}{\partial y}=-\lambda \frac{\partial g}{\partial y} \\ x y=3 \end{array}\right. xf=λxgyf=λygxy=3
即:

{ 2 x = − λ y 2 y = − λ x x y = 3 \left\{\begin{array}{l} 2 x=-\lambda y \\ 2 y=-\lambda x \\ x y=3 \end{array}\right. 2x=λy2y=λxxy=3
求解结果: x = 3 , y = 3 , λ = − 2 \mathrm{x}=\sqrt{3}, \mathrm{y}=\sqrt{3}, \lambda=-2 x=3 ,y=3 ,λ=2 或者 x = − 3 , y = − 3 , λ = − 2 \mathrm{x}=-\sqrt{3}, \mathrm{y}=-\sqrt{3}, \lambda=-2 x=3 ,y=3 ,λ=2 通过上述例子引入拉格朗日乘子法的基本原理,即通过引入拉格朗日乘子 λ \lambda λ 将原来的约束优化问题转化为无约束的方程组问题。

一般步骤

  1. 求解函数 u = f ( x , y , z , t ) \mathrm{u}=\mathrm{f}(\mathrm{x}, \mathrm{y}, \mathrm{z}, \mathrm{t}) u=f(x,y,z,t) 在条件 φ ( x , y , z , t ) = 0 , ψ ( x , y , z , t ) = 0 \varphi(\mathrm{x}, \mathrm{y}, \mathrm{z}, \mathrm{t})=0, \psi(\mathrm{x}, \mathrm{y}, \mathrm{z}, \mathrm{t})=0 φ(x,y,z,t)=0,ψ(x,y,z,t)=0下极值。
  2. 构造函数: F ( x , y , z , t , λ 1 , λ 2 ) = f ( x , y , z , t ) + λ 1 ⋅ φ ( x , y , z , t ) + λ 2 ⋅ ψ ( x , y , z , t ) \mathrm{F}\left(\mathrm{x}, \mathrm{y}, \mathrm{z}, \mathrm{t}, \lambda_{1}, \lambda_{2}\right)=\mathrm{f}(\mathrm{x}, \mathrm{y}, \mathrm{z}, \mathrm{t})+\lambda_{1} \cdot \varphi(\mathrm{x}, \mathrm{y}, \mathrm{z}, \mathrm{t})+\lambda_{2} \cdot \psi(\mathrm{x}, \mathrm{y}, \mathrm{z}, \mathrm{t}) F(x,y,z,t,λ1,λ2)=f(x,y,z,t)+λ1φ(x,y,z,t)+λ2ψ(x,y,z,t) ,其中, λ 1 \lambda_{1} λ1 λ 2 \lambda_{2} λ2 为拉格朗日乘子
  3. 通过对构造函数求偏导为 0 列出方程组。
  4. 求出方程组的解,带入即可得目标函数的极值。

【例】已知目标函数为 V ( x , y , z ) = x y z \mathrm{V}(\mathrm{x}, \mathrm{y}, \mathrm{z})=\mathrm{xyz} V(x,y,z)=xyz,在约束条件 2 x y + 2 x z + 2 y z = 12 2 \mathrm{xy}+2 \mathrm{xz}+2 \mathrm{yz}=12 2xy+2xz+2yz=12下,求体积 V \mathrm{V} V的最大值。
解: F ( x , y , z , λ ) = x 3 y 2 z + λ ⋅ ( x + y + z − 12 ) F(x, y, z, \lambda)=x^{3} y^{2} z+\lambda \cdot(x+y+z-12) F(x,y,z,λ)=x3y2z+λ(x+y+z12)

求偏导可得方程组
{ 3 x 2 y 2 z + λ = 0 2 x 3 y z + λ = 0 x 3 y 2 + λ = 0 x + y + z − 12 = 0 \left\{\begin{array}{l}3 x^{2} y^{2} z+\lambda=0 \\ 2 x^{3} y z+\lambda=0 \\ x^{3} y^{2}+\lambda=0 \\ x+y+z-12=0\end{array}\right. 3x2y2z+λ=02x3yz+λ=0x3y2+λ=0x+y+z12=0
解得唯一驻点 (6,4,2), u mux ⁡ = 6912 u_{\operatorname{mux}}=6912 umux=6912

由凸优化问题我们知道:

例如要求解 min ⁡ x f ( x ) \min_{x}{f(x)} minxf(x),那么就是解方程 ∇ f ( x ) = 0 \nabla f(x) =0 f(x)=0,最终的 x ∗ x^{\ast} x 为最优解。

那么当有约束条件怎么呢?

拉格朗日法就是把一个有约束问题转换成一个无约束问题

优化问题一般有以下几种形式
min ⁡ x f 0 ( x ) min ⁡ x f 0 ( x ) max ⁡ x f 0 ( x )  s.t.  f i ( x ) ≤ 0 , i = 1 , … , m  s.t.  f i ( x ) ≥ 0 , i = 1 , … , m  s.t.  f i ( x ) ≤ 0 , i = 1 , … , m h i ( x ) = 0 , i = 1 , … , p h i ( x ) = 0 , i = 1 , … , p h i ( x ) = 0 , i = 1 , … , p \begin{array}{cllllll} \min _{x} & f_{0}(x) & \min _{x} & f_{0}(x) & \max _{x} & f_{0}(x) & \\ \text { s.t. } & f_{i}(x) \leq 0, \quad i=1, \ldots, m & \text { s.t. } & f_{i}(x) \geq 0, \quad i=1, \ldots, m & \text { s.t. } & f_{i}(x) \leq 0, \quad i=1, \ldots, m \\ & h_{i}(x)=0, \quad i=1, \ldots, p & & h_{i}(x)=0, \quad i=1, \ldots, p & & h_{i}(x)=0, \quad i=1, \ldots, p \end{array} minx s.t. f0(x)fi(x)0,i=1,,mhi(x)=0,i=1,,pminx s.t. f0(x)fi(x)0,i=1,,mhi(x)=0,i=1,,pmaxx s.t. f0(x)fi(x)0,i=1,,mhi(x)=0,i=1,,p
最常用的是第一种,求最小值,约束为小于等于。

对于仅含等式约束的优化问题:
min ⁡ f ( x )  s.t.  h i ( x ) = 0 i = 1 , 2 , … , n \begin{array}{cl} \min & f(\boldsymbol{x}) \\ \text { s.t. } & h_{i}(\boldsymbol{x})=0 \quad i=1,2, \ldots, n \end{array} min s.t. f(x)hi(x)=0i=1,2,,n
其中自变量 x ∈ R n , f ( x ) \boldsymbol{x} \in \mathbb{R}^{n}, f(\boldsymbol{x}) xRn,f(x) h i ( x ) h_{i}(\boldsymbol{x}) hi(x) 均有连续的一阶偏导数。首先列出其拉格朗日函数:

L ( x , λ ) = f ( x ) + ∑ i = 1 n λ i h i ( x ) L(\boldsymbol{x}, \boldsymbol{\lambda})=f(\boldsymbol{x})+\sum_{i=1}^{n} \lambda_{i} h_{i}(\boldsymbol{x}) L(x,λ)=f(x)+i=1nλihi(x)

其中 λ = ( λ 1 , λ 2 , … , λ n ) T \boldsymbol{\lambda}=\left(\lambda_{1}, \lambda_{2}, \ldots, \lambda_{n}\right)^{\mathrm{T}} λ=(λ1,λ2,,λn)T 为拉格朗日乘子。然后对拉格朗日函数关于 x \boldsymbol{x} x 求偏导,并令导数等于0再搭配约束条件 h i ( x ) = 0 h_{i}(\boldsymbol{x})=0 hi(x)=0 解出 x \boldsymbol{x} x, 求解出的所有 x \boldsymbol{x} x 即为上述优化问题的所有可能极值点。

拉格朗日函数与原始问题的关系
min ⁡ x f 0 ( x )  s.t.  f i ( x ) ≤ 0 , i = 1 , … , m h i ( x ) = 0 , i = 1 , … , p \begin{array}{cl} \min _{x} & f_{0}(x) \\ \text { s.t. } & f_{i}(x) \leq 0, \quad i=1, \ldots, m \\ & h_{i}(x)=0, \quad i=1, \ldots, p \end{array} minx s.t. f0(x)fi(x)0,i=1,,mhi(x)=0,i=1,,p
对应上面优化问题可以写为如下形式:
L ( x , λ , ν ) = f 0 ( x ) + ∑ i = 1 m λ i f i ( x ) + ∑ i = 1 p ν i h i ( x )  s.t.  λ i ≥ 0 , i = 1 , … , m \begin{aligned} \mathcal{L}(x, \lambda, \nu) &=f_{0}(x)+\sum_{i=1}^{m} \lambda_{i} f_{i}(x)+\sum_{i=1}^{p} \nu_{i} h_{i}(x) \\ \text { s.t. } \quad & \lambda_{i} \geq 0, \quad i=1, \ldots, m \end{aligned} L(x,λ,ν) s.t. =f0(x)+i=1mλifi(x)+i=1pνihi(x)λi0,i=1,,m
λ i \lambda_i λi v i v_i vi是两个拉格朗日乘子,由于 f i ( x ) f_i(x) fi(x)是不等式约束,所以 λ i \lambda_i λi有约束条件必须大于0; h i ( x ) h_i(x) hi(x)是等式约束, v i v_i vi没有约束。

上面式子等价于这个式子:
min ⁡ x max ⁡ λ , v L ( x , λ , ν )  s.t.  λ i ≥ 0 , i = 1 , … , m \begin{array}{rl} \min _{x} \max _{\lambda, v} & \mathcal{L}(x, \lambda, \nu) \\ \text { s.t. } & \lambda_{i} \geq 0, \quad i=1, \ldots, m \end{array} minxmaxλ,v s.t. L(x,λ,ν)λi0,i=1,,m
【证明两式等价:】


θ p ( x ) = max ⁡ λ , v L ( x , λ , ν ) s . t . λ i ≥ 0 , i = 1 , … , m \theta_{p}(x)=\max _{\lambda, v} \mathcal{L}(x, \lambda, \nu) \\ s.t. \quad \lambda_{i} \geq 0, \quad i=1, \ldots, m θp(x)=λ,vmaxL(x,λ,ν)s.t.λi0,i=1,,m
θ P ( x ) \theta_{P}(x) θP(x)y有以下性质:
θ P ( x ) = { f 0 ( x )  for  x  that satisfied the origin constraint  + ∞  otherwise  \theta_{P}(x)=\left\{\begin{array}{ll}f_{0}(x) & \text { for } x \text { that satisfied the origin constraint } \\ +\infty & \text { otherwise }\end{array}\right. θP(x)={f0(x)+ for x that satisfied the origin constraint  otherwise 
验证上述性质:

  1. 若存在 x 使得某个 f i ( x ) > 0 f_{i}(x)>0 fi(x)>0 则我们可令 0 ≤ λ i 0 \leq \lambda_{i} 0λi → + ∞ \rightarrow+\infty + , 进而有 θ p ( x ) = + ∞ \theta_{p}(x)=+\infty θp(x)=+
  2. 若存在 x 使得某个 h i ( x ) ≠ 0 h_{i}(x) \neq 0 hi(x)=0 则我们可令 v i h i ( x ) → + ∞ v_{i} h_{i}(x) \rightarrow+\infty vihi(x)+ , 进而有 θ p ( x ) = + ∞ \theta_{p}(x)=+\infty θp(x)=+
  3. x ∈ { x ∣ ∀ i , v i , λ i ≥ 0 , λ i f i ( x ) ≤ 0 , v i h i ( x ) = 0 } x \in\left\{x \mid \forall i, v_{i}, \lambda_{i} \geq 0, \lambda_{i} f_{i}(x) \leq 0, v_{i} h_{i}(x)=0\right\} x{xi,vi,λi0,λifi(x)0,vihi(x)=0} 则有 max ⁡ λ , v L ( x , λ , ν ) = f 0 ( x ) \max _{\lambda, v} \mathcal{L}(x, \lambda, \nu)=f_{0}(x) maxλ,vL(x,λ,ν)=f0(x)

相关文章:

  • Matlab 与 Python 基于窗函数的滤波器设计对比 之 凯瑟窗
  • java web开发(从spring boot到spring cloud)
  • 看呆了!二面高德 Java 岗,问了一堆源码,微服务,分布式,Redis,心累
  • 2022华为杯研究生数学建模竞赛B题思路解析
  • 2022华为杯研究生数学建模竞赛E题思路解析
  • 【C语言】学生考勤管理系统
  • 常用的调试技巧(如何检测bug)
  • SpringBoot二十六课大纲和目录
  • 2022年中国研究生数学建模竞赛C题-汽车制造涂装-总装缓存调序区调度优化问题
  • 2022研究生数模A题——移动场景超分辨定位问题
  • vue2脚手架之全局事件总线
  • spring boot学生社团管理系统的设计与实现毕业设计源码151109
  • STM32CUBEMX开发GD32F303(15)----外部中断EXTI
  • 算法竞赛Java选手的语言快速熟悉指南
  • 【电商数仓】数仓搭建之服务数据(data warehouse service-- DWS)层(DWS层概述、几个系统函数和用户主题的建立与数据导入)
  • ES6 学习笔记(一)let,const和解构赋值
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • mysql 5.6 原生Online DDL解析
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SQLServer插入数据
  • 初识 webpack
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 三栏布局总结
  • 小李飞刀:SQL题目刷起来!
  • 延迟脚本的方式
  • 一天一个设计模式之JS实现——适配器模式
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 交换综合实验一
  • (HAL库版)freeRTOS移植STMF103
  • (TOJ2804)Even? Odd?
  • (一) springboot详细介绍
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)Sql Server 保留几位小数的两种做法
  • (转)程序员疫苗:代码注入
  • .bat文件调用java类的main方法
  • .gitattributes 文件
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net 代码性能 - (1)
  • .NET 服务 ServiceController
  • .Net 中Partitioner static与dynamic的性能对比
  • .net中生成excel后调整宽度
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @hook扩展分析
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • []指针
  • [BUUCTF 2018]Online Tool(特详解)
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [C++基础]-初识模板
  • [codeforces]Recover the String
  • [Hive] 常见函数