支持向量机(二)——数值优化

       在上一篇博客中,较为详细的介绍了在数据完全线性可分的情况下,构建SVM模型的目标,并将构建目标转化为最大化几何距离的优化过程,本篇就将介绍具体优化时的计算过程。还是一样的,先推荐几篇不错的博文,大家也可以参考链接中的文章学习。

  • 关于凸优化问题

        http://www.360doc.com/content/18/0522/09/32196507_756021531.shtml

  • 关于拉格朗日乘子法及对偶优化问题

          https://www.cnblogs.com/xinchen1111/p/8804858.html

          https://www.cnblogs.com/ooon/p/5721119.html

          https://www.cnblogs.com/mashiqi/p/3719101.html

1.凸优化问题

       在一般的优化问题中求最大值或最小值,通常的做法是找出那些梯度为0的点(有的情况下还需要求出边界点的值),然后比较这些点的函数值,最后找出最大值或最小值。这个过程中有两个问题需要注意,一个是当存在多个极值点时,计算量会比较大;另外一个问题就是鞍点(比较常见的是f(x)=x^{3}函数在x=0处)的问题。所以,如果优化问题能够在附加一些限制条件时能到简化,那将非常利于最大值或最小值的求解,凸优化问题正是这样一种简化后的优化问题。

       1.1  凸集

       对于 n 维空间中点的集合C,如果对集合中任意两个点xy,以及实数\theta0\leqslant\theta\leqslant 1,都有

                                                                         \theta x+(1-\theta )y\in C

则集合C称为凸集,在二维空间中,可以用一张简单的图来描述一下凸集和非凸集的区别

                                             

 

       在一些特定的情况下,我们来考虑一下凸集 

  • n 维实向量空间中,xy\in R^{n},对任意实数\theta0\leqslant\theta\leqslant 1,显然有

                                                                    \theta x+(1-\theta )y\in R^{n}

        这一结论表明,如果一个优化问题不带约束,那么该优化问题的变量可行域是凸集。

  • n 维实仿射子空间R^{n}

                                                                                     \left \{ x\in R^{n}|Ax=b \right \}

       中,假设 xy\in R^{n},对任意实数\theta0\leqslant\theta\leqslant 1,有

                                                           A(\theta x+(1-\theta )y)=\theta b+(1-\theta )b=b

       即\theta x+(1-\theta )y\in R^{n},这一结论表明:若优化问题中的约束是一组等式约束,那么它们确定的可行域是凸集。

  • n 维实向量空间中,多面体空间R^{n}定义为

                                                                             \left \{ x\in R^{n}|Ax\leqslant b \right \}

        在多面体空间R^{n}中,假设 xy\in R^{n},对任意实数\theta0\leqslant\theta\leqslant 1,有

                                                              A(\theta x+(1-\theta )y)\leq \theta b+(1-\theta )b=b

        即\theta x+(1-\theta )y\in R^{n},这一结论表明:若优化问题中的约束是一组线性不等式约束,那么它们确定的可行域是凸集。

   最后,还有一个重要的结论是,多个凸集的交集仍然是凸集。​​​​​​                            

       1.2  凸函数

       对于函数f(x),如果其定义域内的任意两个点 xy满足

                                                           f(\theta x+(1-\theta )y)\leqslant \theta f(x)+(1-\theta )f(y)

       则函数f(x)成为凸函数,在二维空间中我们映像最深的凸函数就是下面这种情况了   

                                                                      

      在多维空间中,如何判断一个函数是否为凸函数,需要依据其Hessian矩阵判断。

      在一个优化问题中,若目标函数是凸函数,变量可行域是凸集,那么该优化问题就称为凸优化问题。通过以上对凸集及凸函数的定义,我们可以将单变量的凸优化问题用以下表达式描述,多变量的凸优化问题也类似

                                                     目标:min \: \: f(x)

                                                     约束:g_{i}(x)\leqslant 0,i=1,2,...,m

                                                                h_{i}(x)= 0,i=1,2,...,p

    在凸优化问题中,局部最优值即是全局最优值。

2.拉格朗日乘子法

       拉格朗日乘子法用于求解带约束的优化问题,我们先从带等式约束的情况着手,一步步分析到带不等式约束的情况。

       2.1  等式约束    

       现假设有函数f(x,y),带约束的优化目标为

                                                                                    min \: \: f(x,y)

                                                                                            s.t. h(x,y)=0

