解密SVM系列(一):关于拉格朗日乘子法和KKT条件

写在之前

支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现了复杂的问题,不得不说确实完美。

本系列旨在以基础化的过程,实例化的形式一探SVM的究竟。曾经也只用过集成化的SVM软件包,效果确实好。因为众人皆说原理复杂就对其原理却没怎么研究,最近经过一段时间的研究感觉其原理还是可以理解,这里希望以一个从懵懂到略微熟知的角度记录一下学习的过程。

其实网络上讲SVM算法的多不胜数,博客中也有许多大师级博主的文章,写的也很简单明了,可是在看过之和总是感觉像差点什么,当然对于那些基础好的可能一看就懂了,然而对于像我们这些薄基础的一遍下来也能马马虎虎懂,过一两天后又忘了公式怎么来的了。比如说在研究SVM之前,你是否听说过拉格朗日乘子法?你是否知道什么是对偶问题?你是否了解它们是怎么解决问题的?Ok这些不知道的话,更别说什么是KKT条件了,哈哈,有没有说到你的心声,不用怕,学学就会了。话说像拉格朗日乘子法,在大学里面学数学的话,不应该没学过,然你学会了吗?你知道是干什么的吗?如果那个时候就会了,那你潜质相当高了。作为一个刚过来的人,将以简单实例化形式记录自己的学习过程,力图帮助新手级学习者少走弯路。

(一)关于拉格朗日乘子法

首先来了解拉格朗日乘子法,那么为什么需要拉格朗日乘子法?记住,有拉格朗日乘子法的地方,必然是一个组合优化问题。那么带约束的优化问题很好说,就比如说下面这个:

minf=2x21+3x22+7x23s.t.2x1+x2=12x2+3x3=2

这是一个带等式约束的优化问题,有目标值,有约束条件。那么想想假设没有约束条件这个问题是怎么求解的呢?是不是直接f对各个x求导等于0,,解x就可以了,可以看到没有约束的话,求导为0,那么各个x均为0吧,这样f=0了,最小。但是x都为0不满足约束条件呀,那么问题就来了。这里在说一点的是,为什么上面说求导为0就可以呢?理论上多数问题是可以的,但是有的问题不可以。如果求导为0一定可以的话,那么f一定是个凸优化问题,什么是凸的呢?像下面这个左图:

凸的就是开口朝一个方向(向上或向下)。更准确的数学关系就是:

f(x1)+f(x2)2>f(x1+x22)或者f(x1)+f(x2)2<f(x1+x22)

注意的是这个条件是对函数的任意x取值。如果满足第一个就是开口向上的凸,第二个是开口向下的凸。可以看到对于凸问题,你去求导的话,是不是只有一个极点,那么他就是最优点,很合理。类似的看看上图右边这个图,很明显这个条件对任意的x取值不满足,有时满足第一个关系,有时满足第二个关系,对应上面的两处取法就是,所以这种问题就不行,再看看你去对它求导,会得到好几个极点。然而从图上可以看到,只有其中一个极点是最优解,其他的是局部最优解,那么当真实问题的时候你选择那个?说了半天要说啥呢,就是拉格朗日法是一定适合于凸问题的,不一定适合于其他问题,还好我们最终的问题是凸问题。

回头再来看看有约束的问题,既然有了约束不能直接求导,那么如果把约束去掉不就可以了吗?怎么去掉呢?这才需要拉格朗日方法。既然是等式约束,那么我们把这个约束乘一个系数加到目标函数中去,这样就相当于既考虑了原目标函数,也考虑了约束条件,比如上面那个函数,加进去就变为:

minf=2x21+3x22+7x23+α1(2x1+x2?1)+α2(2x2+3x3?2)

这里可以看到与α1,α2相乘的部分都为0,所以α1,α2的取值为全体实数。现在这个优化目标函数就没有约束条件了吧,既然如此,求法就简单了,分别对x求导等于0,如下:

?f?x1=4x1+2α1=0?x1=?0.5α1?f?x2=6x2+α1+2α2=0?x2=?α1+2α26?f?x3=14x3+3α2=0?x3=?3α314

把它在带到约束条件中去,可以看到,2个变量两个等式,可以求解,最终可以得到α1=?0.39,α2=?1.63,这样再带回去求x就可以了。那么一个带等式约束的优化问题就通过拉格朗日乘子法完美的解决了。那么更高一层的,带有不等式的约束问题怎么办?那么就需要用更一般化的拉格朗日乘子法即KKT条件来解决这种问题了。

