真正理解拉格朗日乘子法和 KKT 条件

    这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容。
    首先从无约束的优化问题讲起,通常就是要使一个表达式取到最小值:
\[min \quad f(x)\]
    若是问题是 \(max \quad f(x)\) 也能够经过取反转化为求最小值 \(min \quad-f(x)\),这个是一个习惯。对于这类问题在高中就学过怎么作。只要对它的每个变量求导,而后让偏导为零,解方程组就好了。
html


二维线性可分示例图

极值点示意图

    因此在极值点处必定知足 \(\frac {df(x)}{dx}=0\)(只是必要条件,好比 \(f(x)=x^3\)\(x=0\) 处就不是极值点),而后对它进行求解,再代入验证是否真的是极值点就好了。对于有些问题能够直接经过这种方法求出解析解(如最小二乘法)。
    可是也有不少问题解不出来或者很难解,因此就须要梯度降低法、牛顿法、坐标降低法之类的数值迭代算法了(感知机 、logistic 回归中用到)。
    对于这些迭代算法就像下面这张图同样,咱们但愿找到其中的最小值。一个比较直观的想法是先找一个起点,而后不断向最低点靠近。就先把一个小球放到一个碗里同样。

迭代算法

迭代算法

    一开始要找一个起始点,而后肯定走的方向和距离,最后还要知道何时中止。这三步中最难的应该是肯定走的方向。走的慢点还能够接受,要是方向错了就找不到最小值了~。因此走的距离能够简单的设为一个比较小的值。起始点能够随机选一个 \((x_0,y_0)\)。关键是方向,能够选择 \((x_0,y_0)\) 处的梯度的反方向,这是函数在这个点降低最快的方向(缘由能够看 知乎中忆臻的回答)。它是一个向量,而后它的大小就是走的距离,为了防止太大而走过头,致使不断在最小值附近震荡,须要乘上一个比较小的值(称为学习率),最终的中止条件就是梯度的大小很接近于 0(在极值点处的梯度大小就是 0)就好了。这种方法依靠梯度肯定降低方向的方法叫作梯度降低法。
\(f(x)\) 求极小值的流程就是:

  1. 随机选定 \(x_0\)
  2. 获得函数在 \(x_0\) 的梯度,而后从 \(x_0\) 向前走一步。计算式是:\(x_0^{new}=x_0^{old} - \alpha\nabla f(x)\)
  3. 重复第 2 步,直到梯度接近于 0(小于一个事先设定的很小的数),或者到达指定的迭代上限。
梯度降低法
梯度降低法

    除了这种方法以外,其中第 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\) 的。由于这个问题的解可能根本不是 \(min \quad f(x)\) 的解,它们是没有关系的。那么仍是要从问题自己去找线索:

带约束的极值

带约束的极值

    如图,其中的圆圈是指目标函数 \(f(x,y)\) 投影在平面上的等值线,表示在同一个圆圈上,黑线是约束条件 \(h(x)=0\) 的函数图像。因此等值线与函数图像相交的点其实就是全部知足约束的点。那么极值点只有可能在等值线与函数图像相切的地方取到,由于若是在相交的地方取到,那么沿着 \(h(x)\) 的图像往前走或者日后走,必定还有其它的等值线与它相交,也就是 \(f(x,y)\) 的值还能变大和变小,因此交点不是极值点,只有相切的时候才有多是极值点(不可能同时变大和变小了)。在相切的地方 \(h(x)\) 的梯度和 \(f(x,y)\) 的梯度应该是在同一条直线上的。(这一点能够这么想,在切点处两个函数的梯度都与切平面垂直,因此在一条直线上)
    因此知足条件的极值点必定知足: \(\nabla f(x,y)=\lambda \nabla h(x,y)\) ( \(\lambda = 0\) 是容许的,表示 f(x,y) 自己的极值点恰好在切点上),而后和原来的等式方程 \(h(x,y)=0\) 联立,而后只要解出这个方程组,就能够获得问题的解析解了。固然也存在解不出来的状况,就须要用罚函数法之类的方法求数值解了。
    为了方便和好记,就把原来的优化问题写成 \(f(x,y) + \lambda h(x,y)\) 的形式,而后分别对 \(\lambda,x,y\) 求偏导,而且令偏导为 \(0\) 就好了,和以前获得的方程组是同样的。这种方法叫拉格朗日乘数法。
    若是有多个等式约束怎么办呢,以下图:

多个约束的极值

