前言:相信很多人在初步接触拉格朗日的时候都比较云里雾里,比如不知道什么是拉格朗日乘子法;在用拉格朗日乘子法解决实际问题时不知到其含义,心里有些没底;在一些算法中用到了拉格朗日乘子法时,心里对该算法的排斥感油然而生等等问题,当然在本人写该博客之前也是会遇到以上问题,因此本博客深入的介绍了拉格朗日乘子法的原理以及原理中各部分出现的原因。
(一)什么是拉格朗日乘子法
是一种更便捷的求含有约束条件的极值问题的方法。其主要思想是将含有约束条件的极值问题转化为无约束条件的极值问题。纵观全网,可以发现也有人说拉格朗日乘数法,其实这两种说法都是指同一个东西,只是在翻译“Lagrange Multiplier Method”时不同罢了。
(二)拉格朗日乘子法的深入理解
(提示:如下中带下标的函数表示该函数对所指定下标求偏导。 f x f_x fx表示函数f对x变量求偏导; d y d x \frac{d_y}{d_x} dxdy表示函数y对变量x求导。)
- 等式约束条件求极值问题
问题:在条件 ϕ ( x , y ) = 0 \phi(x,y)=0 ϕ(x,y)=0下求函数 z = f ( x , y ) z=f(x,y) z=f(x,y)的极值。
解:由于 ϕ ( x , y ) = 0 \phi(x,y)=0 ϕ(x,y)=0,那么可以得到 y = Φ ( x ) y=\Phi(x) y=Φ(x)(这里假设 ϕ ( x , y ) \phi(x,y) ϕ(x,y)是显函数),则问题可转为 z = f ( x , Φ ( x ) ) z=f(x,\Phi(x)) z=f(x,Φ(x))求极值。
那么极值点必须满足 z x = f x + f y d y d x = 0 (1) z_x=f_x+f_y\frac{d_y}{d_x}=0 \tag{1} zx=fx+fydxdy=0(1)
由 d y d x = − ϕ x ϕ y \frac{d_y}{d_x}=-\frac{\phi_x}{\phi_y} dxdy=−ϕyϕx可得 f x − f y ϕ x ϕ y = 0 (2) f_x-f_y\frac{\phi_x}{\phi_y}=0 \tag{2} fx−fyϕyϕx=0(2)则得到 f x ϕ x = f y ϕ y = − λ ( 假 设 为 该 值 ) (3) \frac{f_x}{\phi_x}=\frac{f_y}{\phi_y}=-\lambda(假设为该值) \tag{3} ϕxfx=ϕyfy=−λ(假设为该值)(3)结合题目条件和(3)式可知极值点需满足以下条件 { f x + λ ϕ x = 0 f y + λ ϕ y = 0 ϕ ( x , y ) = 0 (4) \begin{cases} f_x+\lambda\phi_x=0\\ f_y+\lambda\phi_y=0\\ \phi(x,y)=0\\ \end{cases} \tag{4} ⎩⎪⎨⎪⎧fx+λϕx=0fy+λϕy=0ϕ(x,y)=0(4)
为了可以得到(4)式,可以制造一个辅助函数即 F = f ( x , y ) + λ ϕ ( x , y ) (5) F=f(x,y)+\lambda\phi(x,y)\tag{5} F=f(x,y)+λϕ(x,y)(5)
求该辅助函数的极值需满足以下条件 { F x = f x + λ ϕ x = 0 F y = f y + λ ϕ y = 0 F λ = ϕ ( x , y ) = 0 (6) \begin{cases} F_x=f_x+\lambda\phi_x=0\\ F_y=f_y+\lambda\phi_y=0\\ F_\lambda=\phi(x,y)=0\\ \end{cases} \tag{6} ⎩⎪⎨⎪⎧Fx=fx+λϕx=0Fy=fy+λϕy=0Fλ=ϕ(x,y)=0(6)
求解该方程组,得到x、y、 λ \lambda λ的值,将x、y代入到目标函数 z = f ( x , y ) z=f(x,y) z=f(x,y)中,即可得到极值。
过程总结:
(1)可以看到求辅助函数的极值条件(6)式和求目标函数z的极值条件(4)式是相同的,因此在遇到有等式条件求极值问题时可以直接将目标函数转为辅助函数。之后求辅助函数的极值点,将所求得的极值点代入到目标函数中去即可。
(2)等式约束条件前的系数 λ \lambda λ称为拉格朗日乘子。辅助函数F称为拉格朗日( Lagrange )函数。利用拉格朗日函数求极值的方法称为拉格朗日乘子法。
(3)由求解过程可知,目前方法只适用于等式约束条件下的求极值问题。 - 不等式约束条件求极值问题
对于不等式约束条件求极值问题,只要满足一定的条件,仍然可以使用拉格朗日乘子法解决,这里的条件便是KKT条件。
问题:函数 f ( x ) 、 g ( x ) 、 h ( x ) f(x)、g(x)、h(x) f(x)、g(x)、h(x)是定义在 R R R(实数)上的连续可微函数(可以求导的函数),在 g ( x ) ≤ 0 g(x)\le0 g(x)≤0, h ( x ) = 0 h(x)=0 h(x)=0的情况下求函数 f ( x ) f(x) f(x)的最小值。
( m i n x ∈ R ) f ( x ) s . t . g ( x ) ≤ 0 s . t . h ( x ) = 0 {min \choose x\in R}\ f(x)\\s.t.g(x)\le0\\s.t.h(x)=0 (x∈Rmin) f(x)s.t.g(x)≤0s.t.h(x)=0
解:由题意 g ( x ) ≤ 0 g(x)\le0 g(x)≤0,说明可行解 ∗ x *x ∗x在不等式约束条件中有两种情况,一种是使 g ( x ) = 0 g(x)=0 g(x)=0,这时就是等式约束条件求极值问题,可直接用拉格朗日乘子法解决;另一种是 g ( x ) < 0 g(x)<0 g(x)<0,这时拉格朗日乘子法就无法解决了,因此可以在其前设一个系数 α \alpha α为0,问题又变回了等式约束条件求极值,仔细思考可知以上两种情况都可归为 α g ( x ) = 0 \alpha g(x)=0 αg(x)=0(KKT条件之一,松弛互补条件),其中 α ≥ 0 \alpha \geq 0 α≥0(KKT条件之一,至于为什么是">",原因在下面所说的对偶问题处)。
此时引用拉格朗日函数得: L ( x , α , β ) = f ( x ) + α g ( x ) + β h ( x ) ; α ≥ 0 (7) L(x,\alpha,\beta)=f(x)+\alpha g(x)+\beta h(x);\ \alpha \geq 0 \tag{7} L(x,α,β)=f(x)+αg(x)+βh(x); α≥0(7)由于 α ≥ 0 、 g ( x ) ≤ 0 \alpha \geq 0、g(x)\le0 α≥0、g(x)≤0,则 L ( x , α , β ) ≤ f ( x ) L(x,\alpha,\beta) \le f(x) L(x,α,β)≤f(x),因此可以将求 f ( x ) f(x) f(x)的最小值变为求使 L ( x , α , β ) L(x,\alpha,\beta) L(x,α,β)函数为最大值时的变量 α 、 β \alpha、\beta α、β(对偶问题),然后通过 α 、 β \alpha、\beta α、β求出 x x x,在将 x x x代入 f ( x ) f(x) f(x)即可。
那么问题就转化成了在KKT条件下求 ( m a x α , β ) L ( x , α , β ) {max\choose \alpha,\beta}\ L(x,\alpha,\beta) (α,βmax) L(x,α,β)(在对偶问题里面假设函数L的值受 α , β \alpha,\beta α,β的影响,x的取值由 α , β \alpha,\beta α,β决定),将其转化为方程组
{ L x = 0 L α = 0 L β = 0 α g ( x ) = 0 α ≥ 0 g ( x ) ≤ 0 h ( x ) = 0 (8) \begin{cases} L_x=0\\ L_\alpha=0\\ L_\beta=0\\ \alpha g(x)=0\\ \alpha \geq 0\\ g(x)\le0\\ h(x)=0 \end{cases} \tag{8} ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧Lx=0Lα=0Lβ=0αg(x)=0α≥0g(x)≤0h(x)=0(8)求解该方程组得到可行解 ∗ x *x ∗x,将 ∗ x *x ∗x代入到目标函数 f ( x ) f(x) f(x)中去即可。
过程总结:
(1)求解过程中(8)式的后面4个条件就是KKT条件。
(2)在求解过程中分析不等式条件时,可以知道KKT条件就是让不等式约束条件求极值问题转化为等式约束条件求极值问题,然后用拉格朗日乘子法进行解决。
(3)由求解过程可知,满足KKT条件时原始问题与其对偶问题具有相同的最优解。
全文总结: KKT条件有将不等式约束条件求极值问题转化为等式条件求极值问题的作用,拉格朗日乘子法是将等式约束条件求极值问题转化为无约束条件求极值问题。所以追根究底是解无约束条件求极值问题。
(三)拉格朗日乘子法的应用
求极值问题在数学的角度上看一般有3种情况:
1.无约束条件求极值问题
这类比较简单,在满足函数可导的情况下对变量进行求导,令导函数为0,求解该方程,若有解再将该值代入目标函数中并判断是否是极值。
2.等式约束条件求极值问题
例:在条件
ϕ
(
x
,
y
)
=
0
\phi(x,y)=0
ϕ(x,y)=0下求函数
z
=
f
(
x
,
y
)
z=f(x,y)
z=f(x,y)的极值。
一般解法:
将方程
ϕ
(
x
,
y
)
=
0
\phi(x,y)=0
ϕ(x,y)=0用一个变量表示另一个变量,将被表示的变量带入到目标函数z中消除掉一个变量,同时也消除了约束条件,也就转换成了无约束条件求极值问题。
若目标函数的自变量比较多或者约束条件比较多,那么运用一般解法去解将会费时费力。
拉格朗日乘子法:
设辅助函数
F
=
f
(
x
,
y
)
+
λ
ϕ
(
x
,
y
)
F=f(x,y)+\lambda\phi(x,y)
F=f(x,y)+λϕ(x,y)(这时只需求辅助函数为极值时的x,y,
λ
\lambda
λ的取值,即转化为无条件极值问题)
可得以下方程组:
{
F
x
=
f
x
+
λ
ϕ
x
=
0
F
y
=
f
y
+
λ
ϕ
y
=
0
F
λ
=
ϕ
(
x
,
y
)
=
0
\begin{cases} F_x=f_x+\lambda\phi_x=0\\ F_y=f_y+\lambda\phi_y=0\\ F_\lambda=\phi(x,y)=0\\ \end{cases}
⎩⎪⎨⎪⎧Fx=fx+λϕx=0Fy=fy+λϕy=0Fλ=ϕ(x,y)=0
求解该方程组即可得到x,y,
λ
\lambda
λ的值,再将得到的x,y值代入到目标函数
z
中
z中
z中即可解决。
3.不等式约束条件求极值问题
这个问题将在后面的机器学习SVM算法(支持向量机)中应用。