[机器学习必知必会]拉格朗日法及其对偶问题

2024-04-16 08:48

本文主要是介绍[机器学习必知必会]拉格朗日法及其对偶问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

了解一些简单的数学概念

首先看一个二元函数(再复杂一点的函数就很难直观地呈现出来)的三维图像和对应的等高线,其中函数表达式为 z = x 2 + y 2 z=x^2+y^2 z=x2+y2

二元函数的三维图像及等高线

从导数到偏导数

对于一个一元函数而言,导数的定义想必大家都很清楚,具体的表达式为:
f ′ ( x ) = lim ⁡ △ x → 0 f ( x + △ x ) − f ( x ) △ x = lim ⁡ △ x → 0 f ( x ) − f ( x − △ x ) △ x f'(x)=\lim_{\triangle x\rightarrow0}\frac{f(x+\triangle x)-f(x)}{\triangle x}=\lim_{\triangle x \rightarrow 0}\frac{f(x)-f(x-\triangle x)}{\triangle x} f(x)=x0limxf(x+x)f(x)=x0limxf(x)f(xx)

一元函数中只有一个自变量,因此在某个点的导数即函数在该点的斜率,高中物理在路程-时间问题中赋予导数的含义为瞬时速度。

对于一个二元函数 f ( x , y ) f(x,y) f(x,y),偏导数即固定其他变量时的函数变化率,也就是沿着坐标轴正方向的变化率:
f x ( x , y ) = lim ⁡ △ x → 0 f ( x + △ x , y ) − f ( x , y ) △ x f_x(x,y) = \lim_{\triangle x \rightarrow 0} \frac{f(x+\triangle x,y)-f(x,y)}{\triangle x} fx(x,y)=x0limxf(x+x,y)f(x,y)
f y ( x , y ) = lim ⁡ △ y → 0 f ( x , y + △ y ) − f ( x , y ) △ y f_y(x,y) = \lim_{\triangle y \rightarrow 0} \frac{f(x, y+\triangle y)-f(x,y)}{\triangle y} fy(x,y)=y0limyf(x,y+y)f(x,y)

方向导数

这里引入偏导数的原因是因为在多元函数中,经过函数某一点的切线有无数条,这些切线共同组成切平面。借助于“基向量”的思想,我们通过两个偏导数表示出经过该点的任意方向切线的导数,这也就是方向导数。

现在我们放开对所有变量的限制,记点 ( x , y ) (x,y) (x,y)为二元函数上一点,自该点引一条射线 l l l, 在该点射线方向邻域内存在一点 ( x + △ x , y + △ y ) (x+\triangle x,y+\triangle y) (x+x,y+y),那么函数沿着 l l l方向的方向导数为:
∂ y ∂ l = lim ⁡ ρ → 0 f ( x + △ x , y + △ x ) − f ( x , y ) ρ , ρ = ( △ x ) 2 + ( △ y ) 2 \frac{\partial y}{\partial l} = \lim_{\rho\rightarrow 0} \frac{f(x+\triangle x, y+\triangle x)-f(x,y)}{\rho},\rho = \sqrt{(\triangle x)^2 + (\triangle y)^2} ly=ρ0limρf(x+x,y+x)f(x,y),ρ=(x)2+(y)2

方向导数与偏导数

前面提到方向导数就是二元函数 f ( x , y ) f(x,y) f(x,y) ( x , y ) (x,y) (x,y)点处沿着任一方向的函数的变化率,而偏导数反映了函数沿着坐标轴方向上的变化率。

借助“基向量”的思想,我们可以用偏导数表示任意方向的方向导数:
∂ f ∂ l = ∂ f ∂ x c o s α + ∂ f ∂ y c o s β \frac{\partial f}{\partial l}=\frac{\partial f}{\partial x}cos\alpha + \frac{\partial f}{\partial y} cos\beta lf=xfcosα+yfcosβ

梯度

