转载自:https://www.cnblogs.com/xinchen1111/p/8804858.html
这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容。 首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值:
所以在极值点处一定满足 df(x)dx=0 d f ( x ) d x = 0 (只是必要条件,比如 f(x)=x3 f ( x ) = x 3 在 x=0 x = 0 处就不是极值点),然后对它进行求解,再代入验证是否真的是极值点就行了。对于有些问题可以直接通过这种方法求出解析解(如最小二乘法)。
但是也有很多问题解不出来或者很难解,所以就需要梯度下降法、牛顿法、坐标下降法之类的数值迭代算法了(感知机 、logistic 回归中用到)。
对于这些迭代算法就像下面这张图一样,我们希望找到其中的最小值。一个比较直观的想法是先找一个起点,然后不断向最低点靠近。就先把一个小球放到一个碗里一样。
一开始要找一个起始点,然后确定走的方向和距离,最后还要知道什么时候停止。这三步中最难的应该是确定走的方向。走的慢点还可以接受,要是方向错了就找不到最小值了~。所以走的距离可以简单的设为一个比较小的值。起始点可以随机选一个 (x0,y0) ( x 0 , y 0 ) 。关键是方向,可以选择 (x0,y0) ( x 0 , y 0 ) 处的梯度的反方向,这是函数在这个点下降最快的方向(原因可以看知乎中忆臻的回答)。它是一个向量,然后它的大小就是走的距离,为了防止太大而走过头,导致不断在最小值附近震荡,需要乘上一个比较小的值(称为学习率),最终的停止条件就是梯度的大小很接近于 0(在极值点处的梯度大小就是 0)就行了。这种方法依靠梯度确定下降方向的方法叫做梯度下降法。
对 f(x) f ( x ) 求极小值的流程就是:
除了这种方法之外,其中第 2 步还可以这样做,固定 x x , 把它作为常数。就变成只有一个变量的优化问题了,直接求导为 0 就可以得到最优点,向前走到 (x0,y1) ( x 0 , y 1 ) 处,然后固定 y1 y 1 , 对 x x 进行相同的操作。这种每次只优化一个变量的方法叫做坐标下降法。
然后就是进一步的,我们可能要在满足一定约束条件的情况下最小化目标函数,比如有一个等式约束:
如图,其中的圆圈是指目标函数 f(x,y) f ( x , y ) 投影在平面上的等值线,表示在同一个圆圈上,黑线是约束条件 h(x)=0 h ( x ) = 0 的函数图像。所以等值线与函数图像相交的点其实就是所有满足约束的点。那么极值点只有可能在等值线与函数图像相切的地方取到,因为如果在相交的地方取到,那么沿着 h(x) h ( x ) 的图像往前走或者往后走,一定还有其它的等值线与它相交,也就是 f(x,y) f ( x , y ) 的值还能变大和变小,所以交点不是极值点,只有相切的时候才有可能是极值点(不可能同时变大和变小了)。在相切的地方 h(x) h ( x ) 的梯度和 f(x,y) f ( x , y ) 的梯度应该是在同一条直线上的。(这一点可以这么想,在切点处两个函数的梯度都与切平面垂直,所以在一条直线上)
所以满足条件的极值点一定满足: ∇f(x,y)=λ∇h(x,y)(λ=0是允许的,表示f(x,y)本身的极值点刚好在切点上) ∇ f ( x , y ) = λ ∇ h ( x , y ) ( λ = 0 是 允 许 的 , 表 示 f ( x , y ) 本 身 的 极 值 点 刚 好 在 切 点 上 ) 然后和原来的等式方程 h(x,y)=0 h ( x , y ) = 0 联立,然后只要解出这个方程组,就可以得到问题的解析解了。当然也存在解不出来的情况,就需要用罚函数法之类的方法求数值解了。
为了方便和好记,就把原来的优化问题写成 f(x,y)+λh(x,y) f ( x , y ) + λ h ( x , y ) 的形式,然后分别对 λ,x,y λ , x , y 求偏导,并且令偏导为 0 就行了,和之前得到的方程组是一样的。这种方法叫拉格朗日乘数法。
如果有多个等式约束怎么办呢,如下图:
这里的平面和球面分别代表了两个约束 h1(x) h 1 ( x ) 和 h2(x) h 2 ( x ) ,那么这个问题的可行域就是它们相交的那个圆。这里蓝色箭头表示平面的梯度,黑色箭头表示球面的梯度,那么相交的圆的梯度就是它们的线性组合(只是直观上的),所以在极值点的地方目标函数的梯度和约束的梯度的线性组合在一条直线上。所以就满足:
再进一步,如果问题中既有等式约束,又有不等式约束怎么办呢?对于:
阴影部分就是可行域,也就是说可行域从原来的一条线变成了一块区域。那么能取到极值点的地方可能有两种情况:
因为如果不是相切,那么同样的,对任意一个在可行域中的点,如果在它附近往里走或者往外走, f(x) f ( x ) 一般都会变大或者变小,所以绝大部分点都不会是极值点。除非这个点刚好在交界处,且和等值线相切;或者这个点在可行域内部,但是本身就是 f(x) f ( x ) 的极值点。如下图(维基百科上的图~):
对于第一种情况,不等式约束就变成等式约束了,对 f(x)+λh(x)+μg(x) f ( x ) + λ h ( x ) + μ g ( x )
用拉格朗日乘子法:
对于第二种情况,不等式约束就相当于没有,对 f(x)+λh(x) f ( x ) + λ h ( x ) 用拉格朗日乘子法:
$$
\begin{equation}
\begin{aligned}
\nabla(x) +\lambda\nabla h(x)+= 0\
h(x) = 0 \
g(x) \le 0\
\end{aligned}
\end{equation}
$$
最好把两种情况用同一组方程表示出来。对比一下两个问题,不同的是第一种情况中有 $\mu \ge 0$且
g(x)=0 g ( x ) = 0 , 第二种情况 μ=0 μ = 0 且 g(x)≤0 g ( x ) ≤ 0 综合两种情况,可以写成 μg(x)=0 μ g ( x ) = 0 且 μ≥0 μ ≥ 0 且 g(x)≤0 g ( x ) ≤ 0
Slater 条件:如果优化问题是个凸优化问题,且至少存在一个点满足 h(x)=0 h ( x ) = 0 和 g(x)=0 g ( x ) = 0 ,极值一定满足 KKT 条件。并且满足强对偶性质。