深入理解拉格朗日乘子法和KKT条件的原理及运用
深入理解拉格朗日乘子法和KKT条件的原理及运用
一、凸函数
以下讨论均基于凸优化,首先要知道什么是凸函数:
对于任意属于[0,1]的a和任意属于凸集的两点x, y,有f(tx1+(1−t)x2)≤tf(x1)+(1−t)f(x2),几何上的直观理解就是两点连线上某点的函数值,大于等于两点之间某点的函数值。凸函数的任一局部极小点也是全局极小点。
凸集定义:欧式空间中,对于集合中的任意两点的连线,连线上任意一点都在集合中,我们就说这个集合是凸集。
对于一元函数f(x),我们可以通过其二阶导数f′′(x) 的符号来判断。如果函数的二阶导数总是非负,即f′′(x)≥0 ,则f(x)是凸函数。
扩展:对于凸函数,我们可以推广出一个重要的不等式,即Jensen不等式。如果 f 是凸函数,X是随机变量,那么f(E(X))≤E(f(X)),上式就是Jensen不等式的一般形式。
二、常见的三类最优化问题
1.无约束优化问题:
min f(x);
对于无约束的优化问题解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点,最后再将结果带回原函数进行验证。但是如果已经是凸函数,就不需要再验证,可以保证求导函数等于0的点是最优解。
2.有等式约束的优化问题:
min f(x),
s.t hi(x)=0;i=1,…,n
解决这类问题要运用到拉格朗日乘子法构造拉格朗日函数,将在下面详细介绍
3.有不等式约束的优化问题:
min f(x),
s.t gi (x)<=0 (i=1,…,n)
hj(x)=0(j=1,…,m)
解决这类问题要引入KKT条件并构造拉格朗日函数,将在下面详细介绍
三、拉格朗日乘子法解决带等式约束的最优化问题
(一)用实例理解拉格朗日乘子法的背后意义
1.现在假设我们有一个函数
我们要在满足
这个等式约束条件下求极小值。也就是如下式:
2.我们需要先直观的看一下函数f(x,y)以及它的等高线的图像:
3.接下来,我们求出函数f(x,y)的梯度向量:
我们需要知道的是梯度向量与等高线的切线垂直,如下图所示:
4.我们再看一下等式约束条件的等高线:
蓝色即为约束条件g(x,y)==3的线条
5.g(x,y)的梯度向量为:
6.同样的,梯度向量垂直于切线:
7.最后我们需要知道的是只有等高线与约束曲线的相切点才有可能取得极值,看图可能更好理解一些:
现在看如果是等高线与约束曲线的交点B,B这个点就不可能是取得极值的点,这是因为有两个五角星标记的区域的存在。
8.好了,到现在为止我们可以得到一个结论:在可能取极值的点(等高线与约束曲线相切的点)等高线的梯度向量与约束曲线的梯度向量是平行的。如下:
也就是有下面的式子成立:
9.同时,又因为g(x,y)=有很多曲线,我们必须添加上=3这个式子,我们最终就得到了最期望的联立方程:
10.求解:
以上的10步就是拉格朗日乘子法的含义。
(二)、拉格朗日乘子法求解带等式约束的最优化问题
- 构造拉格朗日函数 :
之所以这样构造的原理我们可以继续看上面的例子的第8步,因为有
我们把这个式子的右边移到左边,并把常数移进微分算子,得到:
把这个式子重新解释一下,这个就是函数
无约束情况下极值点的充分条件。通过这个例子我们就能理解拉格朗日函数的由来了。
2.构造出了求无约束条件下的优化问题,就可以分别对参数求偏导,并令其为0,解出在无约束极值和极值所对应的点
另外需要注意的是,以上两个偏导的结果正好分别是
四、引入KKT条件求带不等式约束条件的最优化
对于不等式约束g(x)<=0,和等式约束h(x)=0不一样,h(x)=0可以在平面上画出一条等高线,而g(x)<=0是一个区域,很多个等高线堆叠而成的一块区域,我们把这块区域称为可行域。
不等式约束分两种情况来讨论,第一种是原有函数的(不考虑可行域限制时的)极值点落在可行域内(不包含边界),第二种是原有函数的(不考虑可行域限制时的)极值点落在可行域外(包含边界)。
下面举两个例子来解释这两种情况,然后总结两种情况给出转换求解。
(一)实例理解带不等式约束条件的最优化
在有不等式g(x)<=0的约束下,可行解 x 只能在 g(x)<0 或者 g(x)=0 的区域里取得:
当可行解 x 落在 g(x)<0 的区域内,此时直接极小化 f(x) 即可;
当可行解 x 落在 g(x)=0 即边界上,此时等价于等式约束优化问题.
case1:当约束区域包含目标函数原有的的可行解时,此时加上约束可行解扔落在约束区域内部,对应 g(x)<0 的情况,这时约束条件不起作用;
现在我们假设如下图:
我们很容易知道f(x)的最小值在(0,0),等高线如下图:
接下来我们画上g(x1,x2)限制的可行域(以(0,0)为圆心,半径为1的圆型区域,包括边界):
很明显这个约束并不起作用,函数f(x1,x2)的极值点不变,仍为
这种情况约束不起作用,考虑极小值点x*,这个时候,g(x*) < 0,f(x*)的梯度等于0。
case2:当约束区域不包含目标函数原有的可行解时,此时加上约束后可行解落在边界 g(x)=0 上。
下面我们考虑另外一个不等式约束下的问题:
我们可以看一下这个问题的等高线情况:
以上两种情况就是说,要么可行解落在约束边界上即得 g(x)=0 ,要么可行解落在约束区域内部,此时约束不起作用,令 λ=0 消去约束即可,所以无论哪种情况都会得到λg(x)=0
(也就是KKT条件的其中之一)。
还有一个问题是 λ 的取值,在等式约束优化中,约束函数与目标函数的梯度只要满足平行即可,而在不等式约束中则不然,若 λ≠0,这便说明 可行解 x 是落在约束区域的边界上的,这时可行解应尽量靠近无约束时的解,所以在约束边界上,目标函数的负梯度方向应该远离约束区域朝向无约束时的解,此时正好可得约束函数的梯度方向与目标函数的负梯度方向应相同:
上式需要满足的要求是拉格朗日乘子 λ>0
总结以上两种case,如下:
(二)满足KKT条件下的利用拉格朗日函数求带不等式约束的最优化问题
可见对于不等式约束,只要满足一定的条件,依然可以使用拉格朗日乘子法解决,这里的条件便是 KKT 条件。
对于如下:
那么我们定义的拉格朗日函数又是什么呢,其实很容易想到:
其中,f(x)是目标函数,gj(x)是不等式约束,βi是对应的约束系数(a>=0),hi(x)是第i个等式约束条件,αi是对应的约束系数。这里把目标函数,等式约束,不等式约束融合到了一个式子里,这时候KKT约束就出场了:
满足 KKT 条件后极小化 Lagrangian 即可得到在不等式约束条件下的可行解。 KKT 条件看起来很多,其实很好理解:
(1) :拉格朗日取得可行解的必要条件;
(2) :这就是以上分析的一个比较有意思的约束,称作松弛互补条件;
(3) ∼ (4) :初始的约束条件;
(5) :不等式约束的 Lagrange Multiplier 需满足的条件
(三)原最优化问题转对偶问题
当满足KKT条件时,
此时 f(x)与
是等价的。
因此我们的目标函数可以写为:
如果用对偶表达式:
由于我们的优化是满足强对偶的(满足KKT条件),强对偶就是说对偶式子的最优值是等于原问题的最优值的,所以在取得最优值 x∗ 的条件下,它满足
我们来看看中间两个式子发生了什么事情:
可以看到上式本质上是说
在 x∗ 取得了最小值,对于函数 f(x)+a⋅g(x)+b⋅h(x),求取导数要等于零,即
这就是KKT条件中第一个条件:
所有上述说明,满足强对偶条件的优化问题的最优值都必须满足KKT条件,也就是说当满足KKT条件时原始问题与其对偶问题具有相同的最优解。
参考
https://www.cnblogs.com/always-fight/p/9377554.html
https://www.matongxue.com/madocs/939/
https://www.cnblogs.com/ooon/p/5721119.html
http://www.csc.kth.se/utbildning/kth/kurser/DD3364/Lectures/KKT.pdf
https://blog.****.net/dawnranger/article/details/53133450
https://blog.****.net/qq_40036484/article/details/80457800