一元函数在一个点只有一个斜率,二元函数在一个点处有一个切平面。在无约束最优化问题中,我们希望找到函数下降速度最快的方向,然后不断逼近函数的最小值点,如下图所示:
梯度的直观理解

一言以蔽之,梯度方向就是函数值下降最快的方向。
注:为防止不同教材知识的混淆,本篇不明确区分梯度方向与负梯度方向,重在理解拉格朗日乘子法的思想即可,具体推导可找专业的数学资料。

下界与下确界

图源:https://zhuanlan.zhihu.com/p/23859974
举个例子,当我们迭代求解函数 f ( x ) f(x) f(x)的最小值时,所有迭代值构成一个不断递减的有序数列 { x ( k ) } \{x^{(k)}\} {x(k)}

  • 如果我们能找到一个实数,它比这个数列中所有的数都要小,那我们就可以称它为这个数列的下界。
  • 不难理解,一个有界数列可以找到无数个不同的下界,而最大的下界也是下确界。

无约束问题引入

前面提到的梯度下降法和牛顿法都是求解无约束最优化问题的常用方法,无约束的最优化问题可以抽象为:
min ⁡ x ∈ R n f ( x ) \min _{x \in R^n} f(x) xRnminf(x)
当函数满足处处一阶可导时,极值点存在的必要条件是该点的一阶偏导数为0,高数中对于简单的问题我们可以直接解出满足 d f ( x ) d x \frac{df(x)}{dx} dxdf(x)为零的所有 x x x,并代入函数判断他是否为极值点。
image.png

当函数复杂到我们无法轻易求出可能的极值点时,我们通过构造初始值 x ( 0 ) x^{(0)} x(0)和递推公式去不断逼近函数的极值点,比较典型的算法包括梯度下降法、坐标下降法和拟牛顿法等。

梯度下降法和拟牛顿法回顾

假设目标函数为线性回归的目标函数:
h θ ( x ( i ) ) = ∑ j = 1 n θ j x j ( i ) h_\theta(x^{(i)})=\sum_{j=1}^{n} \theta_jx_j^{(i)} hθ(x(i))=j=1nθjxj(i)
J ( θ ) = 1 2 m ( y ( i ) − h θ ( x ( i ) ) ) 2 J(\theta) = \frac{1}{2m}(y^{(i)}-h_\theta(x^{(i)}))^2 J(θ)=2m1(y(i)hθ(x(i)))2
其中自变量维度为 m m m,样本数为 n n n, x j ( i ) x_j^{(i)} xj(i)表示第 i i i个样本的第 j j j个自变量的取值。
接下来我们需要做的就是找到最佳的参数组合使得目标函数值达到最小。

批量梯度下降法

以批量梯度下降法(BGD)为例,每一步我们都沿着目标函数的负梯度方向更新参数值:
∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m ( y ( i ) ) − h θ ( x ( i ) ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j}=-\frac{1}{m}\sum_{i=1}{m}(y^{(i)})-h_\theta(x^{(i)}))x_j^{(i)} θjJ(θ)=m1i=1m(y(i))hθ(x(i)))xj(i)
θ j ′ = θ j + 1 m ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) \theta_j' = \theta_j+\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-h_\theta (x^{(i)})) θj=θj+m1i=1m(y(i)hθ(x(i)))

牛顿法

牛顿法是求解函数值等于0的自变量取值的一种迭代算法,因此我们可以使用牛顿法求解满足函数一阶导为0的参数值。
迭代公式如下所示,具体推导过程可以在牛顿法那篇文章中看。
θ ′ = θ − H k − 1 g k \theta'=\theta-H^{-1}_kg_k θ=θHk1gk

从无约束最优化到有约束最优化

前面我们讨论的都是无约束情况下的最优化,根据极值的必要条件(一阶导为0),我们可以通过构造数列不断逼近最优值。但是有很多实际问题是有约束的,拉格朗日乘子法就是解决有约束最优化的一种常用方法。

直观理解

