这里简单说一下拉格朗日乘子法的原理和insight.
等式约束
拉格朗日乘子法主要是用于解决有约束的优化问题. 比如最基本的等式约束
maxf(x,y)s.t.,g(x,y)=0
我们想求f(x,y)的最大值,本身这个三维函数是定义在实平面上的, 他有自己的极值和最值. 但是加上了约束之后,我们就不能在整个实平面上找极值最值了, 我们得在g(x,y)=0这条线上找f(x,y)的最值.
一个observation是,如果我们令f(x,y)=d, 我们就能在平面上为不同的d值画出很多等高线, 这时我们再把g(x,y)=0也画上去可以得到下图(基本任何教程都会出现一张经典的图)
![拉格朗日乘子法和KKT条件 拉格朗日乘子法和KKT条件](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzE4NC80ODllZWViMGViZDViYmViNmUxNGU1ZDk1YmU1NTQ3OC5KUEVH)
如果我们要从g(x,y)=0这条线上找极值, 比如说我们找到在点(x0,y0)处找到了极值f(x0,y0)=d1. 这时可以看到, g(x,y)=0这条线是与f(x,y)=d1这个等高线相切的, 这就意味着g(x,y)=0这条线在(x0,y0)处的切线方向与f(x,y)=d1这个等高线在(x0,y0)处的切线方向共线(可能同向也可能反向), 即有:
dxdf(x,y)∣∣∣∣(x0,y0)=λdxdg(x,y)∣∣∣∣(x0,y0)dydf(x,y)∣∣∣∣(x0,y0)=λdydg(x,y)∣∣∣∣(x0,y0)
按照这个性质,我们不妨构造拉格朗日函数L(x,y,λ)=f(x,y)−λg(x,y), 其中λ被称为拉格朗日乘子. 此时, L(x,y,λ)的极值等于f(x,y)在g(x,y)=0限制下的极值, 原问题可转化为以下无约束优化问题
maxL(x,y,λ)=f(x,y)−λg(x,y),λ∈R
一个简单的验证方法是求解这个无约束问题, 为了找极值, 我们会令
dxdL(x,y,λ)=dxdf(x,y)−λdxdg(x,y)=0dydL(x,y,λ)=dydf(x,y)−λdydg(x,y)=0dλdL(x,y,λ)=g(x,y)=0
可以看到,其实求解这个新问题的过程就是在求解旧问题. 这三个方程中前两个其实就是(x0,y0)处切线共线, 最后一个就是原问题的约束.
Remark: 拉格朗日乘子法解出的是极值,并不是最值; 而且我们只知道他是极值,不知道是极大值还是极小值. 因此, 我们还需要带入一些具体的函数值才能确定哪个是最大值还是最小值.
不等式约束
不等式约束的一般情况如下. 遇到不同形式的问题, 我们可以通过加负号把问题转换为以下形式
maxf(x,y)s.t.,g(x,y)≥0
不等式约束和等式约束有啥区别尼?区别在于现在f(x,y)的最值可能取在g(x,y)=0上, 也有可能取在g(x,y)>0内. 我们先来看在g(x,y)=0上的情况.
如果最值取在g(x,y)=0上, 我们直接可以把g(x,y)≥0变为g(x,y)=0, 这样问题就变成了等式约束问题:
maxL(x,y,λ)=f(x,y)−λg(x,y)
![拉格朗日乘子法和KKT条件 拉格朗日乘子法和KKT条件](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzM4OS8yZjBmYjIwMDIzNjA2MGNlM2Q2ZGQ1Njg0NGQyNDQ4NS5KUEVH)
与之前不同的是, 此时我们对λ的取值有些限制. 如上图所示, 假设我们在f(x0,y0)取到最大值; 且g(x,y)=0内部是g(x,y)>0, 外部是g(x,y)<0, 因此g(x,y)在极值点的梯度方向是朝内的(梯度方向是函数值增加最快的方向). 反观f(x,y), 由于f(x0,y0)是最大值点, 因此对于所有g(x,y)>0的区域 (曲线内), f的取值都不可能比f(x0,y0)大, 因此, 比f(x0,y0)大的值只可能在曲线外,因此梯度方向朝外.
综上,在最大值点,原函数的梯度方向和约束函数的梯度方向一定是相反的! 因此
maxL(x,y,λ)=f(x,y)−λg(x,y),λ≤0
或
maxL(x,y,λ)=f(x,y)+λg(x,y),λ≥0
好,现在我们反过来看最大值取在g(x,y)>0内的情况, 此时, 其实g(x,y) 对f(x,y)已经没有限制作用了,因为最大值的临域都是可以取到的.
为了融合两个情况,我们引入松弛互补条件(completeness and slackness condition) λg(x,y)=0. 最终, 原问题转换为
maxL(x,y,λ)=f(x,y)+λg(x,y)s.t.,g(x,y)≥0,λ≥0,λg(x,y)=0
求解这个问题,我们需要
dxdL(x,y,λ)=dxdf(x,y)+λdxdg(x,y)=0dydL(x,y,λ)=dydf(x,y)+λdydg(x,y)=0λg(x,y)=0