(二)关于KKT条件

继续讨论关于带等式以及不等式的约束条件的凸函数优化。任何原始问题约束条件无非最多3种,等式约束,大于号约束,小于号约束,而这三种最终通过将约束方程化简化为两类:约束方程等于0和约束方程小于0。再举个简单的方程为例,假设原始约束条件为下列所示:

minf=x21?2x1+1+x22+4x2+4s.t.x1+10x2>1010x1?10x2<10

那么把约束条件变个样子:

s.t.10?x1?10x2<010x1?x2?10<0

为什么都变成等号与小于号,方便后面的,反正式子的关系没有发生任何变化就行了。

现在将约束拿到目标函数中去就变成:

L(x,α)=f(x)+α1g1(x)+α2g2(x)=x21?2x1+1+x22+4x2+4+α1(10?x1?10x2)+α2(10x1?x2?10)

那么KKT条件的定理是什么呢?就是如果一个优化问题在转变完后变成

L(x,α,β)=f(x)+∑αigi(x)+∑βihi(x)

其中g是不等式约束,h是等式约束(像上面那个只有不等式约束,也可能有等式约束)。那么KKT条件就是函数的最优值必定满足下面条件:

(1) L对各个x求导为零;

(2) h(x)=0;

(3) ∑αigi(x)=0,αi≥0

这三个式子前两个好理解,重点是第三个式子不好理解,因为我们知道在约束条件变完后,所有的g(x)<=0,且αi≥0,然后求和还要为0,无非就是告诉你,要么某个不等式gi(x)=0,要么其对应的αi=0。那么为什么KKT的条件是这样的呢?

假设有一个目标函数,以及它的约束条件,形象的画出来就如下:

假设就这么几个吧,最终约束是把自变量约束在一定范围,而函数是在这个范围内寻找最优解。函数开始也不知道该取哪一个值是吧,那就随便取一个,假设某一次取得自变量集合为x1*,发现一看,不满足约束,然后再换呀换,换到了x2*,发现可以了,但是这个时候函数值不是最优的,并且x2*使得g1(x)与g2(x)等于0了,而g3(x)还是小于0。这个时候,我们发现在x2的基础上再寻找一组更优解要靠谁呢?当然是要靠约束条件g1(x)与g2(x),因为他们等于0了,很极限呀,一不小心,走错了就不满足它们两了,这个时候我们会选择g1(x)与g2(x)的梯度方向往下走,这样才能最大程度的拜托g1(x)与g2(x)=0的命运,使得他们满足小于0的约束条件对不对。至于这个时候需不需要管g2(x)呢?正常来说管不管都可以,如果管了,也取g3在x2*处的梯度的话,因为g3已经满足了小于0的条件,这个时候在取在x2*处的梯度,你能保证它是往好的变了还是往差的变了?答案是都有可能。运气好,往好的变了,可以更快得到结果,运气不好,往差的变了,反而适得其反。那么如果不管呢?因为g1(x)与g2(x)已经在边缘了,所以取它的梯度是一定会让目标函数变好的。综合来看,这个时候我们就不选g3。那么再往下走,假设到了自变量优化到了x3*,这个时候发现g2(x)与g3(x)等于0,也就是走到边了,而g1(x)小于0,可变化的空间绰绰有余,那么这个时候举要取g2(x)与g3(x)的梯度方向作为变化的方向,而不用管g1(x)。那么一直这样走呀走,最终找到最优解。可以看到的是,上述如果g1(x)、g2(x)=0的话,我们是需要优化它的,又因为他们本身的条件是小于0的,所以最终的公式推导上表明,是要乘以一个正系数α作为他们梯度增长的倍数,而那些不需要管的g(x)为了统一表示,这个时候可以将这个系数设置为0,那么这一项在这一次的优化中就没有了。那么把这两种综合起来就可以表示为

∑αigi(x)=0,αi≥0。

也即是某次的g(x)在为最优解起作用,那么它的系数值(可以)不为0。如果某次g(x)没有为下一次的最优解x的获得起到作用,那么它的系数就必须为0,这就是这个公式的含义。

比如上面例子的目标值与约束:

minf=x21?2x1+1+x22+4x2+4s.t.10?x1?10x2<010x1?x2?10<0

将约束提到函数中有:

