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

了解一些简单的数学概念

首先看一个二元函数(再复杂一点的函数就很难直观地呈现出来)的三维图像和对应的等高线,其中函数表达式为 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]《机器学习》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
格朗对偶是一种优化算,用于求解带有约束条件的优化问题。它通过构建格朗函数,并通过对偶问题的求解来近似原始问题的最优解。 在Matlab中,可以使用优化工具箱中的函数来实现格朗对偶。具体步骤如下: 1. 定义原始问题的目标函数和约束条件。 2. 构建格朗函数,将约束条件引入目标函数中,并引入格朗乘子。 3. 求解格朗函数的最小值,得到对偶问题。 4. 求解对偶问题,得到对偶变量的最优解。 5. 根据对偶变量的最优解,计算原始问题的最优解。 以下是一个简单的示例代码,演示了如何使用Matlab实现格朗对偶: ```matlab % 定义原始问题的目标函数和约束条件 f = @(x) x(1)^2 + x(2)^2; % 目标函数 g1 = @(x) x(1) + x(2) - 1; % 约束条件1 g2 = @(x) x(1) - x(2) - 1; % 约束条件2 % 构建格朗函数 syms lambda1 lambda2; L = f([x1; x2]) + lambda1 * g1([x1; x2]) + lambda2 * g2([x1; x2]); % 求解格朗函数的最小值,得到对偶问题 dual_problem = min(L, [lambda1, lambda2]); % 求解对偶问题,得到对偶变量的最优解 dual_solution = solve(dual_problem); % 根据对偶变量的最优解,计算原始问题的最优解 x_optimal = [x1; x2]; x_optimal = subs(x_optimal, [lambda1, lambda2], [dual_solution.lambda1, dual_solution.lambda2]); optimal_value = f(x_optimal); % 输出结果 disp("原始问题的最优解:"); disp(x_optimal); disp("原始问题的最优值:"); disp(optimal_value); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值