拉格朗日乘子法
问题描述
拉格朗日乘子法(Method of Lagrange multiplier)用于解决等式约束的优化问题(Equality-Constrained Optimization)。
等式约束的优化算法:给定目标函数 $f: \mathbb{R}^m \to \mathbb{R}$ 和等式约束条件 $\mathbf{g}(\mathbf{x}) = \mathbf{c}$,其中 $\mathbf{x} \in \mathbb{R}^n$,$\mathbf{c} \in \mathbb{R}^m$。问题是找到 $\mathbf{x}^\ast$ 满足
$$ \mathbf{x}^\ast = \arg\min_\mathbf{x} f(\mathbf{x}), \quad \operatorname{subject~to} \quad \mathbf{g}(\mathbf{x}) = \mathbf{c}. $$
其中 $\mathbf{g}(\mathbf{x}^\ast) = \mathbf{c}$ 为多个等式约束条件 $g_1(\mathbf{x}^\ast) = c_1$,$g_2(\mathbf{x}^\ast) = c_2$ 等。
注:为了简单起见,我们先考虑一个限制条件 $g(\mathbf{x}) = c$。
核心思想
等高线 Level Sets:对于 $d \in \mathbb{R}$,集合 $\{\mathbf{x}: f(\mathbf{x}) = d\}$ 构成了 $f$ 的一条等高线。
- 梯度与等高线正交:函数在某一点的梯度 $\nabla f(\mathbf{x})$ 指向函数值增长最快的方向,且与该点的等高线正交。
- 约束曲面是等高线:约束 $g(\mathbf{x}) = c$ 本身也定义了一个曲面。由于其是一个等式,其可以被视作等高线,因此 $\nabla g(\mathbf{x})$ 与该曲面正交。
拉格朗日乘子法的直观理解:假设我们沿着约束曲面 $g(\mathbf{x}) = c$ 行走,寻找 $f(\mathbf{x})$ 的最高点。
- 如果我们能沿着约束曲面 $g(\mathbf{x}) = c$ 移动优化 $f(\mathbf{x})$,那我们肯定还没到最优点。
- 当我们达到 $\mathbf{x}^\ast$ 时,我们无法再沿着 $g(\mathbf{x}) = c$ 优化 $f(\mathbf{x})$,因此 $\mathbf{x}^\ast$ 处约束曲线的方向与 $f(\mathbf{x})$ 的等高线方向是相切的。
核心思想:拉格朗日乘子法的核心思想为在最优点 $\mathbf{x}^\ast$处,目标函数 $f(\mathbf{x})$ 的等高线/面与约束条件 $g(\mathbf{x}) = c$ 的曲线/面相切。用数学语言来说即两个曲面 $f(\mathbf{x}) = f(\mathbf{x}^\ast)$ 和 $g(\mathbf{x}) = c$ 相切,那么它们的法向量必然是平行的,也就是
$$ \nabla f(\mathbf{x}^*)=-\lambda\nabla g(\mathbf{x}^*) \quad \Rightarrow \quad \nabla f(\mathbf{x}^*)+\lambda\nabla g(\mathbf{x}^*)=\mathbf{0} $$
其中 $\lambda$ 是一个待定系数,表示两个向量的模长比。
拉格朗日乘子法
拉格朗日乘子法叙述:上述思想引出了一个巧妙的解决方案,我们引入一个辅助函数,称为拉格朗日函数(Lagrangian Function) :
$$ L(\mathbf{x},\lambda)=f(\mathbf{x})+\lambda(g(\mathbf{x})-c) $$
这样我们就把前面的有约束问题转换为了对拉格朗日函数 $L(\mathbf{x}, \lambda)$ 的无约束优化问题:
$$ \begin{cases} \nabla_\mathbf{x}L(\mathbf{x},\lambda)=\nabla f(\mathbf{x})+\lambda\nabla g(\mathbf{x})=\mathbf{0} \\ \frac{\partial L}{\partial\lambda}=g(\mathbf{x})-c=0 \end{cases} $$
其中第一个式子是前一节中导出的条件,第二个式子施加了原始的约束条件 $g(\mathbf{x}) = c$。
多等式约束拉格朗日乘子法:对于多个等式约束的优化问题,我们定义拉格朗日函数为
$$ L(\mathbf{x},\boldsymbol{\lambda})=f(\mathbf{x})+\sum_{i=1}^m\lambda_i(g_i(\mathbf{x})-c_i). $$
对应的无约束优化问题为:
$$ \begin{cases} \nabla_\mathbf{x}L(\mathbf{x},\boldsymbol{\lambda})=\nabla f(\mathbf{x})+\sum_{i=1}^m\lambda_i\nabla g_i(\mathbf{x})=\mathbf{0} \\ \frac{\partial L}{\partial\lambda_i}=g_i(\mathbf{x})-c_i=0, \quad i = 1,2,\cdots, m \end{cases} $$