(一)关于拉格朗日乘子法
首先来了解拉格朗日乘子法,那么为什么需要拉格朗日乘子法?记住,有拉格朗日乘子法的地方,必然是一个组合优化问题。那么带约束的优化问题很好说,就比如说下面这个:
这是一个带等式约束的优化问题,有目标值,有约束条件。那么想想假设没有约束条件这个问题是怎么求解的呢?是不是直接f对各个x求导等于0,,解x就可以了,可以看到没有约束的话,求导为0,那么各个x均为0吧,这样f=0了,最小。但是x都为0不满足约束条件呀,那么问题就来了。这里在说一点的是,为什么上面说求导为0就可以呢?理论上多数问题是可以的,但是有的问题不可以。如果求导为0一定可以的话,那么f一定是个凸优化问题,什么是凸的呢?像下面这个左图:
凸的就是开口朝一个方向(向上或向下)。更准确的数学关系就是:
f
f(x1)+f(x2)2>f(x1+x22)或者
(x1)+f(x2)2<f(x1+x22)
注意的是这个条件是对函数的任意x取值。如果满足第一个就是开口向上的凸,第二个是开口向下的凸。可以看到对于凸问题,你去求导的话,是不是只有一个极点,那么他就是最优点,很合理。类似的看看上图右边这个图,很明显这个条件对任意的x取值不满足,有时满足第一个关系,有时满足第二个关系,对应上面的两处取法就是,所以这种问题就不行,再看看你去对它求导,会得到好几个极点。然而从图上可以看到,只有其中一个极点是最优解,其他的是局部最优解,那么当真实问题的时候你选择那个?说了半天要说啥呢,就是拉格朗日法是一定适合于凸问题的,不一定适合于其他问题,还好我们最终的问题是凸问题。
回头再来看看有约束的问题,既然有了约束不能直接求导,那么如果把约束去掉不就可以了吗?怎么去掉呢?这才需要拉格朗日方法。既然是等式约束,那么我们把这个约束乘一个系数加到目标函数中去,这样就相当于既考虑了原目标函数,也考虑了约束条件,比如上面那个函数,加进去就变为:
这里可以看到与 α1,α2 相乘的部分都为0,所以 α1,α2 的取值为全体实数。现在这个优化目标函数就没有约束条件了吧,既然如此,求法就简单了,分别对x求导等于0,如下:
把它在带到约束条件中去,可以看到,2个变量两个等式,可以求解,最终可以得到 α1=−0.39,α2=−1.63 ,这样再带回去求x就可以了。那么一个带等式约束的优化问题就通过拉格朗日乘子法完美的解决了。那么更高一层的,带有不等式的约束问题怎么办?那么就需要用更一般化的拉格朗日乘子法即KKT条件来解决这种问题了。
(二)关于KKT条件
继续讨论关于带等式以及不等式的约束条件的凸函数优化。任何原始问题约束条件无非最多3种,等式约束,大于号约束,小于号约束,而这三种最终通过将约束方程化简化为两类:约束方程等于0和约束方程小于0。再举个简单的方程为例,假设原始约束条件为下列所示:
那么把约束条件变个样子:
为什么都变成等号与小于号,方便后面的,反正式子的关系没有发生任何变化就行了。
现在将约束拿到目标函数中去就变成:
那么KKT条件的定理是什么呢?就是如果一个优化问题在转变完后变成
其中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的约束条件对不对。至于这个时候需不需要管g3(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,这就是这个公式的含义。
===============
这样我们就去讨论下,要么g=0,要么 α=0 ,这里两个g两个 α ,这样我们就需要讨论四种情况,可能你会说,这是约束条件少的情况,那么如果有10个约束条件,这样就有10个g和10个 α ,你去给我讨论?多少种组合,不知道,但是换个思路,我们非得去10个一起去讨论?机智的学者想到一种方法,考虑到 ∑αigi(x)=0 这个条件,那么我两个两个讨论不就可以了,比如现在我就讨论 α7,α8 ,让其他的 α 不变,为什么选或者至少选两个讨论呢,因为这个式子求和为0,改变一个显然是不行的,那就改变两个,你增我就减,这样和可以为0。再问为什么不讨论3个呢?也可以,这不是麻烦嘛,一个俗语怎么说来着,三个和尚没水喝,假设你改变了一个,另外两个你说谁去减或者加使得和为0,还是两个都变化一点呢?不好说吧,自然界都是成双成对的才和谐,没有成三成四的(有的话也少)。这里顺便提一下后面会介绍到的内容,就是实现SVM算法的SMO方法,在哪里,会有很多 α ,那么人们怎么解决的呢,就是随便选择两个 α 去变化,看看结果好的话,就接受,不好的话就舍弃在选择两个 α ,如此反复,后面介绍。
(1)
α1=α2=0
,那么看上面的关系L(x,α)=x21−2x1+1+x22+4x2+4+α1(10−x1−10x2)+α2(10x1−x2−10)L(x,α)=x21−2x1+1+x22+4x2+4+α1(10−x1−10x2)+α2(10x1−x2−10)
可以得到 x1=1,x2=−1 ,再把两个x带到不等式约束,发现第一个就是需要满足(10-1+20=29<0)显然不行,29>0的。舍弃。
===========SVM的理论基础
定义一下离这个线最近的点到这个分界面(线)的距离分别为d1,d2。那么SVM找最优权值的策略就是,先找到最边上的点,再找到这两个距离之和D,然后求解D的最大值。
那么假设上虚线现在为
WTX+b=k
,两边同时除k可以吧,这样上虚线还是可以变成
WT1X+b1=1
,同理下虚线也可以这样,然后他们的中线就是
WT1X+b1=0
吧,可以看到从k到1,权值无非从w变化到w1,b变到b1,我在让w=w1,b=b1
再看看D=d1+d2怎么求吧,假设分界面 WTX+b=0 ,再假设X是两维的,那么分界面再细写出来就是: w1x1+w2x2+b=0 。上分界线: w1x1+w2x2+b=1 ,这是什么,两条一次函数(y=kx+b)的曲线是不是,那么初中就学过两直线的距离吧, d=|c2−c1|w21+w22−−−−−−−√=1||W||
这里W=(w1,w2),是个向量,||W||为向量的距离,那么 ||W||2=WTW 。下界面同理。这样 D=d1+d2=2||W||=2WTW−−−−−√等效2WTW ,要使D最大,就要使分母最小,这样优化问题就变为 min(12WTW) ,乘一个系数0.5没影响,但是在后面却有用。
如果一个一次函数分界面为
WTX+b=0
,那么线上方的x可以使得
WTX+b>0
,下方的x可以使得
WTX+b<0
吧,那么对于上界面以上的点就有
WTX+b>1
,下界面以下的点就有
WTX+b<−1
。我们现在再假设上界面以上的点的分类标签为1,下界面以下的点的分类标签为-1。那么这两个不等式再分别乘以他们的标签会怎么样?是不是可以统一为
yi(WTxi+b)≥1
了(这也是为什么SVM在使用之前为什么要把两类标签设置为+1,-1,而不是0,1等等之类的了)。
好了假设分界面一旦确定,是不是所有点都得满足这个关系。那么最终的带约束的优化问题转化为:
转换到这种形式以后是不是很像上节说到的KKT条件下的优化问题了,就是这个。
但是有一个问题,我们说上节的KKT是在凸函数下使用的,那么这里的目标函数是不是呢?答案是的,想想
WT∗W
,函数乘出来应该很单一,不能有很多极点,当然也也可以数学证明是的。(?)
好了那样的话就可以引入拉格朗日乘子法了,优化的目标变为:
L(w,b,α)=12wTw+α1h1(x)+...+αnhn(x)=12wTw−α1[y1(wx1+b)−1]−...−αn[yn(wxn+b)−1]=12wTw−∑i=1Nαiyi(wxi+b)+∑i=1Nαi
这两个公式非常重要,简直是核心公式。
那我问你为什么
WTW
对w求导是w呢?为什么求导以后,转置就没了,设想一下假设现在是二维样本点,也就是最终的W=(w1,w2),那么
WTW=w1∗w1+w2∗w2
那么对w1求导就是2w1,对w2就是2w2,这样写在一起就是对w求导得到(2w1,2w2)=2w了,然后乘前面一个1/2(这也就是为什么要加一个1/2),就变成w了。
好了得到上面的两个公式,再带回L中把去w和b消掉,你又可能发现,w确实可以消,因为有等式关系,那b怎么办?上述对b求导的结果竟然不含有b,上天在开玩笑吗?其实没有,虽然没有b,但是有那个求和为0呀,带进去你会惊人的发现,b还真的可以消掉,就是因为了那个等式。简单带下:
那么求解最最开始的函数的最小值等价到这一步以后就是求解W的最大值了,因为使用了拉格朗日乘子法后,原问题就变为其对偶问题了,最小变成了最大(?)
为什么有 αi≥0 ,这是上节说到的KKT条件的必须。
离群点或者噪声点
所以在上下分界面上加入松弛变量
ϵi
,认为如果正类中有点到上界面的距离小于
ϵi
,那么认为他是正常的点,哪怕它在上界面稍微偏下一点的位置,同理下界面。还是以上面的情况,我们目测下的是理想的分解面应该是下面这种情况:
如果按照这种分会发现4个离群点,他们到自己对应分界面的距离表示如上,理论上讲,我们给每一个点都给一个自己的松弛变量
ϵi
,如果一个分界面求出来了,那么比较这个点到自己对应的界面(上、下界面)的距离是不是小于这个值,要是小于这个值,就认为这个界面分的可以。
好了那么因为松弛变量的加入,导致每个点的约束条件就变化了点,像上界面以上的点,它满足的条件可能就是:
WTxi+b≥1−ϵi,yi=1
而下界面可能就是:
WTxi+b≤−1+ϵi,yi=−1
并且
ϵi≥0
。
统一在一起,整个问题就变成:
你发现目标函数里面多了一点东西,而加上这个是合理的,我们在优化的同时,也使得总的松弛变量之和最小。常数C决定了松弛变量之和的影响程度,如果越大,影响越严重,那么在优化的时候会更多的注重所有点到分界面的距离,优先保证这个和小。
好了将问题写在一起吧:
L(x,α,β)=12WTW−∑i=1Nαi(yi(Wxi+b)+ϵi−1)+C∑i=1Nϵi−∑i=1Nriϵi
观察第三个式子,因为 ri≥0 因为 ri≥0 ,所以 c−αi≥0⇒αi≤C ,结合 αi≥0 那么 0≤αi≤C ,把这三个导数结果带到目标函数中去消掉对应的w,b以及 ri ,你会惊人的发现,连 ϵi 也消掉了,并且目标函数和没有加松弛变量的一模一样:
这么说,溜了一圈下来,无非多了个 αi≤C ,其他的什么也没有变,真好。那么统一一下,更一般的带松弛变量的优化函数以及约束条件就变为:
剩下的问题是怎么去找这样一组最优解 αi 了。看过上节的可能会知道,在上节的最后那个实例中也是寻找 αi ,不过那里只有两个 αi ,而 αi 要么等于0,要么大于0,而 αi 大于0的时候,对应的另外一个因子就等于0。然后讨论这四种情况找到满足解。但是我们这里的 αi 可不止2个,想挨着讨论是不行的,且这里的KKT条件和上节的那个还不太一样。那么这里的KKT条件是什么呢?具体又要怎么解这样一堆 αi 的问题呢?请看下节的SMO算法求解SVM问题。