这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容。
首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值:
$$ min \quad f(x) $$
如果问题是$max \quad f(x)$ 也可以通过取反转化为求最小值 $min \quad-f(x)$,这个是一个习惯。对于这类问题在高中就学过怎么做。只要对它的每一个变量求导,然后让偏导为零,解方程组就行了。
所以在极值点处一定满足 $\frac {df(x)}{dx}=0$(只是必要条件,比如 $f(x)=x^3$ 在$ x=0$ 处就不是极值点),然后对它进行求解,再代入验证是否真的是极值点就行了。对于有些问题可以直接通过这种方法求出解析解(如最小二乘法)。
但是也有很多问题解不出来或者很难解,所以就需要梯度下降法、牛顿法、坐标下降法之类的数值迭代算法了(感知机 、logistic 回归中用到)。
对于这些迭代算法就像下面这张图一样,我们希望找到其中的最小值。一个比较直观的想法是先找一个起点,然后不断向最低点靠近。就先把一个小球放到一个碗里一样。
一开始要找一个起始点,然后确定走的方向和距离,最后还要知道什么时候停止。这三步中最难的应该是确定走的方向。走的慢点还可以接受,要是方向错了就找不到最小值了~。所以走的距离可以简单的设为一个比较小的值。起始点可以随机选一个 $(x_0,y_0)$。关键是方向,可以选择 $(x_0,y_0)$ 处的梯度的反方向,这是函数在这个点下降最快的方向(原因可以看知乎中忆臻的回答)。它是一个向量,然后它的大小就是走的距离,为了防止太大而走过头,导致不断在最小值附近震荡,需要乘上一个比较小的值(称为学习率),最终的停止条件就是梯度的大小很接近于 0(在极值点处的梯度大小就是 0)就行了。这种方法依靠梯度确定下降方向的方法叫做梯度下降法。
对$ f(x)$求极小值的流程就是:
除了这种方法之外,其中第 2 步还可以这样做,固定$ x$, 把它作为常数。就变成只有一个变量的优化问题了,直接求导为 0 就可以得到最优点,向前走到 $(x_0, y_1)$处,然后固定 $y_1$, 对 $ x$ 进行相同的操作。这种每次只优化一个变量的方法叫做坐标下降法。
$$ \begin{align*} min \quad f(x)\\ & s.t. \quad h(x) = 0 \end{align*} $$
解决这个的时候问题不能先用上面的方法求出 $f(x)$的极值点,然后留下满足方程 $h(x)=0$ 的。因为这个问题的解可能根本不是 $minf(x)$ 的解,它们是没有关系的。那么还是要从问题本身去找线索:
$$ \nabla f(x) = \lambda \sum_{i=1}^{2}\mu_{i}\nabla h_i(x)=\sum_{i=1}^{2}\lambda_{i}\nabla h_i(x)\\ h_1(x)=0\\ h_2(x)=0 $$
大于2个约束的情况也一样。为了好记,将原来的约束的问题写成 $L(x,\lambda)=f(x)+\sum_{i-1}^{n}\lambda_{i}\nabla h_{i}(x)$的形式,然后对 $x$、$λ$ 求偏导,然后让它们为$ 0$。结果像上面一样直接列方程组是一样的。这个可以看做是一种简记,或者是对偶问题,这个函数叫做拉格朗日函数。
再进一步,如果问题中既有等式约束,又有不等式约束怎么办呢?对于:
$$ \begin{align*} min \quad f(x)\\ & s.t. \quad h(x) = 0\\ &\quad \quad \quad g(x) \leq 0 \end{align*} $$
当然也同样约定不等式是 $≤$,如果是 $≥ $只要取反就行了。对于这个问题先不看等式约束,对于不等式约束和目标函数的图:
$$ \nabla f(x)+\lambda \nabla h(x)+\mu \nabla g(x) = 0\\ h(x)=0\\ g(x)=0\\ \mu \geq 0 $$
这里需要解释一下,为什么不是 $μ≠0$ 而是 $μ≥0$。后面的约束比前面的更强。看“不等式约束”那个图,我们已经知道了问题中的可行域是在$ g(x)≤0$ 一侧,而$ g(x)$ 的梯度是指向大于 $0 $的一侧,也就是不是可行域的一侧。而求的问题是极小值,所以$f(x) $在交点处的梯度是指向可行域的一侧,也就是说两个梯度一定是相反的。所以也就可以确定这里的系数一定是大于$ 0$ 的。而等式约束由于不知道 $h(x) $的梯度方向,所以对它没有约束,那么为什么 $μ$ 还能等于$ 0$ 呢,因为极值点可能刚好在 $g(x)$ 上。
对于第二种情况,不等式约束就相当于没有,对$f(x) + \lambda h(x)$ 用拉格朗日乘子法:
$$ \nabla f(x)+\lambda \nabla h(x)= 0\\ h(x)=0\\ g(x) \leq 0 $$
最好把两种情况用同一组方程表示出来。对比一下两个问题,不同的是第一种情况中有 $μ≥0$ 且 $g(x)=0$, 第二种情况$ μ=0$ 且 $g(x)≤0$ 。综合两种情况,可以写成 $μg(x)=0$ 且$ μ≥0$ 且 $g(x)≤0$:
$$ \nabla f(x)+\lambda \nabla h(x)+\mu \nabla g(x) = 0\\ \mu g(x) = 0\\ \mu \geq 0 \\ h(x)=0\\ g(x) \leq 0 $$
这个就是 KKT 条件。它的含义是这个优化问题的极值点一定满足这组方程组。(不是极值点也可能会满足,但是不会存在某个极值点不满足的情况)它也是原来的优化问题取得极值的必要条件,解出来了极值点之后还是要代入验证的。但是因为约束比较多,情况比较复杂,KKT 条件并不是对于任何情况都是满足的。要满足 KKT 条件需要有一些规范性条件(Regularity conditions),就是要求约束条件的质量不能太差,常见的比如:
如果有多组等式约束 $g_i(x) =0 \quad (i=1,..,n)$, 和不等式约束 $h_i(x) \neq0 \quad (i=1,..,n)$也是一样,只要做个线性组合就行了:
$$ \nabla f(x)+\sum_{i=1}^{n}\lambda_i \nabla h_i(x)+\sum_{i=1}^{n}\mu_i \nabla g_i(x) = 0\\ \mu_i g(x)_i = 0\\ \mu_i \geq 0\\ h_i(x)=0\\ g_i(x) \leq 0\\ i = 1,2,...,n $$
问题到这里就大致解决了,KKT 条件虽然从理论上给出了极值的必要条件,但是一般实际解的时候直接方程也是很困难的(特别是约束很多的时候),一般也会采用罚函数法等数值方法。
为了更好的解决这个优化问题,数学家还找到了它的对偶问题。找一个优化问题的对偶问题的一般因为是对偶问题比原问题更好解决,并且对偶问题的解和原问题是一样的。上面的拉格朗日函数也可以看做原问题的对偶问题。
为了去掉问题中的约束,可以把它们作为惩罚项加到目标函数中 $min_{x}f(x) + M h(x) + N g(x)$其中 $M, N $是两个很大的正数,在数值解法中可以直接这样做,这个就是罚函数法的思路 。不过在理论推导时这样做是不严谨的,除非 $M, N $为无穷大。所以就把原问题改写 $L(x,\mu,\lambda) = min_{x}max_{\mu,\lambda}f(x) + \lambda h(x) + \mu g(x)$。这个式子可以这么理解,现在外层给定任意一个 $x_0$值,然后内层在给定的 $x_0$ 下优化那个函数,让它最小。然后外层选能够让内层得到的值最大的一个 $x_0$,得到的函数表达式就是:
$$ L(x,\mu,\lambda)= \left\{\begin{matrix} f(x) & (x \quad满足约束)\\ \infty & (x \quad不满足约束)\\ \end{matrix}\right. $$
前面的就是原函数,后面的是它的一个下界。那么为什么要这样做呢? 是因为后面的一定是一个凸规划(理论上证明了的),比较好解决。但是这个只是一个下界,它们之间还是有一定的差距。这个差距叫对偶误差(duality gap)。对偶误差如果为 0 其实是一个非常好的性质,表示可以直接求解后面的问题得到原问题的解,这种性质叫强对偶性质,否则就只是弱对偶。
强对偶性质非常好,但是要求也很苛刻,比 KKT 条件要苛刻。如果问题满足强对偶一定也满足 KKT 条件,反之不一定。对于这类优化问题,KKT 条件、强对偶、规范性条件之间的关系是:
摘自:https://www.cnblogs.com/xinchen1111/p/8804858.html