image
上图中的多个黑色圆圈是二元函数 f ( x , y ) f(x,y) f(x,y)投影在平面上的等高线(即同一条线代表函数值相同),蓝色的箭头代表函数的梯度方向(即函数值下降速度最快的方向)。如果在没有约束的情况下,我们应该直接沿着梯度方向找到使函数值不再下降的最小值,现在我们给函数加上了约束条件(即红色线,代表着 ( x , y ) (x,y) (x,y)的取值要落在红线上)。

现在问题转化为我们需要在红线上找到使得函数值最小化的 ( x , y ) (x,y) (x,y)的取值。

由于函数的等高线是密集的,因此我们只需要在满足函数等高线和约束曲线相切的点集合中寻找可能的极值点。(相切是极值点的必要非充分条件)

用数学语言描述

由于在极值点处函数等高线和约束函数的梯度都与切平面垂直,从而他们的梯度方向在同一条直线上,即:

  • 对于约束曲面上的任意点 ( x , y ) (x,y) (x,y),该点的梯度 △ h ( x , y ) \triangle h(x,y) h(x,y)正交于约束曲面
  • 在最优点处,目标函数在该点的梯度 △ f ( x , y ) \triangle f(x,y) f(x,y)正交于约束曲面
    △ f ( x , y ) = λ △ h ( x , y ) \triangle f(x,y) = \lambda \triangle h(x,y) f(x,y)=λh(x,y)
    我们定义拉格朗日函数如下,其中 λ \lambda λ称为拉格朗日乘子:
    L ( x , y , λ ) = f ( x , y ) + λ h ( x , y ) L(x,y,\lambda) = f(x,y) + \lambda h(x,y) L(x,y,λ)=f(x,y)+λh(x,y)
    我们将拉格朗日函数求偏导之后就得到上述的梯度公式,因此我们可以将原约束优化问题转化为对拉格朗日函数 L ( x , y , λ ) L(x,y,\lambda) L(x,y,λ)的无约束优化问题。
从等式约束到非等式约束

下图展示了拉格朗日乘子法的几何含义:在左边的等式约束( g ( x ) = 0 g(x)=0 g(x)=0)下和右边的不等式约束 g ( x ) ≤ 0 g(x)\leq 0 g(x)0下最小化目标函数 f ( x , y ) f(x,y) f(x,y)。其中红色曲线表示 g ( x ) = 0 g(x)=0 g(x)=0围成的曲面。
image
不等于约束 g ( x ) ≤ 0 g(x)\leq 0 g(x)0的情形中,最优点 x ∗ x^* x要么出现在边界 g ( x ) = 0 g(x) = 0 g(x)=0上,要么出现在区域 g ( x ) < 0 g(x)<0 g(x)<0中:

  • 对于 g ( x ) < 0 g(x)<0 g(x)<0的情形,因为 △ f ( x ) \triangle f(x) f(x)方向向里,因此约束条件 g ( x ) ≤ 0 g(x)\leq 0 g(x)0不起作用,我们只需要通过条件 △ f ( x ) = 0 \triangle f(x) = 0 f(x)=0求得可能的极值即可。
    * g ( x ) = 0 g(x)=0 g(x)=0的约束类似于前面提到的等式约束,但是 △ f ( x ∗ ) \triangle f(x^*) f(x)的方向和 g ( x ∗ ) g(x^*) g(x)必须相反,即存在常数 λ > 0 \lambda > 0 λ>0使得 △ f ( x ∗ ) + λ △ g ( x ∗ ) = 0 \triangle f(x^*) + \lambda \triangle g(x^*)=0 f(x)+λg(x)=0

当最优值落在 g ( x ) < 0 g(x)<0 g(x)<0区域时,约束条件件 g ( x ) ≤ 0 g(x)\leq 0 g(x)0不起作用,因此我们令约束条件的乘子 λ = 0 \lambda =0 λ=0;当最优值落在 g ( x ) = 0 g(x)=0 g(x)=0边界上时, λ g ( x ) \lambda g(x) λg(x)自然等于0。考虑到这两种情形,我们可以推出 λ g ( x ) = 0 \lambda g(x)=0 λg(x)=0