L(x,α)=x21?2x1+1+x22+4x2+4+α1(10?x1?10x2)+α2(10x1?x2?10)

此时分别对x1、x2求导数:

?L?x1=2x1?2?α1+10α2=0?x1=0.5(α1?10α2+2)?L?x2=2x2+4?10α1?α2=0?x2=0.5(10α1+α2?4)

而我们还有一个条件就是α?g(x)=0,那么也就是:

α1?g1(x)=α1?(10?x1?10x2)=0α2?g2(x)=α2?(10x1?x2?10)=0

这样我们就去讨论下,要么g=0,要么α=0,这里两个g两个α,这样我们就需要讨论四种情况,可能你会说,这是约束条件少的情况,那么如果有10个约束条件,这样就有10个g和10个α,你去给我讨论?多少种组合,不知道,但是换个思路,我们非得去10个一起去讨论?机智的学者想到一种方法,考虑到∑αigi(x)=0这个条件,那么我两个两个讨论不就可以了,比如现在我就讨论α7,α8,让其他的α不变,为什么选或者至少选两个讨论呢,因为这个式子求和为0,改变一个显然是不行的,那就改变两个,你增我就减,这样和可以为0。再问为什么不讨论3个呢?也可以,这不是麻烦嘛,一个俗语怎么说来着,三个和尚没水喝,假设你改变了一个,另外两个你说谁去减或者加使得和为0,还是两个都变化一点呢?不好说吧,自然界都是成双成对的才和谐,没有成三成四的(有的话也少)。这里顺便提一下后面会介绍到的内容,就是实现SVM算法的SMO方法,在哪里,会有很多α,那么人们怎么解决的呢,就是随便选择两个α去变化,看看结果好的话,就接受,不好的话就舍弃在选择两个α,如此反复,后面介绍。

说回来,这里有四种情况,正好两个α,也不用挑不用减的,一次完事。那么我们分着讨论吧,

(1)α1=α2=0,那么看上面的关系可以得到x1=1,x2=?1,再把两个x带到不等式约束,发现第一个就是需要满足(10-1+20=29<0)显然不行,29>0的。舍弃

(2)g1(x)=g2(x)=0,带进去解得,x1=110/101;x2=90/101,再带回去求解α1,α2,发现α1=58/101,α2=4/101,它们满足大于0的条件,那么显然这组解是可以的。

(3)其他两种情况再去讨论发现是不行的。

可以看到像这种简单的讨论完以后就可以得到解了。

x1=110/101=1.08;x2=90/101=0.89,那么它得到结果对不对呢?这里因为函数简单,可以在matlab下画出来,同时约束条件也可以画出来,那么原问题以及它的约束面画出来就如下所示:

这是截取下来的符合约束要求的目标面

可以看到最优解确实就是上面我们求的那个解。既然简单的问题可以这样解,那么复杂一点的只需要简单化,照样可以解,至此KKT条件解这类约束性问题就是这样,它对后续的SVM求解最优解至关重要。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 03:15:52

解密SVM系列(一):关于拉格朗日乘子法和KKT条件的相关文章

关于拉格朗日乘子法和KKT条件

解密SVM系列(一):关于拉格朗日乘子法和KKT条件 标签: svm算法支持向量机 2015-08-17 18:53 1214人阅读 评论(0) 收藏 举报  分类: 模式识别&机器学习(42)  版权声明:本文为博主原创文章,未经博主允许不得转载. 原文链接 :http://blog.csdn.net/on2way/article/details/47729419 写在之前 支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复

机器学习笔记——拉格朗日乘子法和KKT条件

拉格朗日乘子法是一种寻找多元函数在一组约束下的极值方法,通过引入拉格朗日乘子,可将有m个变量和n个约束条件的最优化问题转化为具有m+n个变量的无约束优化问题.在介绍拉格朗日乘子法之前,先简要的介绍一些前置知识,然后就拉格朗日乘子法谈一下自己的理解. 一 前置知识 1.梯度  梯度是一个与方向导数有关的概念,它是一个向量.在二元函数的情形,设函数f(x,y)在平面区域D内具有一阶连续偏导,则对于每一点P(x0,y0)∈D,都可以定义出一个向量:fx(x0,y0)i+fy(x0,y0)j ,称该向量

拉格朗日乘子法和KKT条件

拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush-Kuhn-Tucker)条件是求解约束优化问题的重要方法,在有等式约束时使用拉格朗日乘子法,在有不等约束时使用KKT条件.前提是:只有当目标函数为凸函数时,使用这两种方法才保证求得的是最优解. 对于无约束最优化问题,有很多经典的求解方法,参见无约束最优化方法. 拉格朗日乘子法 先来看拉格朗日乘子法是什么,再讲为什么. $\min\;f(x)\\s.t.\;h_{i}(x)=0\;\;\;\;i=1,2...,n$ 这

解密SVM系列(二):SVM的理论基础

上节我们探讨了关于拉格朗日乘子和KKT条件.这为后面SVM求解奠定基础,本节希望通俗的细说一下原理部分. 一个简单的二分类问题例如以下图: 我们希望找到一个决策面使得两类分开.这个决策面一般表示就是WTX+b=0,如今的问题是找到相应的W和b使得切割最好.知道logistic分类 机器学习之logistic回归与分类的可能知道,这里的问题和那里的一样.也是找权值.在那里,我们是依据每个样本的输出值与目标值得误差不断的调整权值W和b来求得终于的解的.当然这样的求解最优的方式仅仅是当中的一种方式.那

解密SVM系列(五):matlab下libsvm的简单使用

本节简单介绍一下libsvm的使用方法.关于libsvm似乎曾经使用过,那个时候主要用libsvm进行简单的人脸识别实验.当时还翻译过关于libsvm里面的matlab英文文档 那么现在最新版本的libsvm为3.2.0,下载地址如下: http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 下载下来的libsvm其实包含好多个平台的工具箱软件,c++,matlab,java,python都有.他们的函数使用方法是一样的. 那么在下载完以后,点击里面的matlab下平

解密SVM系列(五):matlab下libsvm的简单使用:分类与回归

本节简介一下libsvm的用法. 关于libsvm似乎以前使用过.那个时候主要用libsvm进行简单的人脸识别实验.当时还翻译过关于libsvm里面的matlab英文文档 介绍与分类实验 那么如今最新版本号的libsvm为3.2.0,下载地址例如以下: http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 下载下来的libsvm事实上包括好多个平台的工具箱软件,c++.matlab,java,python都有. 他们的函数用法是一样的. 那么在下载完以后,点击里面的

【机器学习之数学】03 有约束的非线性优化问题——拉格朗日乘子法、KKT条件、投影法

目录 将有约束问题转化为无约束问题 拉格朗日法 KKT条件 拉格朗日法更新方程 凸优化问题下的拉格朗日法 罚函数法 对梯度算法进行修改,使其运用在有约束条件下 投影法 梯度下降法 to 投影梯度法 正交投影算子 References 相关博客 梯度下降法.最速下降法.牛顿法等迭代求解方法,都是在无约束的条件下使用的,而在有约束的问题中,直接使用这些梯度方法会有问题,如更新后的值不满足约束条件. 那么问题来了,如何处理有约束的优化问题?大致可以分为以下两种方式: 将有约束的问题转化为无约束的问题,

数学基础系列(四)----拉格朗日乘子法、行列式、矩阵基础

一.拉格朗日乘子法 1.通俗解释 给个函数:$Z=f(x,y)$如何求出它的极值点呢?有了前面的知识,简单来说直接求它的偏导不就OK了吗? 那现在假如说对这个函数加上一个约束条件呢?也就说现在假如有这样一个约束条件$2xy+2yz+2zx=S$,那该怎么样求出函数$Z(x,y,z)=xyz$的最大值呢? 在这样的约束条件下,到底什么点是我们想要的? 假如说我们现在有这样一座山峰,这座山峰的高度是$f(x,y)$,其中有一条曲线是$g(x,y) =C$.曲线镶嵌在山上,我们该如何找到曲线的最低点呢

非负矩阵分解(3):拉格朗日乘子法求解

作者:桂. 时间:2017-04-07  07:11:54 链接:http://www.cnblogs.com/xingshansi/p/6679325.html 声明:欢迎被转载,不过记得注明出处哦~ 前言 最近发这类文章,动不动就被管理员从首页摘除,如果你觉得这个文章还说得过去,麻烦帮忙点个赞吧,这样移除的概率小一些.... 本文为非负矩阵分解系列第三篇,在第二篇中介绍了不同准则下乘法算法的推导及代码实现,这里不免有一个疑问:明明是一个约束的优化问题,虽然乘法算法巧妙地将其变为一个无约束优化