多个约束的极值

    这里的平面和球面分别表明了两个约束 \(h_1(x)\)\(h_2(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\)\(\lambda\) 求偏导,而后让它们为 0。结果像上面同样直接列方程组是同样的。这个能够看作是一种简记,或者是对偶问题,这个函数叫作拉格朗日函数。
    再进一步,若是问题中既有等式约束,又有不等式约束怎么办呢?对于:
\[\begin{align*} min \quad f(x)\\ & s.t. \quad h(x) = 0\\ &\quad \quad \quad g(x) \leq 0 \end{align*}\]
    固然也一样约定不等式是 \(\leq\),若是是 \(\geq\) 只要取反就好了。对于这个问题先不看等式约束,对于不等式约束和目标函数的图:

不等式约束

不等式约束

    阴影部分就是可行域,也就是说可行域从原来的一条线变成了一块区域。那么能取到极值点的地方可能有两种状况:

  1. 仍是在 \(h(x)\) 和 等值线相切的地方
  2. \(f(x)\) 的极值点自己就在可行域里面。

    由于若是不是相切,那么一样的,对任意一个在可行域中的点,若是在它附近往里走或者往外走,\(f(x)\) 通常都会变大或者变小,因此绝大部分点都不会是极值点。除非这个点恰好在交界处,且和等值线相切;或者这个点在可行域内部,可是自己就是 \(f(x)\) 的极值点。以下图(维基百科上的图~):
函数


不等式约束下的极值

不等式约束下的极值

    对于第一种状况,不等式约束就变成等式约束了,对 \(f(x) + \lambda h(x) + \mu g(x)\) 用拉格朗日乘子法:
\[\nabla f(x)+\lambda \nabla h(x)+\mu \nabla g(x) = 0\\ h(x)=0\\ g(x)=0\\ \mu \geq 0\]
    这里须要解释一下,为何不是 \(\mu \neq0\) 而是 \(\mu \geq 0\)。后面的约束比前面的更强。看“不等式约束”那个图,咱们已经知道了问题中的可行域是在 \(g(x)\leq0\) 一侧,而 \(g(x)\) 的梯度是指向大于 0 的一侧,也就是否是可行域的一侧。而求的问题是极小值,因此 \(f(x)\) 在交点处的梯度是指向可行域的一侧,也就是说两个梯度必定是相反的。因此也就能够肯定这里的系数必定是大于 0 的。而等式约束因为不知道 \(h(x)\) 的梯度方向,因此对它没有约束,那么为何 \(\mu\) 还能等于 0 呢,由于极值点可能恰好在 \(g(x)\) 上。
    对于第二种状况,不等式约束就至关于没有,对 $f(x) + \lambda h(x) $ 用拉格朗日乘子法:
\[\nabla f(x)+\lambda \nabla h(x)= 0\\ h(x)=0\\ g(x) \leq 0\]
    最好把两种状况用同一组方程表示出来。对比一下两个问题,不一样的是第一种状况中有 \(\mu \geq 0\)\(g(x)=0\), 第二种状况 \(\mu = 0\)\(g(x) \leq 0\) 。综合两种状况,能够写成 \(\mu g(x) = 0\)\(\mu \geq 0\)\(g(x) \leq 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),就是要求约束条件的质量不能太差,常见的好比:

  1. LCQ:若是 \(h(x)\)\(g(x)\) 都是形如 \(Ax+b\) 的仿射函数,那么极值必定知足 KKT 条件。
  2. LICQ:起做用的 \(g(x)\) 函数(即 \(g(x)\) 至关于等式约束的状况)和 \(h(x)\) 函数在极值点处的梯度要线性无关,那么极值必定知足 KKT 条件。
  3. Slater 条件:若是优化问题是个凸优化问题,且至少存在一个点知足 \(h(x) = 0\)\(g(x) = 0\),极值必定知足 KKT 条件。而且知足强对偶性质(下面会讲)。

     这里的 Slater 条件比较重要,由于它能够推导出强对偶性质(下面会讲到,它比 KKT 条件还好)。它须要原问题是凸优化问题。所谓凸优化就是这个优化问题的优化函数是凸函数,而且可行域是凸集。可行域数凸集就要求其中的 \(h(x)\leq0\) 的条件中 \(h(x)\) 必须也是凸函数,而 \(g(x) \leq0\) 中的 \(g(x)\) 必须是 \(Ax+b\) 形式的,也就是仿射函数(好比二维的状况,可行域就在 \(g(x)\) 这条曲线上,那么 \(g(x)\) 必须得是直线才能知足凸集的定义)。
     其它条件还有不少,能够看维基百科
    若是有多组等式约束 \(h_i(x) =0 \quad (i=1,..,n)\), 和不等式约束 \(g_i(x) \leq0 \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. \]
因此外层选的那个 \(x_{0}\) 必定知足约束,不然,内层的 max 的时候会让 $\mu $ 或者 \(\lambda\) 为无穷大。外层不会选那些能让内层获得无穷大的 \(x\) 值。这样改写就和原来的带约束形式彻底一致了,可是形式不一样。这样能够利用 \(max \quad min f(x) \leq min \quad max(f(x))\) 这个公式(这个很好理解,\(min f(x) \leq min\quad max f(x)\), 而后就有这个公式了),获得原问题的最小值的一个下界,就是:
\[min_{x}max_{\mu,\lambda}f(x) + \lambda h(x) + \mu g(x) \geq max_{\mu,\lambda}min_{x}f(x) + \lambda h(x) + \mu g(x) \]
    前面的就是原函数,后面的是它的一个下界。那么为何要这样作呢? 是由于后面的必定是一个凸规划(理论上证实了的),比较好解决。可是这个只是一个下界,它们之间仍是有必定的差距。这个差距叫对偶偏差(duality gap)。对偶偏差若是为 0 实际上是一个很是好的性质,表示能够直接求解后面的问题获得原问题的解,这种性质叫强对偶性质,不然就只是弱对偶。
    强对偶性质很是好,可是要求也很苛刻,比 KKT 条件要苛刻。若是问题知足强对偶必定也知足 KKT 条件,反之不必定。对于这类优化问题,KKT 条件、强对偶、规范性条件之间的关系是:
学习


RC、KKT 和强对偶的关系

RC、KKT 和强对偶的关系

    对于强对偶推出 KKT 能够参看 这篇博客

    这篇博文到这里就结束了,这些优化方法都是很经典的方法,在 SVM 的推导中也用到了。优化

参考连接:spa

  1. 拉格朗日乘数法
  2. Karush–Kuhn–Tucker conditions
  3. 支持向量机:Duality

如需转载,请注明出处.
出处:http://www.cnblogs.com/xinchen1111/p/8804858.html3d

相关文章
相关标签/搜索