Leo Zhang

A simple man with my own ideal

Gradient And Karush-Kuhn-Tucker Conditions

      最近开始面试,复习当中发现自己有很多基础的东西有些模糊,借此温故而知新一下,并提醒自己基础很重要,踏踏实实、戒骄戒躁。

一、梯度是什么?

1、一个小例子

      假设有单变量实值函数y=f(x),其图形如下:

 

image      实值函数y=f(x)在点x_0的导数f'(x)的意义是该函数在x=x_0 处的瞬时变化率,即:

   f'(x_0)=\lim_{\Delta x->0}\frac{f(x_0+\Delta x)-f(x_0)}{\Delta x}

在自变量x发生微小变化时,目标函数值的变化可以这么描述:

  dy=f'(x)dx

针对上图有以下三种情况:

(1)、x_1点位置,此时f'(x_1)>0,在x_1 点做微小正向变化:dx>0,显然有dy>0,这说明在x_1点往x轴正向有可以使目标函数y=f(x)值增大点存在;

(2)、x_2点位置,此时f'(x_2)<0,在x_2 点做微小负向变化:dx<0,显然有dy>0,这说明在x_2点往x轴负向有可以使目标函数y=f(x)值增大点存在;

(3)、x_0点位置,此时f'(x_0)=0,不管在x_0 点做微小负向变化还是正向变化都有dy=0,这说明在x_0点是一个最优解。

实际上,在一维情况下目标函数的梯度就是f'(x),它表明了目标函数值变化方向。

2、梯度与方向导数

(1)、方向导数

      以二元函数:y=f(x_0,x_1)为例,设它在点p(x_0,x_1)的某个邻域U(p)内有定义,以点p(x_0,x_1)出发引射线lp'(x_0+\Delta x_0,x_1+\Delta x_1)l上的且在邻域U(p)内的任意点,则方向导数的定义为:

                                                     \frac{\partial f}{\partial l} = \lim_{\rho->0^+} {\frac{f(x_0+\Delta x_0,x_1+\Delta x_1)-f(x_0,x_1)}{\rho}}   其中\rho表示pp'两点之间的欧氏距离:\rho = \sqrt{(\Delta x_0)^2 + (\Delta x_1)^2}

从这个式子可以看到:方向导数与某个方向l有联系、方向导数是个极限值、方向导数与偏导数似乎有联系。

实际上,如果y=f(x_0,x_1)在点p(x_0,x_1)可微,则:

                                                    \frac{\partial f}{\partial l} = \frac{\partial f}{\partial x_0} \cos\alpha +\frac{\partial f}{\partial x_1} \cos\beta   其中\alpha\beta分别是两个维度上的方向角

这里需要注意的一个细节是:沿某个维度的方向导数存在时,其偏导数不一定存在,原因就是方向导数只要求半边极限存在(\rho->{0^+}),而偏导数则要求双边都存在。

(2)、梯度

      把方向导数变换一下形式:

                                                   \frac{\partial f}{\partial l} = \frac{\partial f}{\partial x_0} \cos\alpha +\frac{\partial f}{\partial x_1} \cos\beta

                                                        =(\frac{\partial f}{\partial x_0}\quad \quad \quad ,\quad \quad \quad  \frac{\partial f  }{\partial x_1}) \cdot (\cos\alpha \quad \quad \quad ,\quad \quad \quad \cos\beta)

函数y=f(x_0,x_1)在点p(x_0,x_1)的梯度就被定义为向量

                                                   gradf(x_0,x_1)=\frac{\partial f}{\partial x_0}i + \frac{\partial f  }{\partial x_1}j

与射线l同方向的单位向量被定义为:

                                                   e=\cos \alpha \quad \quad \quad i+ \cos \beta\quad \quad \quad j

