# 深度学习笔记之约束优化

By [Test](https://paragraph.com/@test-33) · 2022-02-03

---

 有时候，在 x 的所有可能值下最大化或最小化一个函数 f(x) 不是我们所希望的。相反，我们可能希望在 x 的某些集合 S 中找 f(x) 的最大值或最小值。这被称为约束优化 (constrained optimization)。在约束优化术语中，集合 S 内的点 x 被称为可行 (feasible) 点。

       我们常常希望找到在某种意义上小的解。针对这种情况下的常见方法是强加一个范数约束，如 ∥x∥ ≤ 1。约束优化的一个简单方法是将约束考虑在内后简单地对梯度下降进行修改。如

果我们使用一个小的恒定步长 ϵ，我们可以先取梯度下降的单步结果，然后将结果投影回 S。如果我们使用线搜索，我们只能在步长为 ϵ 范围内搜索可行的新 x 点，或者我们可以将线上的每个点投影到约束区域。如果可能的话，在梯度下降或线搜索前将梯度投影到可行域的切空间会更高效 (Rosen, 1960)。

       一个更复杂的方法是设计一个不同的、无约束的优化问题，其解可以转化成原始约束优化问题的解。例如，我们要在 x ∈ R2 中最小化 f(x)，其中 x 约束为具有单位 L2 范数。我们可以关于 θ 最小化 g(θ) = f(\[cos θ, sin θ\]⊤)，最后返回 \[cos θ, sin θ\]作为原问题的解。这种方法需要创造性；优化问题之间的转换必须专门根据我们遇到的每一种情况进行设计。

        Karush–Kuhn–Tucker (KKT) 方法1是针对约束优化非常通用的解决方案。为介绍KKT方法，我们引入一个称为广义 Lagrangian (generalized Lagrangian)或广义 Lagrange 函数 (generalized Lagrange function) 的新函数。

        为了定义Lagrangian，我们先要通过等式和不等式的形式描述 S。我们希望通过 m 个函数 g(i) 和 n 个函数 h(j) 描述 S，那么 S 可以表示为 S = {x | ∀i, g(i)(x) = 0 and ∀j, h(j)(x) ≤ 0}。其中涉及 g(i) 的等式称为等式约束 (equality constraint)，涉及 h(j) 的不等式称为不等式约束 (inequality constraint)。

---

*Originally published on [Test](https://paragraph.com/@test-33/h4AFP3yls3MLVKlgRVFp)*
