局部最优性与 KKT 条件 · 微积分 02

Hailiang Zhao | 2022/01/17

Categories: math Tags: calculus optimality KKT-conditions


在这篇文章中,我将首先介绍局部最优性的一阶和二阶必要条件,然后给出两个最常用的约束优化算法——拉格朗日乘子法与 KKT 条件的使用方法。

局部最优性

局部最优解的必要条件:

一阶定理$\forall x \in \mathbb{R}^n$$y = f(x) \in \mathbb{R}$,若 $x^*$ 为局部最优解且 $f$$x^*$ 的邻域内一阶可导,则 $\nabla f(x^*) = 0$

证明思路:将 $f$$x^*$ 处一阶泰勒展开 $f(x) = f(x^*) + \Delta x^\textrm{T} \nabla f (x^*)$,要在邻域内 $f(x^*)$ 最小,则恒有 $\Delta x^\textrm{T} \nabla f (x^*) \geq 0$。因为 $\Delta x$ 可正可负(左邻域和右邻域),所以恒有 $\nabla f(x^*) = 0$

二阶定理$\forall x \in \mathbb{R}^n$$y = f(x) \in \mathbb{R}$,若 $x^*$ 为局部最优解且 $f$$x^*$ 的邻域内二阶可导,则 $\nabla f(x^*) = 0$$\nabla^2 f(x^*)$ 为半正定矩阵。

证明思路:将 $f$$x^*$ 处二阶泰勒展开 $f(x) = f(x^*) + \frac{1}{2} \Delta x^\textrm{T} \nabla^2 f (x^*) \Delta x$,要在邻域内 $f(x^*)$ 最小,则恒有 $\Delta x^\textrm{T} \nabla^2 f (x^*) \Delta x \geq 0$,所以 $\nabla^2 f (x^*)$ 半正定。这里涉及到线性代数的部分我会在后面给出相应的介绍与分析,敬请期待。

优化算法

最常用的无约束非线性优化算法是一维搜索,其核心是找到合适的迭代方向和每次迭代的最优步长。如果没有曲线信息可供利用(一阶、二阶甚至更高阶的导数),那么可以用 黄金分割法斐波那契法 等方法缩小搜索区间,也可以借助多项式的强大表示能力执行 插值法(牛顿法就是二点二次插值);如果有信息可用,那么通常借助泰勒展开式获得迭代方向。具体地,如果有一阶信息可供利用,那么可以采用 梯度法(最速下降法)及其一系列的改进方法(泰勒一阶展开);如果有二阶信息可供利用,那么可以采用 牛顿法 及其一系列的改进方法(泰勒二阶展开)。牛顿法的两大问题分别是 Hessian 矩阵不总正定和 Hessian 矩阵的逆太难算。对于前者,改进策略是提出各种修正方案保证迭代方向一定是函数下降的方向;对于后者,改进策略是各种 拟牛顿法(用别的矩阵来代替 Hessian 矩阵的逆)。此外,收敛速度介于梯度法和牛顿法之间的重要方法是 共轭方向法,其本质上是保证每一次迭代都是有效的,即同一个迭代方向不会多次出现。

关于共轭梯度法的部分,请移步 理解共轭梯度法(上)· 梯度法及其分析 理解共轭梯度法(下)· 共轭梯度法 。对于上文提及的别的优化算法,我会未来找时间撰写相关文章。

接下来将介绍两个最常用的约束优化算法,熟练掌握这两者是开启 CS 某些领域的科 (灌) 研 (水) 之路的必要条件。

拉格朗日乘子法

适用范围:设 $x \in \mathbb{R}^n$,目标函数为 $f(x)$,需满足 $n$ 个等式约束 $g_i(x) = 0 |_{i=1, ..., n}$。求 $\min_x f (x)$

综上,引入拉格朗日函数 $L (x, \lambda) = f(x) + \sum_{i} \lambda_i g_i (x)$,其中 $\lambda_i$ 被称为拉格朗日乘子。通过联立

$$ \begin{aligned} \left\{ \begin{array}{l} \nabla_x L(x^*, \lambda^*) = 0 \\ \nabla_\lambda L(x^*, \lambda^*) = 0 \qquad (\leftrightarrow g_i(x^*) = 0, \forall i) \end{array} \right. \end{aligned} $$

即可求解极值点 $x^*$ 和乘子的最优值。这里 $\lambda := [\lambda_1, ..., \lambda_n]^\textrm{T}$。 如有必要,我们还需要带入局部最优解的必要条件来对多个潜在的解进行验证。

KKT 条件

适用范围:设 $x \in \mathbb{R}^n$,目标函数为 $f(x)$,需满足 $n$ 个等式约束 $g_i(x) = 0 |_{i=1, ..., n}$$m$ 个不等式约束 $h_j(x) \leq 0 |_{j=1, ..., m}$。求 $\min_x f (x)$

将上述两种情况总结到一起就得到了 KKT 条件:

$$ \begin{aligned} \left\{ \begin{array}{l} \nabla_x f(x^*) + \sum_i \lambda_i^* \nabla_x g_i (x^*) + \sum_j \mu_j^* \nabla_x h_j (x^*) = 0 \\ g_i(x^*) = 0, \quad \forall i = 1, ..., n \\ h_j(x^*) \leq 0, \quad \forall j = 1, ..., m \\ \mu_j^* \geq 0, \quad \forall j = 1, ..., m \\ h_j (x^*) \mu_j^* = 0, \quad \forall j = 1, ..., m \end{array} \right. \end{aligned} $$

最后一个是 KKT 互补条件。当 $\mu^*_j=0$ 时,$h_j$ 没有出现在拉格朗日函数中,说明这个不等式约束没起作用,即 $h_j<0$ 恒成立;当 $\mu^*_j> 0$ 时,$h_j=0$,说明 $h_j$ 起作用了,在边界上起的作用。这个条件将两种情形整合到了一起。

如有必要,我们还需要带入局部最优解的必要条件来对多个潜在的解进行验证。

最后

笔者对拉格朗日乘子法和 KKT 条件的分析较为简略,读者可阅读讲义 Lagrange Multipliers and the Karush-Kuhn-Tucker conditions 加深理解。

转载申请

本作品采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接。您必须给出适当的署名,并标明是否对本文作了修改。