于是方向导数变成了:

                                                  \frac{\partial f}{\partial l} = gradf(x_0,x_1)\cdot e

                                                       =|gradf(x_0,x_1)|\cdot \cos(gradf(x_0,x_1)\^ e)

      我的理解是:方向导数描述了由各个维度方向形成的合力方向上函数变化的程度,当这个合力方向与梯度向量的方向相同时,函数变化的最剧烈,我想这就是为什么在梯度上升算法或者梯度下降算法中选择梯度方向或者负梯度方向的原因吧。换句话说就是:函数在某点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值

 

image

  某个函数和它的等高线,图中标出了a点的梯度上升方向

 

3、多维无约束问题

      将开篇的那个小例子扩展到多维的情况,目标函数值将会成为一个向量,向任意个维度方向做微小变动都将对目标函数值产生影响,假设有n个维度,可以用下面的式子描述:

                                                dy=(dy_0,....,dy_n)=grad f\cdot (dx_0,...,dx_n)^T=gradf\cdot dx

                                                                          =|grad f|\cdot |dx|\cdot \cos(grad f \^ dx)

\alpha = grad f \^ dx

(1)、当0\leq \alpha<\frac{\pi}{2},此时dy>0,因此可以从点x移动使得目标函数值增加;

(2)、当\frac{\pi}{2}< \alpha\leq \pi,此时dy<0,因此可以从点x移动使得目标函数值减少;

(3)、当 \alpha=\frac{\pi}{2},梯度向量和dx正交(任一向量为0也视为正交),不管从点x怎样移动都找不到使目标函数值发生变化的点,于是x点就是目标函数的最优解。

      由于dx可以是任意方向向量,只要点x的梯度向量不为零,从点x出发总可以找到一个变化方向使得目标函数值向我们希望的方向变化(比如就找梯度方向,此时能引起目标函数值最剧烈地变化),理论上当最优解x^*出现时就一定有gradf (x^*)=0(实际上允许以某个误差\eps结束),比如,对于梯度下降算法,当gradf (x^*)=0时迭代结束,此时的x^*为最优解(可能是全局最优解也可能是局部最优解):

                                               x_{n+1}=x_n - \alpha \cdot gradf(x_n)

 

二、拉格朗日乘数法和KKT条件

      从现在开始,我假设目标函数和约束在某点可微,用符号\nabla f代替符号grad f

1、等式约束

                                           \begin{eqnarray*} 
 &&\min f(x) \\ 
&&s.t. \quad\quad\quad\quad\quad\quad h(x)=0, \quad 
\end{eqnarray*}

 

image      在约束条件的作用下,与点x(它是个向量)可移动方向相关的向量dx就不像无约束问题那样随便往哪个方向都能移动了,此时dx只能沿着约束曲线移动,例如,在x1x2处,\nabla f(x)dx不正交,说明还有使目标函数值更小的等高线存在,所以点x还有移动的余地,当移动到x0位置时\nabla f(x)dx正交,得到最优解x0。那么在最优解处\nabla f(x)和约束有什么关系呢?因为此时h(x)=0\nabla h(x) \cdot dx=0,显然此时有\lambda \cdot \nabla h(x)=\nabla f(x)(其中\lambda是常数),也就是说约束的梯度向量与目标函数的梯度向量在最优解处一定平行

      想到求解此类优化问题时最常用的方法——拉格朗日乘数法,先要构造拉格朗日函数:

                                            L(x,\lambda) = f(x) - \lambda h(x)  其中\lambda \geq0,是常数

为什么求解拉格朗日函数得到的最优解就是原问题的最优解呢?

                                            \frac{\part L(x,\lambda)}{\part x}=\nabla f(x)-\lambda \nabla h(x)

                                            \frac{\part L(x,\lambda)}{\part \lambda}= h(x)

假设x^*\lambda^*L(x,\lambda)的最优解,那么就需要满足:

                                             \begin{eqnarray*}

   \\ \nabla f(x^*)-\lambda^* \nabla h(x^*)&=& 0\\
  \\    h(x^*)&=&0\\
  \end{eqnarray*}

