直观理解拉格朗日乘子法

一、等式约束优化问题

拉格朗日乘数法(Lagrange multiplier)是一种寻找多元函数在一组约束下的极值的方法。通过引入拉格朗日乘子,可将d个变量和k个约束条件的最优化为题转化成d+k个变量的无约束优化问题求解。
举个2维的例子来说明:
假设有自变量x和y,给定约束条件g(x,y)=c,要求f(x,y)在约束g下的极值。

我们看到隐函数f(x,y)可以描述为一个二维平面(即图中的一座山),我们可以画出它的等高线,如下图。此时,约束g(x,y)=c由于只有一个自由度,因此是图中的一条曲线(红色曲线所示),这条曲线是在x0y平面上的,由于没有z坐标,所以它可以在任何一个等高线平面,如图中在等高线平面3的L1,在等高线平面4的L2(L1,L2都是曲线g(x,y)=c)。我们的任务就是求f(x,y)在满足g(x,y)=c条件下的最小值,很明显就是找到与曲线L相切的最低的等高线平面。在最小值处,约束曲线不可能和等高线相交,一定是相切。比如我们看到L2是跟平面4是相交的,显然它比平面3要高。

 之后,我们根据以下两条性质:

    1. 对于约束曲面(在这里由于维度过低,是约束曲线)上的任意点x,该点的梯度\bigtriangledown g(x)正交于约束曲面或者约束曲线。

    2.在最优点x*,目标函数在该点的梯度\bigtriangledown f(x*)正交于约束曲面。

上面的描述源自周志华《机器学习》,其实就是因为g(x,y)=c的法向量是垂直于切线的,而g(x,y)=c的法向量又等于g(x,y)的梯度(对应第一条),f(x,y)的的梯度是垂直于等高线切线的(对应第2条)。所以在他们俩相切的地方,f(x,y)的梯度和g(x,y)的梯度方向必然相同或者相反(注:如果这段话你不太清楚,可以了解一下: 直观理解偏导数、方向导数和法向量和梯度

所以存在\lambda \neq 0使得:

\bigtriangledown f(x*) + \lambda \bigtriangledown g(x*) = 0

注:这里的x是多维向量,在二维情况下等价于上面的f(x,y)。

经过上面的分析,我们知道最优点x*必然满足以下两条方程

\bigtriangledown f(x*) + \lambda \bigtriangledown g(x*) = 0

g(x*)=0

进而我们可以定义拉格朗日函数:

L(x, \lambda) = f(x)+\lambda g(x)

这时候我们只要令函数L的导数为零(包括对x的偏导数和对\lambda的偏导数都为零),既可以求出让f(x)最小的x(同时满足g(x)=0),其实零两个偏导数为零就等价于上面我们提到的两条方程。

至此,我们就把原优化问题转换成了对拉格朗日函数的无约束优化问题。

二、不等式约束优化问题

上面我们讨论的都是等式约束下的拉格朗日乘子法,那如果约束不是等式,而是不等式呢?这是我们可以照常地使用朗格朗日函数,但是需要附加一些约束条件(称为KKT条件,karush-Kuhn-Tucker条件)。转换后地优化问题如下所示:

考虑具有 个m个等式 约束和 n 个不等式 约束 且可行域 非空的 问题。
\begin{array}{lll} \min _{\boldsymbol{x}} & f(\boldsymbol{x}) & \\ \text { s.t. } & h_{i}(\boldsymbol{x})=0 \quad(i=1, \ldots, m), \\ & g_{j}(\boldsymbol{x}) \leqslant 0 \quad(j=1, \ldots, n) . \end{array}
上述优化问题地拉格朗日函数为:
L(\boldsymbol{x}, \boldsymbol{\lambda}, \boldsymbol{\mu})=f(\boldsymbol{x})+\sum_{i=1}^{m} \lambda_{i} h_{i}(\boldsymbol{x})+\sum_{j=1}^{n} \mu_{j} g_{j}(\boldsymbol{x})
它的KKT条件为
\left\{\begin{array}{l} g_{j}(\boldsymbol{x}) \leqslant 0 \\ \mu_{j} \geqslant 0 \\ \mu_{j} g_{j}(\boldsymbol{x})=0 \end{array}\right.

这里有伙伴可能疑惑这个KKT条件是怎么来的,具体过程参见浅谈KKT条件。总的来讲,它是加入松弛变量把不等式约束变成了等式约束(这里面导出了KKT条件)。由于现在变成了等式约束,所以可以直接写出拉格朗日函数,通过对拉格朗日求导求得最优点。


三、参考资料

【1】周志华《机器学习》

【2】如何理解拉格朗日乘子法? - 知乎

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
拉格朗日乘子法是一种优化算法,应用于具有约束条件的优化问题。它的原理是基于拉格朗日乘子的概念,在求解有约束问题的时候,将约束条件转化为目标函数的一部分,通过求解该新的目标函数,得到问题的最优解。 在使用拉格朗日乘子法时,首先根据问题的约束条件构造拉格朗日函数。拉格朗日函数是由目标函数和约束条件组成的,目标函数会被调整为加入拉格朗日乘子与约束条件的乘积,同时每个约束条件都会有一个对应的拉格朗日乘子。然后,通过求取拉格朗日函数的偏导数,将其等于0,可以得到一组方程,包括目标函数的梯度约束条件的梯度。将这些方程联立求解,就可以得到问题的最优解。 对于拉格朗日函数的求解,可以采用数值方法,例如使用fmincon算法。fmincon是一种非线性约束最小化算法,可以求解具有非线性约束的优化问题。它的实现基于拉格朗日乘子法,通过迭代的方式逼近最优解。在每一次迭代中,通过求解一组子问题,不断调整拉格朗日乘子的值,直到找到最优解为止。 总之,拉格朗日乘子法是一种基于拉格朗日函数的优化算法,通过将约束条件转化为目标函数的一部分,再利用数值方法求解最优解。而fmincon算法则是一种具体的数值方法实现,可以应用于求解具有非线性约束的优化问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值