接上一篇文章:DeepLearning深度学习(花书)读书笔记——数值计算(一)
4、约束优化
有时候希望在
x
\bm{x}
x的某些集合
S
\Bbb{S}
S中找
f
(
x
)
f(\bm{x})
f(x)的最大值或最小值,这被称为约束优化。集合
S
\Bbb{S}
S内的点
x
\bm{x}
x被称为可行点。
我们常常希望找到在某种意义上的足够小的解,针对这种情况的常见方法是强加一个范数约束,如
∣
∣
x
∣
∣
<
1
||\bm{x}||<1
∣∣x∣∣<1。
约束优化的一种简单实现方法是将约束考虑在内后对梯度下降进行简化修改。如果使用一个小的恒定步长
ϵ
\epsilon
ϵ,可以先取梯度下降的单步结果,然后将结果投影回
S
\Bbb{S}
S。如果使用线搜索,则只能在步长为
ϵ
\epsilon
ϵ范围内搜索可行的新
x
\bm{x}
x点,或者可以将线上的每个点投影到约束区域。
约束优化的一种更复杂的实现方法是设计一个不同的、无约束的优化问题,其解可以转化成原始约束优化问题的解。但这种方法需要创造性,优化问题之间的转换必须专门根据遇到的每一种情况进行设计。
Karush-Kuhn-Tucker(KKT)方法是针对约束优化非常通用的解决方案。为此,引入一个称为广义Lagrangian的新函数。
为了定义Lagrangian,先要通过等式和不等式的形式描述
S
\Bbb{S}
S。假设通过
m
m
m个函数
g
(
i
)
g^{(i)}
g(i)和
n
n
n个函数
h
(
j
)
h^{(j)}
h(j)描述
S
\Bbb{S}
S,则它可以表示为
S
=
{
x
∣
∀
i
,
g
(
i
)
(
x
)
=
0
a
n
d
∀
j
,
h
(
j
)
(
x
)
⩽
0
}
\Bbb{S}=\{\bm{x}\;|\;\forall{i},g^{(i)}(\bm{x})=0\;and\;\forall{j},h^{(j)}(\bm{x})\leqslant0\}
S={x∣∀i,g(i)(x)=0and∀j,h(j)(x)⩽0}。其中,涉及
g
(
i
)
g^{(i)}
g(i)的约束称为等式约束,涉及
h
(
j
)
h^{(j)}
h(j)的约束称为不等式约束。
为每个约束引入新的变量
λ
i
\lambda_i
λi和
α
j
\alpha_j
αj,这些变量称为KKT乘子。则广义Lagrangian可以定义为:
L
(
x
,
λ
,
α
)
=
f
(
x
)
+
∑
i
λ
i
g
(
i
)
(
x
)
+
∑
j
α
j
h
(
j
)
(
x
)
(4.14)
L(\bm{x,\lambda,\alpha})=f(\bm{x})+\sum_i{\lambda_ig^{(i)}(\bm{x})+\sum_j{\alpha_jh^{(j)}(\bm{x})}} \tag{4.14}
L(x,λ,α)=f(x)+i∑λig(i)(x)+j∑αjh(j)(x)(4.14)
此时,可以通过优化无约束的广义Lagrangian函数解决函数的约束最小化问题。
广义Lagrangian函数解决约束问题的数学原理及推导
只要Lagrangian函数存在一个及以上的可行点且 f ( x ) f(\bm{x}) f(x)不允许取 ∞ \infty ∞,那么最小化问题变为函数式
min x max λ max α , α ⩾ 0 L ( x , λ , α ) (4.15) \min_x\;\max_{\lambda}\;\max_{\alpha,\alpha\geqslant0}L(\bm{x,\lambda,\alpha}) \tag{4.15} xminλmaxα,α⩾0maxL(x,λ,α)(4.15)
它与如下函数式具有相同的最优目标函数值和最优点集 x \bm{x} x
min x ∈ S f ( x ) (4.16) \min_{\bm{x}\in\Bbb{S}}f(\bm{x}) \tag{4.16} x∈Sminf(x)(4.16)
这是因为,当约束条件满足时:
max λ max α , α ⩾ 0 L ( x , λ , α ) = f ( x ) (4.17) \max_{\lambda}\;\max_{\alpha,\alpha\geqslant0}L(\bm{x,\lambda,\alpha})=f(\bm{x}) \tag{4.17} λmaxα,α⩾0maxL(x,λ,α)=f(x)(4.17)
当约束条件不满足时:
max λ max α , α ⩾ 0 L ( x , λ , α ) = ∞ (4.18) \max_{\lambda}\;\max_{\alpha,\alpha\geqslant0}L(\bm{x,\lambda,\alpha})=\infty \tag{4.18} λmaxα,α⩾0maxL(x,λ,α)=∞(4.18)
这些性质保证不可行点不会是最佳的,可行点范围内的最优点不变。
同样的,要解决约束最大化问题,可以构造
−
f
(
x
)
-f(\bm{x})
−f(x)的广义Lagrange函数,即以下优化问题:
min
x
max
λ
max
α
,
α
⩾
0
−
f
(
x
)
+
∑
i
λ
i
g
(
i
)
(
x
)
+
∑
j
α
j
h
(
j
)
(
x
)
(4.19)
\min_x\;\max_{\lambda}\;\max_{\alpha,\alpha\geqslant0}-f(\bm{x})+\sum_i{\lambda_ig^{(i)}(\bm{x})+\sum_j{\alpha_jh^{(j)}(\bm{x})}} \tag{4.19}
xminλmaxα,α⩾0max−f(x)+i∑λig(i)(x)+j∑αjh(j)(x)(4.19)
可以将其转换为在外层最大化的问题
max
x
min
λ
min
α
,
α
⩾
0
f
(
x
)
+
∑
i
λ
i
g
(
i
)
(
x
)
−
∑
j
α
j
h
(
j
)
(
x
)
(4.20)
\max_x\;\min_{\lambda}\;\min_{\alpha,\alpha\geqslant0}f(\bm{x})+\sum_i{\lambda_ig^{(i)}(\bm{x})-\sum_j{\alpha_jh^{(j)}(\bm{x})}} \tag{4.20}
xmaxλminα,α⩾0minf(x)+i∑λig(i)(x)−j∑αjh(j)(x)(4.20)
因为可以自由选择每个
λ
i
\lambda_i
λi的符号随意定义加减法,因此其对应项的符号可以不变。
可以使用一组简单性质描述约束优化问题的最优点。这些性质称为Karush–Kuhn–Tucker (KKT) 条件。这些是确定一个点是最优点的必要条件,但不一定是充分条件。这些条件是:
- 广义Lagrangian函数的梯度为零。
- 所有关于 x \bm{x} x和KKT乘子的约束条件都满足。
- 不等式约束显示的 “互补松弛性”: α ⊙ h ( x ) = 0 \bm{\alpha}\odot\bm{h(x)}=0 α⊙h(x)=0。
不等式约束显示的 “互补松弛性”说明
如果 h ( j ) ( x ∗ ) = 0 h^{(j)}(\bm{x^*})=0 h(j)(x∗)=0,就说这个约束 h ( i ) ( x ) h^{(i)}(\bm{x}) h(i)(x)是活跃(active)的(有效的),最优解在约束条件定义的可行性域边界上。
如果约束不是活跃的,即 h ( j ) ( x ∗ ) < 0 h^{(j)}(\bm{x^*})<0 h(j)(x∗)<0(最优解位于约束条件定义的可行性域内部,此时约束条件可认为是无效的)。则最优化问题在有约束的情况下的解是去掉该约束的情况下的解的一部分(有相同局部解)。一个不活跃约束有可能排除其它解。因为不活跃约束 h ( j ) h^{(j)} h(j)具有负值,则它对应的式 min x max λ max α , α ⩾ 0 L ( x , λ , α ) \displaystyle{\min_x\;\max_{\lambda}\;\max_{\alpha,\alpha\geqslant0}}\;L(\bm{x,\lambda,\alpha}) xminλmaxα,α⩾0maxL(x,λ,α)的解中 α j = 0 \alpha_j=0 αj=0。
即 α ⊙ h ( x ) = 0 \bm{\alpha}\odot\bm{h(x)}=0 α⊙h(x)=0,换句话说,对于所有的 j j j, α j ⩾ 0 \alpha_j\geqslant0 αj⩾0或 h ( j ) ( x ) ⩽ 0 h^{(j)}(\bm{x})\leqslant0 h(j)(x)⩽0在收敛时,必有一个是活跃的。
直观的解释是,当这个解是由不等式强加的边界(the solution is on the boundary imposed by the inequality——解在不等式的边界上),则必须通过其KKT乘子 α j \alpha_j αj来影响 x \bm{x} x的解;当不等式对解没有影响(解在约束内部),则将它的KKT乘子归零。
5、实例:线性最小二乘
假设希望找到最小化下式的
x
\bm{x}
x值
f
(
x
)
=
1
2
∣
∣
A
x
−
b
∣
∣
2
2
(4.21)
f(\bm{x})=\frac{1}{2}||\bm{Ax-b}||^2_2 \tag{4.21}
f(x)=21∣∣Ax−b∣∣22(4.21)
存在专门的线性代数算法能够高效的解决这个问题,但是也可以通过这个例子探索如何使用基于梯度的优化来解决这个问题。
5.1、梯度下降法
首先,计算梯度
∇
x
f
(
x
)
=
A
⊤
(
A
x
−
b
)
=
A
⊤
A
x
−
A
⊤
b
(4.22)
\nabla_{\bm{x}}f(\bm{x})=\bm{A^{\top}(Ax-b)}=\bm{A^{\top}Ax-A^{\top}b} \tag{4.22}
∇xf(x)=A⊤(Ax−b)=A⊤Ax−A⊤b(4.22)
然后,可以采用小的步长,并按照下面的算法步骤,实现梯度下降。
算法4.1,从任意点 x \bm{x} x开始,使用梯度下降法关于 x \bm{x} x最小化 f ( x ) = 1 2 ∣ ∣ A x − b ∣ ∣ 2 2 f(\bm{x})=\frac{1}{2}||\bm{Ax-b}||^2_2 f(x)=21∣∣Ax−b∣∣22的算法。
将步长( ϵ \epsilon ϵ)和容差( δ \delta δ)设为小的正数。
w h i l e ∣ ∣ A ⊤ A x − A ⊤ b ∣ ∣ 2 > δ d o while \quad ||\bm{A^{\top}Ax-A^{\top}b}||_2>\delta \quad do while∣∣A⊤Ax−A⊤b∣∣2>δdo
x ← x − ϵ ( A ⊤ A x − A ⊤ b ) \quad \bm{x \larr x-\epsilon(A^{\top}Ax-A^{\top}b)} x←x−ϵ(A⊤Ax−A⊤b)
e n d w h i l e end \quad while endwhile
5.2、牛顿法
在这种情况下,真实函数是二次的,牛顿法所用的二次近似是精确的,该算法会在一步后收敛到全局最小点。
5.3、约束优化
假设最小化同样的函数,但受
x
⊤
x
⩽
1
\bm{x^{\top}x}\leqslant1
x⊤x⩽1的约束。引入广义Lagrangian函数
L
(
x
,
λ
)
=
f
(
x
)
+
λ
(
x
⊤
x
−
1
)
(4.23)
L(\bm{x},\lambda)=f(\bm{x})+\lambda(\bm{x^{\top}x}-1) \tag{4.23}
L(x,λ)=f(x)+λ(x⊤x−1)(4.23)
现在,解决以下问题
min
x
max
λ
,
λ
⩾
0
L
(
x
,
λ
)
(4.24)
\min_{\bm{x}}\max_{\lambda,\lambda\geqslant0}L(\bm{x},\lambda) \tag{4.24}
xminλ,λ⩾0maxL(x,λ)(4.24)
可以用Moore-Penrose伪逆:
x
=
A
⊤
b
\bm{x=A^{\top}b}
x=A⊤b找到无约束最小二乘问题的最小范数解(最优点)。如果这个最优点是可行的(满足约束,即在区域内),那么这也是约束问题的解。否则必须找到约束是活跃的解(即,最优解在区域外,根据约束条件,解在边界上)。
根据KKT条件,关于
x
\bm{x}
x对Lagrangian微分,可以得到方程
A
⊤
A
x
−
A
⊤
b
+
2
λ
x
=
0
(4.25)
\bm{A^{\top}Ax-A^{\top}b}+2\lambda\bm{x}=0 \tag{4.25}
A⊤Ax−A⊤b+2λx=0(4.25)
则可知,该解的形式将会是
x
=
(
A
⊤
A
+
2
λ
I
)
−
1
A
⊤
b
(4.26)
\bm{x}=(\bm{A^{\top}A}+2\lambda\bm{I})^{-1}\bm{A^{\top}b} \tag{4.26}
x=(A⊤A+2λI)−1A⊤b(4.26)
同样的,
λ
\lambda
λ取值的选择也必须使结果服从约束,可以通过对
λ
\lambda
λ进行梯度上升找到这个值。根据下面的公式可知
∂
∂
λ
L
(
x
,
λ
)
=
x
⊤
x
−
1
(4.27)
\frac{\partial}{\partial\lambda}L(\bm{x},\lambda)=\bm{x^{\top}x}-1 \tag{4.27}
∂λ∂L(x,λ)=x⊤x−1(4.27)
当
x
\bm{x}
x的范数大于
1
1
1时,Lagrangian函数相对于
λ
\lambda
λ的导数是正的。因此,为了跟随导数上坡并且相对于变量
λ
\lambda
λ增加Lagrangian函数的值,需要增加
λ
\lambda
λ(个人理解:导数大于零时函数是上升的,为了实现问题式中的
max
λ
,
λ
⩾
0
L
(
x
,
λ
)
\displaystyle{\max_{\lambda,\lambda\geqslant0}}\;L(\bm{x},\lambda)
λ,λ⩾0maxL(x,λ)部分,即相对于
λ
\lambda
λ取函数最大值,就要增加
λ
\lambda
λ)。此时,因为
x
\bm{x}
x的惩罚系数(
λ
\lambda
λ)增加了,求解关于
x
\bm{x}
x的线性方程时将得到较小范数的解。
求解关于
x
\bm{x}
x的线性方程和调整
λ
\lambda
λ的过程,将一直持续到
x
\bm{x}
x具有正确的范数(
x
⊤
x
=
1
\bm{x^{\top}x}=1
x⊤x=1),且Lagrangian函数关于
λ
\lambda
λ的导数为
0
0
0(约束条件是活跃的)。
拉格朗日(Lagrangian)乘数法求解约束最优问题
拉格朗日乘数法,是数学最优化问题中的一种寻找多元函数在其变量受到一个或多个条件的约束时的局部极值的方法。这种方法可以将一个有 n n n个变量与 k k k个约束条件的最优化问题转换为一个求解有 n + k n+k n+k个变量的方程组的问题。这种方法通过引入一个或一组新的未知数(即拉格朗日乘数),构建一个新的拉格朗日函数。
无约束条件的函数取极值的必要条件是函数梯度等于零。有等式约束条件时,函数取极值的必要条件是在该点上梯度与约束面垂直。有不等式约束条件时,分为边界和内部两种情况来讨论取极值的必要条件。
因此,假设多元函数 f ( x ) = f ( x 1 , x 2 , … , x n ) f({\bm{x}})=f(x_1,x_2,\dots,x_n) f(x)=f(x1,x2,…,xn)存在 k k k个约束条件(等式约束):
g ( 1 ) ( x 1 , x 2 , … , x n ) = 0 g^{(1)}(x_1,x_2,\dots,x_n)=0 g(1)(x1,x2,…,xn)=0
g ( 2 ) ( x 1 , x 2 , … , x n ) = 0 g^{(2)}(x_1,x_2,\dots,x_n)=0 g(2)(x1,x2,…,xn)=0
… \dots …
g ( k ) ( x 1 , x 2 , … , x n ) = 0 g^{(k)}(x_1,x_2,\dots,x_n)=0 g(k)(x1,x2,…,xn)=0
此时,函数取极值的必要条件弱化为:
∇ f = ∑ i = 1 k λ i ∇ g ( i ) (z4.3) \nabla{f}=\sum_{i=1}^{k}\lambda_i\nabla{g^{(i)}} \tag{z4.3} ∇f=i=1∑kλi∇g(i)(z4.3)
上式配上约束条件:
{ ∇ x f ( x ) − ∑ i = 1 k λ i ∇ x g ( i ) ( x ) = 0 g ( i ) ( x ) = 0 , i ∈ [ 1 , k ] (z4.4) \begin{cases} \nabla_x{f(\bm{x})}-\sum_{i=1}^{k}\lambda_i\nabla_x{g^{(i)}(\bm{x})} =0\\ \;g^{(i)}(\bm{x})=0,i\in[1,k] \end{cases} \tag{z4.4} {∇xf(x)−∑i=1kλi∇xg(i)(x)=0g(i)(x)=0,i∈[1,k](z4.4)
引入拉格朗日函数,则有
L ( x 1 , x 2 , … , x n , λ 1 , λ 2 , … , λ k ) = f ( x 1 , x 2 , … , x n ) − ∑ i = 1 k λ i g ( i ) ( x 1 , x 2 , … , x n ) (z4.5) L(x_1,x_2,\dots,x_n,\lambda_1,\lambda_2,\dots,\lambda_k)={f(x_1,x_2,\dots,x_n)}-\sum_{i=1}^{k}\lambda_i{g^{(i)}(x_1,x_2,\dots,x_n)} \tag{z4.5} L(x1,x2,…,xn,λ1,λ2,…,λk)=f(x1,x2,…,xn)−i=1∑kλig(i)(x1,x2,…,xn)(z4.5)
此时,上面的方程组变为(约束条件相当于函数对乘子的偏导数为零):
{ ∂ L ∂ x 1 = 0 , ∂ L ∂ x 2 = 0 , … ∂ L ∂ x n = 0 , ∂ L ∂ λ 1 = 0 , ∂ L ∂ λ 2 = 0 , ⋯ ∂ L ∂ λ k = 0 (z4.6) \begin{dcases} \frac{\partial{L}}{\partial{x_1}}=0,\\ \frac{\partial{L}}{\partial{x_2}}=0,\\ \dots \\ \frac{\partial{L}}{\partial{x_n}}=0,\\ \frac{\partial{L}}{\partial{\lambda_1}}=0,\\ \frac{\partial{L}}{\partial{\lambda_2}}=0,\\ \cdots \\ \frac{\partial{L}}{\partial{\lambda_k}}=0\\ \end{dcases} \tag{z4.6} ⎩ ⎨ ⎧∂x1∂L=0,∂x2∂L=0,…∂xn∂L=0,∂λ1∂L=0,∂λ2∂L=0,⋯∂λk∂L=0(z4.6)
求解上述方程组,即可得到函数在约束条件下的极值点。
其它说明:
1、可直接利用公式解方程组,也可多次迭代调整变量与拉格朗日乘子的取值组合来解方程组。
2、不等式约束是在等式约束的拉格朗日函数基础上加入了KKT条件(即约束分为边界(等于)和内部(小于)两种情况,其具有互补松驰性)。