拉格朗日乘子法
拉格朗日乘子法(Lagrange multipliers)是一种寻找多元函数在一组约束下的极值的方法。通过引入拉格朗日乘子,可将有
d
个变量与
基本的拉格朗日乘子法就是求函数 f(x1,x2,...) 在 g(x1,x2,...)=0 的约束条件下的极值的方法。主要思想是将约束条件与原函数联系在一起,使能配成与变量数量相等的等式方程,从而求得原函数极值的各个变量的解。
例子:假设需要求极值的目标函数为 f(x) ,约束条件为 ϕ(x,y)=M
设 g(x,y)=M−ϕ(x,y) ,定义一个新函数 F(x,y,λ)=f(x,y)+λg(x,y)
求偏导:
求出 x,y,λ 的值,代入即可得到目标函数的极值。
机器学习中的拉格朗日乘子法,一般用于求解约束优化问题的方法,当目标函数是凸函数时,求解最小值,使用拉格朗日乘子法求得的局部最优解就是全局最优解。类似的,在凹函数中,求得的最大值,局部最大解就是全局最大解。
在没有约束条件下,直接使用求导取指即可,但是有了约束条件后,就不能这样任意的小了,需要首先满足约束条件之后再求解。
在二维空间中求解,假设约束条件是一个曲线:
环线是目标函数的取值的等高线,需要紧贴约束线来满足约束条件求得理想值。
图中可以很清晰的看出来,与约束条件相切的等高线正合适。至于其他的与约束条件曲线相切的都不能考虑,因为这种取值一部分是符合约束条件的,一部分不能满足约束条件。
曲线相切,实际上就是法线向量平行,同方向或者反方向。最优解处,f和g的斜率平行。也就是说,存在一个非零实数与其中一个斜率相乘,等于另外一个曲线的斜率。这个实数称之为 λ ,或者 −λ 随便啦
∇[f(x,y)+λ(g(x,y)−c)]=0
一旦求出λ的值,将其套入下式,易求在无约束极值和极值所对应的点。
F(x,y)=f(x,y)+λ(g(x,y)−c)
新方程 F(x,y) 在达到极值时与 f(x,y) 相等,因为 F(x,y) 达到极值时 g(x,y)−c 总等于零。
定义拉格朗日函数:
L(x,λ)=f(x)+λg(x)
将其对
x
的偏导数
KKT
现在考虑不等式
g(x)≤0
,如上图,此时最优点
x
或者在
对于 g(x)<0 的情况,约束 g(x)≤0 不起作用,可以直接通过条件 ∇f(x)=0 来获得最优点,这里等价于将 λ=0 之后求解 ∇xL(x,λ)=0
g(x)=0 的情况类似与上图左侧,但是有一些区别。在拉格朗日乘子中,约束条件 g(x) 与 f(x) 保持梯度平行即可,可就是说参数 λ 无关正负;到了这里,我们好好分析一下,假设两者的梯度是同方向的,都是向外(就是环线区域外,相反方向当然也可以)。我们都知道,函数是按沿着梯度方向增大,所以 f(x) 在区域外的值是大于区域内的值,也就是说,区域内的值是小值。我们的目标就是在约束条件下求 minf(x) ,这里区域内是满足约束条件的,所以最优值显然不在环线上取,而是在区域内取。如果我们非要在环线上取怎么办?两个函数的梯度方向相反。这样才符合我们的认知嘛,梯度相反,同一个方向一个变小一个变大,环线是临界值,很符合人们的罗辑思维。
接着说不等式约束条件,整合上面的两种情况:
- g(x)<0 ,约束条件不起作用,使 λ=0
- g(x)=0 ,约束条件使得 λ>0
所以必有 λg(x)=0
KKT条件推出来了:
推广
推广到多个约束,考虑有m个等式约束和n个不等式约束,优化问题
引入拉格朗日乘子
λ=(λ1,λ2,...,λm)T
和
μ=(μ1,μ2,...,μn)T
,相应的拉格朗日函数为
引入的拉格朗日乘子条件与KKT条件为: