拉格朗日乘子、KKT条件等相关理论现在由于机器学习的热度经常可以看到介绍它们的文章,因为它们是一些机器学习模型例如支持向量机的底层原理;更一般的来说,它们属于处理非线性优化问题的典型技术。这篇文章先用一个具体的例子来演示非线性优化问题的处理过程,然后用二维平面的例子来辅助理解拉格朗日定理,最后列出该定理严格的数学描述
最简单的方法: 替换法
只要优化问题中存在非线性关系,无论是目标函数还是约束条件,那么这个问题就成了一个非线性优化问题,像单纯形法等适用于线性优化问题的算法是无法处理的。对于一个无约束的优化问题,即求一个函数的最值问题,相对来说是比较容易的;所以处理带约束的非线性优化问题,最经典的一种思想就是想办法把约束信息移除掉,把原始问题转换成一个没有约束的函数最值问题。
对于一些非常简单的非线性优化问题,替换法是最容易想到的方法。例如这个问题:
m a x i m i z e Z = x y − c 1 − x c 2 s u b j e c t t o x = 1500 − 24.6 y \begin{aligned} maximize\quad& Z=xy-c_1-xc_2\\ subject\ to\quad& x=1500-24.6y \end{aligned} maximizesubject toZ=xy−c1−xc2x=1500−24.6y
显然我们可以利用约束等式,把目标函数中的 x x x用 y y y来替代:
Z = ( 1500 − 24.6 y ) y − c 1 − ( 1500 − 24.6 y ) c 2 = − 24.6 y 2 + ( 24.6 c 2 + 1500 ) y − c 1 − 1500 c 2 Z=(1500-24.6y)y-c_1-(1500-24.6y)c_2\\ = -24.6y^2+(24.6c_2+1500)y-c_1-1500c_2 Z=(1500−24.6y)y−c1−(1500−24.6y)c2=−24.6y2+(24.6c2+1500)y−c1−1500c2
现在原问题就变成了一个关于 y y y的二次函数,二次函数求最大最小值就很容易了。
当然替换法只能适用于这种非常简单的情况,约束稍微复杂一点就不适用了
更通用的方法:拉格朗日乘子法
拉格朗日乘子方法是更为一般和通用的处理非线性优化问题的技术,一句话描述它,通过引入拉格朗日乘子 λ \lambda λ把约束附加到目标函数上,构成拉格朗日函数,从而将原来的有约束问题转化成无约束问题。
例如我们要计算下面这个例子:
m a x i m i z e Z = 4 x 1 − 0.1 x 1 2 + 5 x 2 − 0.2 x 2 2 s u b j e c t t o x 1 + 2 x 2 = 40 \begin{aligned} maximize\quad& Z=4x_1-0.1x_1^2+5x_2-0.2x_2^2\\ subject\ to\quad& x_1+2x_2=40 \end{aligned} maximizesubject toZ=4x1−0.1x12+5x2−0.2x22x1+2x2=40
我们先把约束等式写成下面的格式:
x 1 + 2 x 2 − 40 = 0 x_1+2x_2-40=0 x1+2x2−40=0
接着我们引入用 λ \lambda λ表示的拉格朗日乘子,将它乘上约束等式的左边,然后用目标函数减去这个分量:
L = Z − λ ( x 1 + 2 x 2 − 40 ) = 4 x 1 − 0.1 x 1 2 + 5 x 2 − 0.2 x 2 2 − λ ( x 1 + 2 x 2 − 40 ) \begin{aligned} L&=Z-\lambda(x_1+2x_2-40)\\ &=4x_1-0.1x_1^2+5x_2-0.2x_2^2-\lambda(x_1+2x_2-40) \end{aligned} L=Z−λ(x1+2x2−40)=4x1−0.1x12+5x2−0.2x22−λ(x1+2x2−40)
这个 L L L就叫做拉格朗日函数,按照拉格朗日定理,拉格朗日函数的最优解就是原始的带约束的优化问题的解;怎么求解拉格朗日函数的最优解呢? 那我们只需要利用可微函数极值点梯度为零的性质求解就行了,也就是分别对 L L L中的变量 x 1 x_1 x1, x 2 x_2 x2和 λ \lambda λ求偏导并另其等于零:
∂ L ∂ x 1 = 4 − 0.2 x 1 − λ = 0 ∂ L ∂ x 2 = 5 − 0.4 x 2 − 2 λ = 0 ∂ L ∂ λ = − x 1 − 2 x 2 + 40 = 0 ( 这 就 是 原 问 题 的 约 束 等 式 ) \begin{aligned} &\frac{\partial L}{\partial x_1}=4-0.2x_1-\lambda=0\\ &\frac{\partial L}{\partial x_2}=5-0.4x_2-2\lambda=0\\ &\frac{\partial L}{\partial \lambda}=-x_1-2x_2+40=0(这就是原问题的约束等式)\\ \end{aligned} ∂x1∂L=4−0.2x1−λ=0∂x2∂L=5−0.4x2−2λ=0∂λ∂L=−x1−2x2+40=0(这就是原问题的约束等式)
求解这个方程组,可以得到最优解:
x 1 = 18.3 x 2 = 10.8 λ = 0.33 \begin{aligned} &x_1=18.3\\ &x_2=10.8\\ &\lambda=0.33\\ \end{aligned} x1=18.3x2=10.8λ=0.33
拉格朗日乘子法局限性也很大,首先它只适用于约束只有等式的情况,当存在不等式时,需要引入KKT条件定理进行扩展;另一方面当目标或约束复杂度很高时,通过简单的求偏导等于零来直接计算最优解也变得不现实
图示
为了辅助理解拉格朗日定理,一般都会借助二维图例来说明,这当然不是该定理严格的数学证明,不过比较直观,便于理解它的过程。
我们用一个简单的二元单约束优化问题来举例:
m a x i m i z e f ( x 1 , x 2 ) = x 1 x 2 s u b j e c t t o h ( x 1 , x 2 ) = x 1 2 + x 2 2 = 1 x 1 , x 2 ≥ 0 \begin{aligned} maximize\quad& f(x_1,x_2)=x_1x_2\\ subject\ to\quad& h(x_1,x_2)=x_1^2+x_2^2=1\\ &x_1,x_2\geq 0 \end{aligned} maximizesubject tof(x1,x