不等式约束的拉格朗日函数

等式约束的最值问题

从几何的角度来看,等式约束对应的是定义域内的一段曲线(曲面),其维度必然是小于定义域的。如下图的 \(g(\mathbf{x})=c\),其形式和等值线相似。

图源自 WikiPedia

如果在约束上取到了极值 \((\mathbf{x_{0}})\),则下两条至少有一条成立:

  • \(\nabla f(\mathbf{x_{0}})=0\)
  • \(\lambda \cdot \nabla g(\mathbf{x_{0}}) + \nabla f(\mathbf{x_{0}}) = 0\)

其中第二条是说梯度在同一直线上。换而言之,约束曲线(曲面)和等值线相切。

这比较符合直觉:如果 \(\nabla f \neq 0\),那么等值线左右必然有一条值不相等的等值线;此时,如果约束曲线不是相切,而是从等值线中穿过,则约束曲线必然也经过了领域内的其他等值线,则当前点不可能是极值。

把两个等式合并,约束极值的必要条件如下:

\[ \exists \lambda \in \mathbb{R}, \lambda \cdot \nabla g(\mathbf{x}) + \nabla f(\mathbf{x}) = 0 \]

不要忘记还有约束 \(g(\mathbf{x})=0\)。总的来说,对于 \(\mathbf{x}\) 的每个分量,\(\nabla\) 都提供了一个等式;而对于额外的 \(\lambda\),我们还有一个约束条件。变量数等于方程数,肯定能解出若干个根。

如果你善于观察,就会发现,上面这些等式可以被统一成一个新的函数:

\[ L(\mathbf{x}, \lambda) = f(\mathbf{x}) + \lambda \cdot g(\mathbf{x}) \]

\(L_{\mathbf{x}}\) 就是梯度的限制,而 \(L_{\lambda}\) 就是约束条件 \(g=0\)。所以,等式约束优化问题等价于新函数 \(L\) 的无约束优化问题。这个新函数,我们叫做拉格朗日函数;而 \(\lambda\),叫做拉格朗日乘数。

如果有多个等式限制,也可以看成 \(\mathbf{g(x)}\) 变成一个向量值函数,此时上面的分析可以沿用,只是最后的拉格朗日乘数 \(\mathbf{\lambda}\) 也变成一个向量,而拉格朗日函数如下:

\[ \begin{aligned} L(\mathbf{x,\lambda}) &= f(x) + \left< \mathbf{\lambda,g(x)} \right> \\ &= f(x) + \sum_{i=1}^m \lambda _{i} \cdot g_{i}(\mathbf{x}) \end{aligned} \]

当然,要知道这都是必要条件,解出结果之后还是需要判断。

不等式约束优化

有没有可能把等式约束推广一下?我们来把喵叫个咪:

对于不等式约束 \(g(\mathbf{x}) \geq 0\),对应图像上其实是一个半平面。取到极大值时,下面两种情况至少成立一个:

  • \(\nabla f(\mathbf{x}) = 0\)
  • \(g(\mathbf{x}) = 0,\varphi>0,\varphi \cdot \nabla g(\mathbf{x}) + \nabla f(\mathbf{x}) = 0\)

第二点要稍微解释一下:因为是不等式优化,所以 \(f,g\) 梯度方向不能相同。不然沿着梯度走,\(g\) 变大满足 \(g\geq 0\)\(f\) 也变大,就不算极大值了。此时梯度方向必须相反。

当然,如果约束是 \(\leq\) 或是求极小值,梯度方向又必须相同。但是通过添加负号的方法,可以把所有问题都转化为 \(\geq\) 极大值,下面就在这个假设下讨论。

上述的两个条件也可以合成一个:

\[ \varphi \geq 0, \varphi \cdot g(\mathbf{x})=0, \varphi \cdot \nabla g(\mathbf{x}) + \nabla f(\mathbf{x}) = 0 \]

则仿照上面的分析,构造的拉格朗日函数如下:

\[ L(\mathbf{x}, \varphi) = f(\mathbf{x}) + \varphi \cdot g(\mathbf{x}) \]

但是多了约束条件 \(\varphi \geq 0\)。总共要满足下列四个条件:

\[ \left\{\begin{aligned} L_{\mathbf{x}} &= 0 \\ \varphi &\geq 0 \\ \varphi \cdot g(\mathbf{x}) &= 0 \\ g(\mathbf{x}) & \geq 0 \end{aligned}\right. \]

其中前三个是我们构造拉格朗日函数后额外引入的,它们被称为 KKT 条件。