【优化算法】约束优化

定义

之前提到的梯度下降法,牛顿法都是在定义域全集上寻找函数 f ( x ) 的最大值或者最小值,但有时候,我们希望的不是全集,而是在 x 的某个子集 S 中找到 f ( x ) 的最大值或者最小值。这称为约束优化(constrained optimization)。 在优化术语中,集合 S 内的点 x 称为可行(feasible)点.例如我们常常希望找到在某种意义上小的解,针对这种情况下的常见方法就是强加一个范数约束(norm constraint), 如 x 1 .

简单方法:映射-修改

约束优化的一个简单方法是将约束考虑在内后简单地对梯度下降进行修改。

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

复杂方法 : 转化为无约束优化问题

一种更复杂的方法是设计一个不同的、无约束的优化问题,其解可以转化为原始约束优化问题的解。例如,我们要在 x R 2 中最小化 f ( x ) , 其中 x 约束为具有单位 L 2 范数。我们就可以构造关于 θ 最小化 g ( θ ) = f ( [ cos θ , sin θ ] T ) , 最后返回 [ cos θ , sin θ ] 作为原问题的解。

这种方法需要创造性;优化问题之间的转换必须专门根据我们遇到的每一个情况进行设计。

通用解决方案 – KKT 方法

Karush-Kuhn-Tucker(KKT)方法是针对约束优化非常通用的解决方案,形式上它是 只允许等式约束的Lagrange乘子法的推广。为使用 KKT 方法,我们需要先引入一个新函数 广义Lagrange函数(generalized Lagrange function).

为了定义 广义Lagrange函数, 我们先要通过等式和不等式的形式描述 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)

我们为每个约束引入新的变量 λ i α j , 这些新变量称KKT乘子。广义Lagrange函数可以定义为

L ( x , λ , α ) = f ( x ) + i λ i g ( i ) ( x ) + j α j h ( j ) ( x )
, 现在,我们可以通过优化无约束的广义Lagrange 函数来解决约束最小化问题。

只要存在至少一个可行点且 f ( x ) 不允许取 , 那么以下左右两个函数具有相同的最优目标函数和最优点集 x

min x max λ max α , α > 0 L ( x , λ , α ) ⇐⇒ min x S f ( x )
,
这是因为当约束满足时,
max λ max α , α > 0 L ( x , λ , α ) = f ( x )
, 而违反任意约束时,
max λ max α , α > 0 L ( x , λ , α ) =
. 这组性质保证了不可行点不会是最佳的,而可行点范围内的最优点不变。

我们可以使用一组简单的性质来描述约束优化问题的最优点。这些性质称为 KKT条件。这些事确定一个点事最优点的必要条件,但不一定是充分条件。这些条件是:

  • 广义Lagrange函数的梯度为零
  • 所有关于 x 和 KKT 乘子的约束都满足
  • 不等式约束显示的互补松弛性: α h ( x ) = 0

猜你喜欢

转载自blog.csdn.net/baishuo8/article/details/81460731