函数f(x,y)h(x,y)投影在XOY平面上的等值线f(x)h(x)如下图所示

                                                     

 

 图中带箭头的线条表示曲线在该点处的梯度方向。从上图中可以看到,只有约束曲线h(x)与等值线f(x)相切的地方,目标函数f(x,y)才有局部极值,因为在h(x)曲线与等值线不相切处(即交点处),变量x沿h(x)曲线移动时f(x)会增大或者减小,f(x,y)无法得到局部极值。因此,在计算f(x,y)最小值时,首先应该计算出所有满足约束的极值点,然后在这些极值点中找出最小值。

        现在观察一下等值线f(x)h(x)曲线相切时的特征,在二维空间中,梯度与切线方向垂直(在多维空间中,梯度与切点处切超平面垂直),也就是说f(x)h(x)在切点处的梯度共线(这里不能说反向,尽管上图中显示的是反向),因此在切点处有

                                                                       \bigtriangledown f(x,y)=u\bigtriangledown h(x,y)                                         (1)

\bigtriangledown为梯度,u为任意实数,依据梯度的计算方式,式(1)等价于

                                                                       \frac{\partial f(x,y)}{\partial x}=u \frac{\partial h(x,y)}{\partial x}                                            (2)

                                                                       \frac{ \partial f(x,y) }{\partial y}=u \frac{ \partial h(x,y) }{ \partial y}                                            (3)

\partial为偏导数计算符号,这样在求解极值点时,联立式(2)、式(3)和h(x,y)=0计算即可。为了方便,构造函数F(x,y,u)

                                                                   F(x,y,u)=f(x,y)+uh(x,y)

                                                                                 s.t. \, \, h(x,y)=0

求极值时直接求F(x,y,u)xyu的偏导数,并令其为0即可,结果和上面过程一样,这种方法就是等式约束下的拉格朗日乘子法。

        在多个等式约束情况下,也是一样的做法,构造函数F(x,y,u_{1},...,u_{k}),然后求解F(x,y,u_{1},...,u_{k})xyu_{i} 的偏导数并令其为0

                                                           F(x,y,u_{1},...,u_{k})=f(x,y)+\sum_{i=1}^{k}u_{i}h_{i}(x,y)

                                                                          s.t. \, \, h_{i}(x,y)=0\, \, ,i=1,...,k

        2.2 不等式约束

        针对2.1节中的优化问题,现增加一个不等式约束                                                  

                                                                                 min \: \: f(x,y)

                                                                                     s.t. \, \, h(x,y)=0

                                                                                            g(x,y)\leq 0

        在带不等式约束的优化问题中,我们还是要采用先找出局部极值,然后通过比较极值的方式找出最小值,如果局部极值存在,那么只可能有两种情况,一种情况是局部极值点在g(x,y)= 0的边界上,另外一种是时局部极值点在g(x,y)< 0的区域内。我们先将函数f(x,y)h(x,y)g(x,y)投影到XOY平面上,点x^{*}为曲线h(x)与等值线f(x)的切点。

        第一种情况如下图所示

                           

此时不等式约束成为了等式约束,在2.1节中的约束问题中,因为等式约束的原因无法施加更多的约束,只能要求目标函数f(x,y)与约束函数h(x,y)在切点处的梯度共线,而在不等式约束中,尽管切点位于约束区域的边界上,但仍能将约束条件加强,我们知道梯度是数值增大最快的方向,函数g(x)在切点x^{*}处的梯度肯定不是指向可行域g(x)<0的,因为这会使g(x)的值减小,而我们的目标是极小值优化问题,切点x^{*}处是一个极小值点,因此在可行域内越靠近切点x^{*}f(x)的值越小,所以函数f(x)在切点x^{*}处的梯度方向应该是指向g(x)<0区域的,因此函数f(x)g(x)在切点x^{*}处的梯度方向相反,这样我们可以利用拉格朗日乘子法构建函数F(x,y,u,\lambda )

                                                        F(x,y,u,\lambda )=f(x,y)+uh(x,y)+\lambda g(x,y)

极值点一定满足如下条件

                                                       \bigtriangledown f(x,y)+u\bigtriangledown h(x,y)+\lambda \bigtriangledown g(x,y)=0

                                                                             h(x,y)=0

                                                                             g(x,y)=0

                                                                                   \lambda >0

 

        第二种情况,切点x^{*} 不在g(x)\leq 0区域的边界上,满足g(x^{*})<0

                                           

这种情况下在切点处的不等式约束相当于不存在,我们可以构建函数F(x,y,u,\lambda )

                                                      F(x,y,u,\lambda )=f(x,y)+uh(x,y)+\lambda g(x,y)

极值点一定满足如下条件

                                                       \bigtriangledown f(x,y)+u\bigtriangledown h(x,y)+\lambda \bigtriangledown g(x,y)=0

                                                                         h(x,y)=0

                                                                          g(x,y)<0

                                                                                  \lambda =0

结合以上两种情况,我们可以利用拉格朗日乘子法构造如下函数

                                 F(x,y,u_{1},...,u_{m},\lambda_{1},...,\lambda_{n} )=f(x,y)+\sum_{i=1}^{m}u_{i}h_{i}(x,y)+\sum_{j=1}^{n}\lambda _{j}g_{j}(x,y)

该函数的极值点满足

                                                    s.t. \, \, \bigtriangledown f(x,y)+u\bigtriangledown h(x,y)+\lambda \bigtriangledown g(x,y)=0

                                                                           h_{i}(x,y)=0\, \, ,i=1,...,m

                                                                           g_{j}(x,y)\leq 0\, \, ,i=1,...,n

                                                                                   \lambda_{j}\geq 0 \, \, ,i=1,...,n

                                                                      \lambda _{j}g_{j}(x,y)= 0\, \, ,i=1,...,n

3.KKT条件与对偶问题

       第2节中最终总结出了极值点需满足的条件,这样一组约束条件即称为KKT条件,它是优化问题中获取极值点的必要条件。当然,在实际中并不是所有情况下极值点一定满足KKT条件,解出的极值点还是要代入目标函数中检查,要想一个优化问题的极值点满足KKT条件还需要一些规范性条件,我这里不在此列出这些规范性条件了(可以在文章推荐的文章中学习)。依据以上KKT条件,我们就可以求解优化问题了,但一般直接求解这组方程是比较困难的,为了更好的解决这个优化问题,数学家还找到了它的对偶问题,当对偶问题比较容易求解时,我们可以通过求解对偶问题来间接的求解原优化问题,我们还是以单个等式约束、不等式约束问题为例来说明其对偶问题。

       利用拉格朗日乘子法构建以下函数及约束条件

                                                     F(x,y,u,\lambda )=f(x,y)+uh(x,y)+\lambda g(x,y)

                                                                        s.t. \, \, h(x,y)=0

                                                                               g(x,y)\leq 0

                                                                                        \lambda\geq 0

                                                                            \lambda g(x,y)= 0

我们先来看一下max\, \, F(x,y,u,\lambda ),约束范围内的点满足h(x,y)=0\lambda g(x,y)= 0,所以可以得到

                                                                        max\, \, F(x,y,u,\lambda )=f(x,y)

不在约束范围内的点,可以调整 \lambda 和 u 的值使用F(x,y,u,\lambda )取到无穷大

                                                                         max\, \, F(x,y,u,\lambda )=\infty

此时求解max\, \, F(x,y,u,\lambda )是没什么意义的。现在我们只考虑满足约束的点,那么原优化问题min \: \: f(x,y)可以表达成

                                                                          \underset{x,y}{min} \, \,\underset{\lambda ,u}{max}\, \, F(x,y,u,\lambda )                                              (4)

该问题的对偶问题即为

                                                                         \underset{\lambda ,u}{max} \, \,\underset{x,y}{min}\, \, F(x,y,u,\lambda )                                               (5)

我们有

                                                  \underset{x,y}{min} \, \,\underset{\lambda ,u}{max}\, \, F(x,y,u,\lambda )\geq \underset{\lambda ,u}{max} \, \,\underset{x,y}{min}\, \, F(x,y,u,\lambda )                       

在很多文章中都说 “ 最大值中的最小值比最小值中的最大值大是很显然 ”,这样的理解在多变量函数中理解起来有点费劲,不过也暂时只能先这样理解了。求解公式(5)得到的解并不一定是公式(4)中的最优解,那么我们自然就会问,在什么条件下,公式(5)与公式(4)表示的问题是等价的呢?在上面说到的满足KKT条件所需的一些规范性条件中,有一个条件称为 Slater条件,满足 Slater条件的约束问题具有强对偶性质,公式(5)与公式(4)中的解是等价的。 Slater条件表述为:如果优化问题是个凸优化问题,且至少存在一个点满足h(x,y)=0 和 g(x,y)=0,则极值一定满足 KKT 条件,并且满足强对偶性质。

       本篇文章到这里为止,已经将准备知识说完了,接下来我们着手处理一下上一篇遗留的优化问题。

