直观理解拉格朗日乘子法

一、等式约束优化问题

拉格朗日乘数法(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】如何理解拉格朗日乘子法? - 知乎

### Matlab 中实现拉格朗日乘子法 #### 使用 `fmincon` 函数解决约束优化问题 在 MATLAB 中,可以使用内置函数 `fmincon` 来处理带有不等式和/或等式约束的非线性规划问题。该方法内部实现了拉格朗日乘子法来寻找最优解。 对于给定的目标函数 \( f(x) \),并存在若干个等式约束 \( c_i(x)=0 \) 和不等式约束 \( ceq_j(x)\leq 0 \),可以通过定义这些关系作为输入参数传递给 `fmincon` 函数[^1]。 下是一个简单的例子展示如何设置此类问题: ```matlab % 定义变量初值 x0 = [1, 2]; % 设置上下界 (如果有的话) lb = []; % 下限为空表示无下限 ub = []; % 上限为空表示无上限 % 非线性约束条件 nonlcon = @(x)[x(1)^2 + x(2)^2 - 1; % 不等式约束: x1^2+x2^2<=1 x(1)*x(2)-1]; % 等式约束: x1*x2=1 % 调用fmincon求解器 [x,fval] = fmincon(@(X) X(1)^2+X(2)^2,x0,[],[],[],[],lb,ub,@nonlcon); disp(['Optimal solution found at ', num2str(x)]); disp(['Objective function value is ', num2str(fval)]); ``` 这段代码展示了如何构建一个具有两个决策变量、一个圆盘内的区域限制(即 \(x_1^2 + x_2^2\leqslant 1\))和平上一条直线上的位置限定 (\(x_1 * x_2 = 1\)) 的最小化平方距离问题模型,并调用了 `fmincon` 进行求解。 #### 绘制不同拉格朗日乘子下的函数图像 为了更好地理解拉格朗日乘数的影响,还可以绘制出不同的拉格朗日乘子对应的函数图形。这有助于直观感受各个参数变化时对最终结果产生的影响[^2]。 ```matlab lambda_values = linspace(-5, 5, 10); % 创建一系列λ值 [X,Y] = meshgrid(linspace(-2*pi,2*pi)); figure; hold on; for lambda = lambda_values' Z = sin(X).*cos(Y)+lambda*(exp(-(X.^2+Y.^2))-0.7); surf(X,Y,Z,'EdgeColor','none'); end xlabel('X axis'); ylabel('Y axis'); zlabel('Z axis'); title('Lagrange Function with Different Multipliers'); colorbar; legend(arrayfun(@(n)sprintf('Lambda=%.2f', n), lambda_values, 'UniformOutput', false)); view([30 30]); shading interp; lighting gouraud; axis tight equal; camlight headlight; material shiny; ``` 上述脚本会生成一组三维曲图,其中每个曲对应于特定的 λ 值组合而成的新目标函数形式。通过观察这些图表可以帮助更深刻地认识拉格朗日乘子的作用机制及其物理意义。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值