有约束优化之拉格朗日乘子法求解

有约束优化之拉格朗日乘子法求解

本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可以直接应用拉格朗日乘子法去求取最优值;对于含有不等式约束的优化问题,可以转化为在满足 KKT 约束条件下应用拉格朗日乘子法求解。

拉格朗日求得的并不一定是最优解,只有在凸优化的情况下,才能保证得到的是最优解,所以本文称拉格朗日乘子法得到的为可行解,其实就是局部极小值。

等式约束

min ⁡ x f ( x ) \min\limits_x f(x) xminf(x)
s . t .    g ( x ) = 0 s.t. ~~g(x)=0 s.t.  g(x)=0

拉格朗日乘子法思路:
首先假设解为 x ∗ x_* x,则有:
1) g ( x ∗ ) = 0 g(x_*)=0 g(x)=0,且 g ( x ) = 0 g(x)=0 g(x)=0在点 x ∗ x_* x的法向量 ∇ g ( x ∗ ) \nabla g(x_*) g(x)必然正交于该约束曲面。
2) f ( x ) f(x) f(x)在点 x ∗ x_* x的梯度 ∇ f ( x ∗ ) \nabla f(x_*) f(x)正交于该约束曲面。
则梯度向量同方向必有 ∇ f ( x ∗ ) + λ ∇ g ( x ∗ ) = 0 \nabla f(x_*)+\lambda \nabla g(x_*)=0 f(x)+λg(x)=0,且 λ ≠ 0 \lambda\neq0 λ̸=0
总的求解条件就是:
{ ∇ f ( x ∗ ) + λ ∇ g ( x ∗ ) = 0 g ( x ∗ ) = 0                               ( 1 ) λ ≠ 0 \left\{ \begin{array}{l} \nabla f(x_*)+\lambda \nabla g(x_*)=0 \\ g(x_*)=0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(1)\\ \lambda\neq0 \end{array}\right. f(x)+λg(x)=0g(x)=0                             (1)λ̸=0
如果构造拉格朗日函数: L ( x , λ ) = f ( x ) + λ g ( x ) L(x,\lambda)=f(x)+\lambda g(x) L(x,λ)=f(x)+λg(x),则原等式约束问题等价于如下优化问题:
min ⁡ x , λ L ( x , λ ) \min\limits_{x,\lambda}L(x,\lambda) x,λminL(x,λ)
s . t .   λ ≠ 0 s.t.~\lambda\neq0 s.t. λ̸=0
求解:
∂ L ∂ x = 0 \frac{\partial L}{\partial x}=0 xL=0
∂ L ∂ λ = 0 \frac{\partial L}{\partial \lambda}=0 λL=0
可到求解条件(1).

不等式约束

min ⁡ x f ( x ) \min\limits_x f(x) xminf(x)
s . t .    g ( x ) ≤ 0 s.t. ~~g(x)\leq0 s.t.  g(x)0

拉格朗日乘子法思路:
首先假设解为 x ∗ x_* x,则有:
1)如果解在约束边界上,即 g ( x ∗ ) = 0 g(x_*)=0 g(x)=0,则 g ( x ) = 0 g(x)=0 g(x)=0在点 x ∗ x_* x的法向量 ∇ g ( x ∗ ) \nabla g(x_*) g(x)必然正交于该约束曲面,且 f ( x ) f(x) f(x)在点 x ∗ x_* x的梯度 ∇ f ( x ∗ ) \nabla f(x_*) f(x)正交于该约束曲面。且梯度方向相反,否则解将移动到约束边界内。所以有:
{ g ( x ∗ ) = 0 ∇ f ( x ∗ ) + λ ∇ g ( x ∗ ) = 0                     ( 2 ) λ > 0 \left\{ \begin{array}{l} g(x_*)=0\\ \nabla f(x_*)+\lambda \nabla g(x_*)=0 ~~~~~~~~~~~~~~~~~~~(2)\\ \lambda>0 \end{array}\right. g(x)=0f(x)+λg(x)=0                   (2)λ>0
2)如果解在约束边界内,即 g ( x ∗ ) < 0 g(x_*)<0 g(x)<0,则约束条件不起作用,有 ∇ f ( x ∗ ) = 0 \nabla f(x_*)=0 f(x)=0。所以有:
{ g ( x ∗ ) < 0 ∇ f ( x ∗ ) = 0 \left\{ \begin{array}{l} g(x_*)<0\\ \nabla f(x_*)=0\\ \end{array}\right. {g(x)<0f(x)=0
或者(为了合并)
{ g ( x ∗ ) < 0 ∇ f ( x ∗ ) + λ ∇ g ( x ∗ ) = 0                   ( 3 ) λ = 0 \left\{ \begin{array}{l} g(x_*)<0\\ \nabla f(x_*)+\lambda \nabla g(x_*)=0 ~~~~~~~~~~~~~~~~~ (3)\\ \lambda=0 \end{array}\right. g(x)<0f(x)+λg(x)=0                 (3)λ=0
则合并(2)(3)总的求解条件(KKT)就是:
{ g ( x ∗ ) ≤ 0 ∇ f ( x ∗ ) + λ ∇ g ( x ∗ ) = 0                   ( 4 ) λ ≥ 0 λ g ( x ∗ ) = 0 \left\{ \begin{array}{l} g(x_*)\leq0\\ \nabla f(x_*)+\lambda \nabla g(x_*)=0 ~~~~~~~~~~~~~~~~~ (4)\\ \lambda\geq0\\ \lambda g(x_*)=0 \end{array}\right. g(x)0f(x)+λg(x)=0                 (4)λ0λg(x)=0
如果构造拉格朗日函数: L ( x , λ ) = f ( x ) + λ g ( x ) L(x,\lambda)=f(x)+\lambda g(x) L(x,λ)=f(x)+λg(x),则原不等式约束问题等价于如下优化问题:

min ⁡ x , λ L ( x , λ ) s . t .    { g ( x ) ≤ 0 λ ≥ 0 λ g ( x ) = 0 \min\limits_{x,\lambda}L(x,\lambda)\\ s.t. ~~\left\{ \begin{array}{l} g(x)\leq0\\ \lambda\geq0\\ \lambda g(x)=0 \end{array}\right. x,λminL(x,λ)s.t.  g(x)0λ0λg(x)=0
求解:
∂ L ∂ x = 0 \frac{\partial L}{\partial x}=0 xL=0
∂ L ∂ λ = 0 \frac{\partial L}{\partial \lambda}=0 λL=0
可到求解条件(4).

对于不等式约束,只要满足一定的条件,依然可以使用拉格朗日乘子法解决,这里的条件便是 KKT 条件

注意梯度,法向量,切线,导数区别。

你可能感兴趣的:(机器学习,优化)