4.构建SVM超平面时的优化问题

   上一篇中最后的优化问题为

                                                               max \frac{1}{\left \| w \right \|},\: s.t. \: \: y_{i}(w^{T}x_{i}+b)\geq 1,i=1,...,k      

   我们将其转化为

                                                                                 min \, \, \frac{1}{2}w^{2}   

                                                                                   s.t. \: \: 1-y_{i}(w^{T}x_{i}+b)\leq 0,i=1,...,k

这是等价的,目标函数显然是一个我们熟知凸函数,约束条件定义的可行域也是上文中所说的凸集,所以这是一个凸优化问题。先利用拉格朗日乘子法构建如下函数

                                                           F(w,b,\lambda _{1},...,\lambda _{k})=\frac{1}{2}w^{2}+\sum_{i=1}^{k}\lambda _{i}\left [ 1-y_{i}(w^{T}x_{i}+b) \right ]

                                                                           s.t. \: \: 1-y_{i}(w^{T}x_{i}+b)\leq 0,i=1,...,n                                                                               

                                                                                               \lambda _{i}\geq 0\, \, ,i=1,...,k

我们的优化目标可以表达如下

                                                                 \underset{w,b}{min}\, \, \underset{\lambda_{i} }{max}\, \, \frac{1}{2}w^{2}+\sum_{i=1}^{k}\lambda _{i}\left [ 1-y_{i}(w^{T}x_{i}+b) \right ]                                        

                                                                                  s.t. \: \: 1-y_{i}(w^{T}x_{i}+b)\leq 0,i=1,...,n                                                                               

                                                                                               \lambda _{i}\geq 0\, \, ,i=1,...,k

其对偶问题为

                                                                 \underset{\lambda _{i}}{max}\, \, \underset{w,b }{min}\, \, \frac{1}{2}w^{2}+\sum_{i=1}^{k}\lambda _{i}\left [ 1-y_{i}(w^{T}x_{i}+b) \right ]                       (6)                                                       

                                                                s.t. \: \: 1-y_{i}(w^{T}x_{i}+b)\leq 0,i=1,...,n                                                                               

                                                                                               \lambda _{i}\geq 0\, \, ,i=1,...,k

很明显,支持向量上的点满足1-y(w^{T}x+b)= 0,因此优化问题满足 Slater条件,因此其对偶问题的解等价于原问题的解,这样我们可以直接求解其对偶问题的最优解。

 求取F(w,b,\lambda _{1},...,\lambda _{k})wb的偏导数,并令其为0,得到

                                                      \frac{\partial F(w,b,\lambda _{1},...,\lambda _{k})}{\partial w}=w-\sum_{i=1}^{k}\lambda _{i}x_{i}y_{i}=0       

                                                      \frac{\partial F(w,b,\lambda _{1},...,\lambda _{k})}{\partial b}=\sum_{i=1}^{k}\lambda _{i}y_{i}=0

将计算的结果代入公式(6)中,得到

                                                                 \underset{\lambda _{i}}{max}\, \, \sum_{i=1}^{k}\lambda _{i}-\frac{1}{2}\sum_{i=1}^{k}\lambda _{i}\lambda _{j}y_{i}y_{j}x_{i}x_{j}

利用一些数值计算软件,在训练数据集上就可以计算出结果满足最优结果的\lambda _{1},...,\lambda _{k}值了,继而求解出wb。也有一些算法能快速计算出结果,这个我们后面再介绍,完全线性可分情况下的支持向量机构建到这里也就完成了。事实上,并不是所有的\lambda值均非0,只有支持向量机上的点其对应的\lambda值才非0,这和不等式约束中的第一种情况一致。

5.小结

      本篇博客中首先介绍了构建SVM时涉及的数值优化计算过程的背景知识,但是我没有很详细的介绍,只是介绍了一些必须的部分,感兴趣的同学可以自己再去多了解一些。本系列的前两篇介绍的是在数据完全线性可分情况下SVM的构建,但数据完全线性可分的情况毕竟很少,因此这样构建的SVM模型分类效果并不好,下一篇开始将进一步介绍数据不完全线性可分情况下SVM的构建。

   

 

     

                                     

       

 

          

       

posted @ 2019-05-18 16:35  hgz_dm  阅读(215)  评论(0编辑  收藏  举报