因此,拉格朗日乘子法可以写成如下的等价形式,括号的条件也叫做KKT条件。
L ( x , λ ) = f ( x ) + λ g ( x ) L(x,\lambda) = f(x) + \lambda g(x) L(x,λ)=f(x)+λg(x)
{ g ( x ) ≤ 0 λ ≥ 10 λ g ( x ) = 0 \left\{\begin{matrix} g(x)\leq 0\\ \lambda \ge1 0\\ \lambda g(x) = 0 \end{matrix}\right. g(x)0λ10λg(x)=0

拉格朗日乘子法的一般写法

考虑具有 m m m个等式约束和 n n n个不等式约束的一般优化情形:
min ⁡ x f ( x ) \min_{x} f(x) xminf(x)
{ h i ( x ) = 0 ( i = 1 , 2 , . . . , m ) g j ( x ) ≤ 0 ( j = 1 , 2 , . . . , n ) \left\{\begin{matrix} h_i(x) = 0 \quad (i=1,2,...,m)\\ g_j(x) \leq 0 \quad (j=1,2,...,n) \end{matrix}\right. {hi(x)=0(i=1,2,...,m)gj(x)0(j=1,2,...,n)

引入拉格朗日乘子 λ = ( λ 1 , λ 2 , . . . , λ m ) T \lambda = (\lambda_1, \lambda_2,...,\lambda_m)^T λ=(λ1,λ2,...,λm)T μ = ( μ 1 , μ 2 , . . . , μ n ) T \mu=(\mu_1,\mu_2,...,\mu_n)^T μ=(μ1,μ2,...,μn)T,对应的拉格朗日函数为:
L ( x , λ , μ ) = f ( x ) + ∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) L(x,\lambda,\mu)=f(x)+\sum_{i=1}^{m} \lambda_i h_i(x)+\sum_{j=1}^{n}\mu_jg_j(x) L(x,λ,μ)=f(x)+i=1mλihi(x)+j=1nμjgj(x)
不等式问题对应的KKT条件为:
{ g j ( x ) ≤ 0 μ j ≥ 0 μ j g j ( x ) = 0 \left\{\begin{matrix} g_j(x) \leq 0 \\ \mu_j \geq 0\\ \mu_j g_j(x) = 0 \end{matrix}\right. gj(x)0μj0μjgj(x)=0

拉格朗日对偶性

推导出对偶问题

主问题:
min ⁡ x f ( x ) \min_x f(x) xminf(x)
{ h i ( x ) = 0 ( i = 1 , 2 , . . . , m ) g j ( x ) ≤ 0 ( j = 1 , 2 , . . . , n ) \left\{\begin{matrix} h_i(x) = 0 \quad (i=1,2,...,m)\\ g_j(x) \leq 0 \quad (j=1,2,...,n) \end{matrix}\right. {hi(x)=0(i=1,2,...,m)gj(x)0(j=1,2,...,n)
对应的拉格朗日函数为:
min ⁡ x ∈ D , μ i ≥ 0 , λ L ( x , λ , μ ) = min ⁡ x ∈ D , μ i ≥ 0 , λ f ( x ) + ∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) \min_{x\in\mathbb{D},\mu_i\geq 0,\lambda} L(x,\lambda,\mu)=\min_{x\in\mathbb{D},\mu_i\geq 0,\lambda}f(x)+\sum_{i=1}^{m} \lambda_i h_i(x)+\sum_{j=1}^{n}\mu_jg_j(x) xD,μi0,λminL(x,λ,μ)=xD,μi0,λminf(x)+i=1mλihi(x)+j=1nμjgj(x)
其中 D \mathbb{D} D为主问题中基于等式和不等式约束的可行域,那么对于任意的 μ ≥ 0 , λ \mu\geq 0, \lambda μ0,λ,都有:
∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) ≤ 0 \sum_{i=1}^{m}\lambda_ih_i(x)+\sum_{j=1}^{n}\mu_j g_j(x) \leq0 i=1mλihi(x)+j=1nμjgj(x)0
我们通过对偶函数给出主问题最优值的下界
Γ ( λ , μ ) = inf ⁡ x ∈ D L ( x , λ , μ ) = inf ⁡ x ∈ D ( f ( x ) + ∑ i = 1 m λ i h i ( x ) + ∑ j = 1 n μ j g j ( x ) ) \Gamma(\lambda,\mu)=\inf_{x\in \mathbb{D}}L(x,\lambda,\mu)=\inf_{x\in \mathbb{D}} \bigg( f(x)+\sum_{i=1}^{m}\lambda_ih_i(x)+\sum_{j=1}^{n}\mu_j g_j(x) \bigg) Γ(λ,μ)=xDinfL(x,λ,μ)=xDinf(f(x)+i=1mλihi(x)+j=1nμjgj(x))
假设主问题的最优点为 x ∗ x^* x,对应的最优值为 p ∗ p^* p,则对于任意的 μ ≥ 0 \mu \geq 0 μ0 λ \lambda λ和可行域内的任一点 x ~ ∈ D \tilde{x} \in \mathbb{D} x~D都有:
Γ ( λ , μ ) = inf ⁡ x ∈ D L ( x , λ , μ ) ≤ L ( x ~ , λ , μ ) ≤ f ( x ~ ) \Gamma(\lambda, \mu)=\inf_{x\in \mathbb{D}}L(x,\lambda,\mu) \leq L(\tilde{x},\lambda,\mu) \leq f(\tilde{x}) Γ(λ,μ)=xDinfL(x,λ,μ)L(x~,λ,μ)f(x~)
即对偶函数小于主问题中的每一个函数值(下界的定义),给出了主问题的一个下界,并且这个下界的值取决于 μ , λ \mu, \lambda μ,λ的值。一个很自然的问题是:基于对偶函数能获得的最好下界是什么(下确界的思想),这就引入了对偶问题
max ⁡ λ , μ ≥ 0 Γ ( λ , μ ) \max_{\lambda, \mu \geq0} \Gamma(\lambda,\mu) λ,μ0maxΓ(λ,μ)

为什么要引入对偶问题
  • 无论主问题的凸性如何,对偶问题始终是凸优化问题
  • 凸优化问题的研究较为成熟,当一个具体被归为一个凸优化问题,基本可以确定该问题是可被求解的
弱对偶性与强对偶性

假设主问题的最优值 p ∗ p^* p,对偶问题的最优值为 d ∗ d^* d,根据下界的定义,显然有 d ∗ ≤ p ∗ d^*\leq p^* dp

  • 弱对偶性: d ∗ ≤ p ∗ d^*\leq p^* dp
  • 强对偶性: d ∗ = p ∗ d^* = p^* d=p

在强对偶性成立时,将拉格朗日函数分别对原变量和对偶变量求导,再令导数等于零,即可得到原变量与对偶变量的数值关系。于是,对偶问题解决了,主问题也就解决了。

Reference

[1]https://www.cnblogs.com/lyr2015/p/9010532.html
[2]https://www.cnblogs.com/xinchen1111/p/8804858.html
[3]https://puui.qpic.cn/fans_admin/0/3_1692378290_1568465189769/0
[4]《统计学习方法》
[5]《机器学习》

这篇关于[机器学习必知必会]拉格朗日法及其对偶问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908326

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因: 1.文件编码不一致:如果文件的编码方式与IDEA设置的编码方式不一致,就会产生乱码。确保文件和IDEA使用相同的编码,通常是UTF-8。2.IDEA设置问题:检查IDEA的全局编码设置和项目编码设置是否正确。3.终端或控制台编码问题:如果你在终端或控制台看到乱码,可能是终端的编码设置问题。确保终端使用的是支持你的文件的编码方式。 2.解决方案: 1.File -> S

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue: