哈工大机器学习期末复习笔记(二)

1.SVM的基本思想

考虑用一个线性分类器对样本进行二分类,样本标签为y=\pm 1。此时可能存在很多分类方法,它们有着不同的决策面,但是哪一个决策面最好呢?

用w表示决策面的法向量,样本的分类可以用x在法向量上的投影(w与x的内积除以w的长度就是投影大小),和决策面到原点的距离比较来判断。移项整理后,可以得到决策面的描述方程:

w^{T}x+b=0

一个直观的想法是,我们选择两类样本正中间的那个决策面,如上图所示。对于这个决策面而言,

属于第一类的每个样本x_{i} 都满足w^{T}x_{i}+b\leq -c

属于第二类的每个样本x_{i} 都满足w^{T}x_{i}+b\geq +c

也可以把两个式子整合到一起,写成(w^{T}x_{i}+b)y_{i}\geq c,使等号成立的样本点被称为支持向量(support vector)

而两类样本的间隔可以用它们在w上的投影长度之差来计算,即

m=d^{-}+d^{+}=\frac{w^{T}(x_{i^{*}}-x_{j^{*}})}{||w||}=\frac{2c}{||w||}

因此,现在的问题就是在样本点的约束下求最大间隔,即问题被转化为

\begin{matrix} max_{\, w} &\frac{2c}{||w||} \\ s.t & y_{i}(w^{T}x_{i}+b)\geq c,\forall i \end{matrix}

注意到,这里面的c只是作为一个系数影响着w和b的大小,但它其实不影响我们的决策面选择,并且,最大化\frac{1}{||w||}等价于最小化\frac{1}{2}w^{T}w,我们可以将问题重写为

\begin{matrix} min_{\, w,b} &\frac{1}{2}w^{T}w \\ s.t & 1-y_{i}(w^{T}x_{i}+b)\leq 0,\forall i \end{matrix}

这就是一个凸二次规划问题,可以用现成的包求解,但我们还可以对它做更深入的研究。

2.软间隔与损失函数

我们知道,一个机器学习模型的目标函数一般有两项组成,一项与data和model有关,这一项决定与样本数据的吻合度,另一项只与model有关,可以控制模型的复杂程度,使其具有较强的泛化能力。而在这个问题中,显然我们的目标函数只有第二项,这是因为,我们的约束条件已经决定了决策面在训练样本上是100%正确的。

但是样本总是可能出现特例,那些不小心跑到对面的样本点很容易让我们的决策面出现过拟合。

如果我们允许决策面不满足其中一些样本呢?

这就引入了“软间隔”的概念,我们允许某些样本不满足约束,但要为他们找到相应的损失函数h(z),\: z=y_{i}(w^{T}x_{i}+b)-1

最简单直观的损失函数就是0/1损失函数(下图中红线),即分类正确时损失为0,分类错误时损失为1。但这个函数不连续,性质不好,不利于我们求解目标函数,因而我们可以选择其他函数替代它。由于我们的目标是求解凸函数的最小值,替代时用它的上界会更好。

要取红线以上的函数,我们会想到用黑线替代,这就是hinge损失。但这个函数在z=1处不可导,这也不利于我们的计算,因此还可以采用指数损失,即图中绿线来替代。

现在来回顾一下实验二的逻辑回归,在逻辑回归中,有

p(y=1|x)=h_{\theta }(x)=\frac{1}{1+e^{-\theta ^{T}x}}

对每一个样本,我们都能得到这样一个概率。显然我们希望,当真实标签y=0时,我们预测的概率h_{\theta }(x)能逼近1,即\theta ^{T}x远大于0。而真实标签y=1时,h_{\theta }(x)能逼近0,即\theta ^{T}x能远小于0。

真实标签y_{i}对应了真实的概率分布P=\begin{cases} 1-y_{i},& y=0 \\ y_{i},& y=1 \end{cases}

我们预测的概率分布为Q=\begin{cases} 1-h_{\theta }(x),& y=0 \\ h_{\theta }(x),& y=1 \end{cases}

我们可以用KL散度(也称为相对熵)来度量这两组概率分布之间的差异。给定两个概率分布P和Q,二者之间的KL散度定义为:

KL(P||Q)=-\sum\limits_{x} p(x)log\frac{p(x)}{q(x)}

因此,真实概率分布与预测概率分布的KL散度为:

KL(P||Q)=-(y_{i}log\, h_{\theta }(x)\, +\, (1-y_{i})log(1-h_{\theta }(x)))

用KL散度作为损失函数,再加上正则项,我们可以写出逻辑回归的优化目标:

min_{\, \theta } \; \; \; \frac{1}{m}(\sum_{i=1}^{m}y_{i}(-log\, h_{\theta }(x_{i}))+(1-y_{i})(-log(1-h_{\theta }(x_{i}))))\; +\; \frac{\lambda }{2m}\sum_{j=1}^{n}\theta _{j}^{2}

类似的,可以写出SVM的优化目标函数:

min_{\, \theta } \; \; \; C(\sum_{i=1}^{m}y_{i}cost_{1}(\theta ^{T}x_{i})+(1-y_{i})cost_{0}(\theta ^{T}x_{i}))\; +\; \frac{1 }{2}\sum_{j=1}^{n}\theta _{j}^{2}

3.拉格朗日函数

我们先将SVM基本型的约束条件简化为等式约束,因为最终决定我们决策面的其实是那些等号成立的样本点。然后添加拉格朗日乘子λ≥0,得到拉格朗日函数L=f(w)+\lambda h(w)

对w和λ求偏导等于0,即

\begin{cases} &\bigtriangledown f(w)=-\lambda \bigtriangledown h(w) \\ & h(w)=0 \end{cases}

从第一个式子可以看出,\bigtriangledown f(w)\bigtriangledown h(w)这两个向量是共线的。我们可以把f(w)想象成一个碗,约束函数h(w)=0是碗上的一道裂纹

假如现在约束是不等式h(w)\leq 0,会得到一个w的可行域。当可行域如上图所示时,显然f(w)的最小值在“裂纹”上取到。当我们采用梯度下降算法时,\bigtriangledown f(w)是斜向上与碗相切的(梯度指向最速上升方向),\bigtriangledown h(w)则垂直于“裂纹” (“裂纹”上h(w)处处相等),当w不在裂纹上时,可以沿着与\bigtriangledown f(w)相反的方向走,但走到裂纹上之后,就只能沿着裂纹走,而方向可以用夹角来判断。在最小值处,\bigtriangledown f(w)\bigtriangledown h(w)共线了,也就意味着不会再向裂纹的任何一个方向移动了。

相反,如果可行域不是图中的阴影部分,而是碗的剩余部分,显然最小值在碗底,此时最小值与h(w)无关,也意味着λ=0。

4.对偶问题

一般的,对一个原始的规划问题:

对每条约束添加拉格朗日乘子后,它的拉格朗日函数为:

其中\alpha _{i}\geq 0,需要注意的是,对于这个函数,其自变量是w,α和β而不仅仅是w。可以发现,当w满足约束条件时,由于g(w)非正,α非负,h(w)=0,故对于不同的α和β而言,f(w)就是这个函数的上界。也就是说,求解约束条件下f(w)最小值的问题被转化为求:

它的对偶问题是:

它们之间的关系有定理给出:

并且, 如果存在一组点使得中间的等号成立,就是强对偶。

为了简化问题,现在我们只考虑一组不等式约束,因为任意一个等式约束h(w)=0可以通过h(w)≥0和h(w)≤0给出。原问题和对偶问题之间的关系可以通过以下分析来更直观的展现:

 

由于g(w)≤0,f(w)是开口朝上的凸函数,可以大致画出w的可行域如图(也可能没有极小点,这没有关系)。而L(w,\alpha ,\beta )=f(w)+\alpha ^{T}g(w)可以看成线性函数,即图中蓝线,显然L(w,\alpha ,\beta )是截距,-\alpha ^{T}是斜率。对于原问题而言,是先给定w,然后L的值会随α的变化而变化,显然α=0时截距最大。而对偶问题则先给定α,再让w动,即直线平移到与可行域下界相切时,截距最小。

如果L存在一些鞍点(saddle point)满足Karush-Kuhn-Tucker条件(KKT),即:

那么它同时是原问题和对偶问题的解。

现在回到我们的问题:

可以写出它的拉格朗日函数:

将问题转化为它的对偶问题:

 

首先关于w,b求L的最小值,即对w和b求偏导等于0:

 将这些条件代入,可以消去拉格朗日函数中的w和b,就得到了:

现在对偶问题被改写成了如下形式:

看起来问题并没有得到简化,但稍后我们会看到,改写后的对偶问题蕴藏着一些很重要的事。

KKT条件中有:

 

这意味着只有少数α可以是非0(此时g(w)取0),即,只有支持向量中的样本点的α才可以不取0,其他的α都是0。而且,根据

w=\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}

我们就可以将w写成支持向量中的样本的加权组合:

w=\sum_{i\epsilon SV}^{}\alpha _{i}y_{i}x_{i}

对于一个新的数据z,只需计算

w^{T}z+b=\sum_{i\epsilon SV}^{}\alpha _{i}y_{i}(x_{i}^{T}z)+b

根据结果的正负来分类即可,而w不需要被明确的计算出来。在计算\alpha _{i}时,我们可以先固定其他的参数来求它的极值,又因为约束条件的存在,我们可以再选择一个\alpha _{j}来使它们可变,而仅仅优化这两个参数是十分快速的。通过反复的迭代,我们就能高效的求出所有α。

到此,我们可以给出一些SVM的解释。SVM中的w是一小部分样本的线性组合,这种“稀疏”的表示可以被看成KNN分类器构造的压缩。而我们的决策就是通过比较新数据z和我们支持向量中的点来进行的。

 5.核函数

到目前为止,我们通过最大间隔的方式找到了一个线性分类器,但如果我们面对的样本不是线性独立的呢?

处理这个问题的核心思想是,低维空间里非线性的数据在高维空间是线性的(参考实验一,对于n次多项式f,f(x)的分布不是线性的,但升维到X=(x,x^{2},x^{3},...,x^{n}),就可以写成f(X)=w^{T}X,此时它是线性的了)。因此,我们可以对非线性的数据x_{i}做一个映射\varphi (x_{i})使它升维,就又可以采用线性分类器了。

一个简单的例子是“异或”问题,这个问题本身不能被线性分类器解决,但将二维的x升到六维后就能用线性分类器解决了。详细内容见下图:

 再回顾一下SVM:

会发现数据在我们表达式中出现的形式只是彼此间的内积x_{i}^{T}x_{j},那么,对于非线性可分问题,只要我们对数据升维后再求内积,就依然能用SVM解决了。于是我们定义核函数K:

例如,如果我们用于升维的映射函数是: 

代入之后就可以得出核函数K(x,x')=(1+x^{T}x')^{2}

显然解决问题的关键就是找到合适的核函数。

一些常见的核函数有:

线性核 K(x,x')=x^{T}x'(我们已经见过了)

多项式核 K(x,x')=(1+x^{T}x')^{p}(例如上面的例子)

高斯核 K(x,x')=exp(-\frac{1}{2\sigma ^{2}}||x-x'||^{2})

等等。

关于核函数的选择,这个问题会直接决定我们模型的最终性能,但它的选择是一个未决问题,从而也诞生了多核学习(multiple kernel learning)。经验上,当数据情况不明时,我们可以先尝试高斯核。

 

 

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值