第一个式子印证了约束的梯度向量与目标函数的梯度向量在最优解处一定平行,第二个式子就是等式约束本身。

于是:

                                             \begin{eqnarray*}
&&L(x,\lambda) &\geq &L(x^*,\lambda^*)\\
\Rightarrow&& f(x)-\lambda h(x) &\geq &f(x^*)-\lambda^* h(x^*) \\
\Rightarrow &&f(x) &\geq & f(x^*)
\end{eqnarray*}

 

2、不等式约束

      实际情况中,约束条件可能是等式约束也可能是不等式约束或者同时包含这两种约束,下面描述为更一般地情况:

                                           \begin{eqnarray*}
& \min &f(x)\\
& s.t.& h_i(x)=0 \quad (i=0 ... n)\\
&&g_j(x) \leq 0 \quad (j=0...m)
\end{eqnarray*}

依然使用拉格朗日乘数法,构造拉格朗日函数:

                                          L(x,\alpha ,\beta) = f(x) + \sum\limit_{i=0}^n \alpha_i \cdot h_i(x) + \sum\limit_{j=0}^m \beta_j\cdot g_j(x)     其中\alpha_i \geq 0\beta_j \geq 0

在这里不得不说一下Fritz John 定理了,整个证明就不写了(用局部极小必要条件定理、Gordan 引理可以证明)。

定理1:

依然假设x^*为上述问题的极小值点,问题中涉及到的各个函数一阶偏导都存在,则存在不全为零的\lambda _i使得下组条件成立:

                                           \lambda_0 \nabla f(x^*) + \sum\limit_{i=0}^n \lambda_i \cdot \nabla h_i(x^*) + \sum\limit_{j=0}^m \lambda_j\cdot \nabla g_j(x^*)=0

                                          \lambda_j \cdot g_j(x^*) = 0  ,j=0,...m

                                          \lambda_j \geq 0,j=0,...m

      这个定理第一项的形式类似于条件极值必要条件的形式,如果\lambda_0=0则有效约束 \nabla g_j(x)会出现正线性相关,由Gordan 引理知道此时将存在可行方向,就是x^*将不是原问题的极值点,因此令 \nabla g_j(x)则线性无关则\lambda_0>0

      \lambda_j \cdot g_j(x^*) = 0  ,j=1,...m这个条件又叫互不松弛条件(Complementary Slackness),SVM里的支持向量就是从这个条件得来的。

      由Fritz John 定理可知 \nabla g_j(x)线性无关则\lambda_0>0 ,让每一个拉格朗日乘子除以\lambda_0,即\mu_i=\lambda_i/\lambda_0,得到下面这组原问题在点x^*处取得极小值一阶必要条件

定理2:

假设x^*为上述问题的极小值点,问题中涉及到的各个函数一阶偏导都存在,有效约束 \nabla g_j(x)线性无关,则下组条件成立:

                                           \frac{\part L(x,\mu_i,\mu_j)}{\par tx} =\nabla f(x^*) + \sum\limit_{i=0}^n \mu^*_i \cdot \nabla h_i(x^*) + \sum\limit_{j=0}^m \mu^*_j\cdot \nabla g_j(x^*)=0

                                          \mu_j^* \cdot g_j(x^*) = 0  ,j=0,...m

                                          \mu^*_j \geq 0,j=0,...m

                                          h_i(x^*)=0,i=0,..,n

                                          g_j(x^*) \leq 0,j=0,...m

这组条件就是Karush-Kuhn-Tucker条件,满足KKT条件的点就是KKT点,需要注意的是KKT条件是必要条件(当然在某些情况下会升级为充要条件,比如凸优化问题)。

      由此也可以想到求解SVM最大分类间隔器时,不管是解决原问题还是解决对偶问题,不管是用SMO方法或其它方法,优化的过程就是找到并优化违反KKT条件的最合适的乘子。

      KKT条件与对偶理论有密切的关系,依然是解决下面这个问题:

                                        \begin{eqnarray*}
& \min &f(x)\\
& s.t.& h_i(x)=0 \quad (i=0 ... n)\\
&&g_j(x) \leq 0 \quad (j=0...m)
\end{eqnarray*}

构造拉格朗日函数:

                                          L(x,\alpha ,\beta) = f(x) + \sum\limit_{i=0}^n \alpha_i \cdot h_i(x) + \sum\limit_{j=0}^m \beta_j\cdot g_j(x)     其中\alpha_i \geq 0\beta_j \geq 0,它们都是拉格朗日乘子

O_p(x)=\max\limit_{\alpha ,\beta} L(x,\alpha,\beta),原问题可以表示为下面这个形式:

                                          O_p(x)= 
 \left\{

   \begin{array}{c}

   &f(x)& if \quad x \quad satisfies \quad primal \quad constraints&\\

  & \infty& otherwise.&\\

   \end{array}

  \right.

这个式子比较容易理解,当x违反原问题约束条件时有:

                                           O_p(x)=\max\limit_{\alpha ,\beta} L(x,\alpha ,\beta) = \max\limit_{\alpha, \beta} f(x) + \sum\limit_{i=0}^n \alpha_i \cdot h_i(x) + \sum\limit_{j=0}^m \beta_j\cdot g_j(x)=\infty

于是原问题等价为下面这个问题:

                                          \min\limit_x O_p(x)=\min\limit_x \max\limit_{\alpha ,\beta} L(x,\alpha,\beta)       它的最优解记为p^*

 

O_d(\alpha,\beta)=\min\limit_{x} L(x,\alpha,\beta),则有以下形式:

                                          \max\limit_{\alpha,\beta} O_d(\alpha,\beta)=\max\limit_{\alpha,\beta} \min\limit_{x} L(x,\alpha,\beta)   它的最优解记为d^*

     

      上面这两个形式很像,区别只在于minmax的顺序,实际上O_p(x)O_d(\alpha,\beta)互为对偶问题。因为\max\min \leq \min \max ,打个不太恰当的比喻,这就像瘦死的骆驼比马大,具体的证明就不写了,所以d^* \leq p*,这个就是弱对偶性,此时存在对偶间隙,它被定义为:gap=p^*-d^*

      有弱对偶性就有强对偶性,它指的是在某些条件下有d^* = p*,比如在以下条件下满足强对偶性:

目标函数和所有不等式约束函数是凸函数,等式约束函数是仿射函数(形如y=w^tx+b),且所有不等式约束都是严格的约束(大于或小于)

KKT条件和强对偶性的关系是:

      KKT条件是强对偶性成立的必要条件,特别的,当原问题是凸优化问题时,KKT条件就是充要条件,强对偶性存在时KKT点既是原问题的解也是对偶问题的解,这个时候对偶间隙为0。

      关于对偶问题可以参考pluskid写得非常好的一篇文章:http://blog.pluskid.org/?p=702

 

三、总结

      梯度是一个基础而重要的概念,函数在某点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值,梯度下降算法正是依据这一原理,还有在求解极大似然问题时也可以用梯度上升的算法进行参数估计;对于约束最优化问题可以使用拉格朗日乘数法解决——如:构造拉格朗日函数,求出KKT条件;当原问题不太好解决的时候可以利用拉格朗日乘数法得到其对偶问题,满足强对偶性条件时它们的解会是一致的,SVM问题的解决把这一点用的淋漓尽致,同时也为我们提供了一种判断算法收敛情况的方法——监视可行间隙。

 

四、参考资料

1、Stephen Boyd and Lieven Vandenberghe. 《Convex Optimization》

2、Jorge Nocedal and Stephen J. Wright.《Numerical Optimization》second Edition

3、Andrew Ng.http://v.163.com/special/opencourse/machinelearning.html

4、pluskid. http://blog.pluskid.org/

posted on 2011-12-29 14:23  Leo Zhang  阅读(6531)  评论(7编辑  收藏  举报

导航