一、等式约束优化问题
拉格朗日乘数法(Lagrange multiplier)是一种寻找多元函数在一组约束下的极值的方法。通过引入拉格朗日乘子,可将d个变量和k个约束条件的最优化为题转化成d+k个变量的无约束优化问题求解。
举个2维的例子来说明:
假设有自变量x和y,给定约束条件g(x,y)=c,要求f(x,y)在约束g下的极值。
我们看到隐函数f(x,y)可以描述为一个二维平面(即图中的一座山),我们可以画出它的等高线,如下图。此时,约束g(x,y)=c由于只有一个自由度,因此是图中的一条曲线(红色曲线所示),这条曲线是在x0y平面上的,由于没有z坐标,所以它可以在任何一个等高线平面,如图中在等高线平面3的L1,在等高线平面4的L2(L1,L2都是曲线g(x,y)=c)。我们的任务就是求f(x,y)在满足g(x,y)=c条件下的最小值,很明显就是找到与曲线L相切的最低的等高线平面。在最小值处,约束曲线不可能和等高线相交,一定是相切。比如我们看到L2是跟平面4是相交的,显然它比平面3要高。
之后,我们根据以下两条性质:
1. 对于约束曲面(在这里由于维度过低,是约束曲线)上的任意点x,该点的梯度正交于约束曲面或者约束曲线。
2.在最优点x*,目标函数在该点的梯度正交于约束曲面。
上面的描述源自周志华《机器学习》,其实就是因为g(x,y)=c的法向量是垂直于切线的,而g(x,y)=c的法向量又等于g(x,y)的梯度(对应第一条),f(x,y)的的梯度是垂直于等高线切线的(对应第2条)。所以在他们俩相切的地方,f(x,y)的梯度和g(x,y)的梯度方向必然相同或者相反(注:如果这段话你不太清楚,可以了解一下: 直观理解偏导数、方向导数和法向量和梯度)
所以存在使得:
注:这里的x是多维向量,在二维情况下等价于上面的f(x,y)。
经过上面的分析,我们知道最优点x*必然满足以下两条方程
进而我们可以定义拉格朗日函数:
这时候我们只要令函数L的导数为零(包括对x的偏导数和对的偏导数都为零),既可以求出让f(x)最小的x(同时满足g(x)=0),其实零两个偏导数为零就等价于上面我们提到的两条方程。
至此,我们就把原优化问题转换成了对拉格朗日函数的无约束优化问题。
二、不等式约束优化问题
上面我们讨论的都是等式约束下的拉格朗日乘子法,那如果约束不是等式,而是不等式呢?这是我们可以照常地使用朗格朗日函数,但是需要附加一些约束条件(称为KKT条件,karush-Kuhn-Tucker条件)。转换后地优化问题如下所示:
这里有伙伴可能疑惑这个KKT条件是怎么来的,具体过程参见浅谈KKT条件。总的来讲,它是加入松弛变量把不等式约束变成了等式约束(这里面导出了KKT条件)。由于现在变成了等式约束,所以可以直接写出拉格朗日函数,通过对拉格朗日求导求得最优点。
三、参考资料
【1】周志华《机器学习》