支持向量机

SVM

在二分类问题的逻辑回归中,我们训练出向量\(\beta\),使得我们能够用\(\dfrac{1}{1+e^{-X_i^\top \beta}}\)来作为样本\(X_i\)被分类为\(y_i=1\)的概率。我们知道sigmoid函数是单调函数,因此实际上我们是在关注\(X_i^\top \beta\)这一线性项的大小。如果\(X_i^\top\beta\)远大于0或远小于0,我们对分类结果是很有信心的,因为这代表着极大或极小的概率。从几何上,我们知道逻辑回归就是在寻找一个平面把样本点分开,因此有信心的分类结果在几何上对应着这些样本点离平面较远。

现在我们关注离平面较近的那些样本点,我们对这些点的分类不那么有信心。因为对于靠近平面的点,扰动对结果的影响就比较大了。对平面做出一点调整,有可能这些样本的分类结果就会改变。对于同样的分类结果,平面的选取是可以有很多种的。如果我们要求选出一个最好的平面,那么一个很自然的想法就是让离平面最近的点距离平面尽量远。下面我们把这一想法转化为数学,定义“距离”以及对应的优化问题。

为了分析方便,我们把二分类的分类结果记为\(\{1,-1\}\),系数\(\beta\)分别记为向量\(w\)和截距\(b\)。这样,模型的预测结果就可以写为\(\hat y_i=\text{sgn}(w^\top x_i+b)\)。定义样本\((x_i,y_i)\)在模型参数选取为\((w,b)\)时的margin为\(\gamma_i=y_i(w^\top x_i+b)\)。可以看出,假如我们预设正样本被分到\(w^\top x+b>0\)的一侧,那么当模型分类正确时margin始终为正,分类错误时始终为负。一般,我们要求\(w\)是单位向量,因此我们把margin的表达式修改为\(\gamma_i=\dfrac{y_i(w^\top x_i+b)}{\|w\|}\)。我们定义\(\gamma_i\)在几何上恰好刻画样本\(x_i\)到平面\((w,b)\)的垂直距离:我们验证\(x_i-\gamma_i\cdot y_i \dfrac{w}{\|w\|}\)一定落在平面上,这就说明\(x_i\)到平面的投影垂线长度恰好为\(|\gamma_i|\)。只需证\(w^\top (X_i-\gamma_iy_i\dfrac{w}{\|w\|})+b=0\),代入\(\gamma_i\)化简得\(w^\top x_i-y_i\|w\|\cdot \dfrac{y_i(w^\top x_i+b)}{\|w\|}+b=w^\top x_i-(w^\top x_i+b)+b=0\)

因此我们要解决的优化问题就是寻找这样的\((w,b)\),使得margin最小的样本点的margin尽量大。如果这个最小的最大值为正,说明我们不仅能正确分类所有样本,而且还得到了能使得最没有信心的样本尽可能有信心的平面。这个问题可以写作带约束的最优化问题:\(\max\limits_{\tau,w,b}\tau\),subject to \(\dfrac{y_i(w^\top x_i+b)}{\|w\|}\geq \tau\)。这等价于\(\max\limits_{\tau,w,b}\dfrac \tau {\|w\|}\),subject to \(y_i(w^\top x_i+b)\geq \tau\)。假设这个问题的最优解为\((\tau_0,w_0,b_0)\),那么对于任意的\(\alpha\)一定有\((\alpha\tau_0,\alpha w_0,\alpha b_0)\)也是最优解。那么我们总可以取这样的\(\alpha\)使得\(\alpha \tau_0=1\),这说明原问题等价于\(\max\limits_{w,b}\dfrac 1 {\|w\|}\),subject to \(y_i(w^\top x_i+b)\geq 1\)。其中\(\max\limits_{w,b}\dfrac 1 {\|w\|}\)等价于\(\min\limits_{w,b} \|w\|\),为了更方便可以写\(\min\limits_{w,b}\dfrac 1 2 {\|w\|}^2\)。这样最终我们得到了一个经过修改的等价的最优化问题:\(\min\limits_{w,b}\dfrac 1 2 {\|w\|}^2\),subject to \(y_i(w^\top x_i+b)\geq 1\)。其中使得约束取紧的样本点称为支持向量(support vectors),它们是距离平面最近的点,正是它们“支持”着平面周围的空间。

这是一个凸优化问题,它的对偶问题与它的解相同。Lagrange函数\(L(w,b,\alpha)=\dfrac{1}{2}\|w\|^2+\sum\limits_{i}\alpha_i\left[ -y_i(w^\top x_i+b)+1\right]\),求解对偶问题就是在\(\alpha_i>0\)的约束下求\(\min\limits_{w,b}L(w,b,\alpha)\)的最大值。令\(\nabla_{w,b} L(w,b,\alpha)=0\),那么\(\dfrac{\part L}{\part w}=0\)可以推出\(w-\sum\limits_{i}\alpha_i x_iy_i=0\)\(\dfrac{\part L}{\part b}=0\)可以推出\(\sum\limits_{i}\alpha_i y_i=0\)。代入消去\(w\)可得\(\min\limits_{w,b}L(w,b,\alpha)=\dfrac{1}{2}\left( \sum\limits_{i}\alpha_i x_iy_i\right)^2-\sum\limits_{i}\alpha_i\left[y_i\left(\sum\limits_{j}\alpha_j y_j x_j\right)^\top x_i+by_i-1 \right]\)\(=\dfrac{1}{2}\sum\limits_{i}\sum\limits_{j}\alpha_i\alpha_jy_iy_jx_i^\top x_j-\sum\limits_{i}\sum\limits_{j}\alpha_i\alpha_jy_iy_jx^\top_jx_i-b\sum\limits_{i}\alpha_iy_i+\sum\limits_{i}\alpha _i\)\(=\sum\limits_{i}\alpha_i-\dfrac{1}{2}\sum\limits_{i}\sum\limits_{j}\alpha_i\alpha_jy_iy_jx_i^\top x_j\)。所以对偶问题写作\(\max\limits_{\alpha}\sum\limits_{i}\alpha_i-\dfrac{1}{2}\sum\limits_{i}\sum\limits_{j}y_iy_j\alpha_i\alpha_jx_i^\top x_j\),subject to \(\alpha_i\geq 0,\sum\limits_{i}\alpha_i y_i=0\)。(这个优化问题的求解要用到SMO(sequential minimal optimization)算法,此处从略。)

我们求解出了对偶问题对应的\(\alpha\),现在我们可以直接求出原问题中取到最优值的\((w,b)\)。对于\(w\),代入\(w=\sum\limits_{i}\alpha_i y_ix_i\)即可。对于\(b\),我们知道取到最优解时正样本的支持向量与负样本的支持向量到平面的距离相同,因此\(\max\limits_{i:y_i=-1}\{w^\top x_i+b\}+\min\limits_{i:y_i=1}\{w^\top x_i+b\}=0\),由此解得\(b=-\dfrac{\max\limits_{i:y_i=-1}\{w^\top x_i\}+\min\limits_{i:y_i=1}\{w^\top x_i\}}{2}\)。这样我们就最终求得了所要的\(w,b\)了。

更有趣的是,由于我们的平面\((w,b)\)是通过对偶问题求解出\(\alpha\)得到的,我们在用模型做预测时效率会有很大的提升。对于一个新的样本点\((X_i,Y_i)\),做预测的核心就是计算\(w^\top X_i+b\)。现在我们知道\(w=\sum\limits_{i}\alpha_iy_i x_i\),代入可得\(w^\top X_i+b=\sum\limits_{i}\alpha_i y_i x_i^\top X_i+b\)。而根据KKT的互补松弛条件,\(\alpha_i\)对于非支持向量都是等于0的。换言之,为了计算\(\sum\limits_{i}\alpha_i y_i x_i^\top X_i+b\),我们只需考虑所有支持向量\(x_i\)就好了!而支持向量的数量总是非常少的,这使得我们只需做一点点计算就可以完成预测。综上,这个算法被称为支持向量机(Support Vector Machine, SVM)。

处理outliers

在以上SVM的算法中,一两个完全偏离主体的样本(称为outliers,“局外人”)可以对分类面的选取产生很大的影响,我们希望能消除这种影响。为此,我们在优化问题中允许若干样本点在margin上存在误差,但误差的总和不能太大。具体地,我们要做正则化,把优化的问题修改为:\(\min\limits_{\xi,w,b}\dfrac 1 2 {\|w\|}^2+C\sum\limits_{i}\xi_i\),subject to \(y_i(w^\top x_i+b)\geq 1-\xi_i\)\(\xi_i\geq 0\)。这样我们用\(\xi_i\)保证每个样本点都有相应的容错空间,但总的误差因为要使得\(C\sum\limits_{i}\xi_i\)这一项尽量小所以不会太大,其中常数\(C\)可以控制这种约束的力度。(我们可以等价地把带有\(\xi_i\)的“硬约束”转化为软约束,以上优化问题就等价于\(\min\limits_{w,b}\{\dfrac{1}{2}\|w\|^2+C\sum\limits_{i}\max\{0,1-y_i(w^\top x_i+b)\}\}\)。其中,\(\max\{0,1-y_i(w^\top x_i+b)\}\)这一项通常称为Hinge Loss。但下面的分析我们依旧采取硬约束的问题形式。)

同样的,我们写出Lagrange函数\(L(w,b,\xi,\alpha,\beta)=\dfrac{1}{2}\|w\|^2+C\sum\limits_{i}\xi_i-\sum\limits_{i}\alpha_i[y_i(x^\top w+b)-1+\xi_i]-\sum\limits_{i}\beta_i\xi_i\),代入使得\(L(w,b,\xi,\alpha,\beta)\)\(w,b,\xi\)下取到最小值的偏导数为0的条件,写出对偶问题为\(\max\limits_{\alpha} \sum\limits_{i}\alpha_i-\dfrac{1}{2}\sum\limits_{i}\sum\limits_{j}y_iy_j\alpha_i\alpha_jx_i^\top x_j\),subject to \(0\leq \alpha_i\leq C,\sum\limits_{i}\alpha_i y_i=0\)。我们发现,和没有正则化的版本相比,唯一的不同之处在于我们对\(\alpha_i\)有了上界的约束\(\leq C\)

Kernel methods

在线性模型中,我们的预测是基于样本\((x,y)\)的,其中\(x\)是一个\(n\)维向量\((x_1,\cdots,x_n)\)。我们的模型就是给出关于这\(n\)个实数的一个函数。假如我们对这\(n\)个决定模型的因素拓展为更多个,比如我们基于\(x_i\)给出一个可以包含所有三次以内的项的向量(这里简单起见设\(n=2\)\((x_1,x_2,x_1^2,x_1x_2,x_2^2,x_1^3,x_1^2x_2,x_1x_2^2,x_2^3)\)。这个对应关系可以看作\(\R^3\)\(\R^9\)的一个映射\(x\to \phi(x)\),称为feature mapping。如果在模型中把\(x\)全部替换为\(\phi(x)\),那么我们期待模型将有能力对线性不可分的问题也做出较好的预测。\(\phi(x)\)的选取可以是任意的,不同的\(\phi\)的选取会使得模型产生不同的效果。我们的目的是希望经过\(\phi(x)\)的映射以后,可以用原先的线性模型解决非线性问题。

SVM中,核心就是计算\(\sum\limits_{i}\alpha_i y_i x_i^\top x_j\)这一项。那么,在把\(x_i\)用feature mapping映射后我们的目标就是计算\(\sum\limits_{i}\alpha_i y_i \phi(x_i)^\top \phi(x_j)\)。我们会发现,不仅在SVM中,在使用feature mapping之后常常会遇到要计算\(\phi(x_i)^\top \phi(x_j)\)这样的内积的情况。于是,我们定义feature mapping \(\phi\)下的kernel是\(\mathcal{X}\times \mathcal{X}\to \R\)的映射:\(K(x,y):=\phi(x)^\top \phi(y)\)。这样,\(\sum\limits_{i}\alpha_i y_i \phi(x_i)^\top \phi(x_j)\)就写作\(\sum\limits_{i}\alpha _iy_iK(x_i,x_j)\)

在实际中,计算\(\phi(x)\)的开销往往是巨大的,而计算\(K(x,y)\)却可能比\(\phi(x)\)\(\phi(y)\)更便捷,原因在于我们最终只取出了内积而并不需要完全了解\(\phi\)的构造。而我们发现,在SVM中我们只需用到kernel而从不会单独使用某个\(\phi(x)\)。这使得我们可以从定义kernel出发,检验这个kernel确实能被写成某个feature mapping的内积形式。例如,假如\(K(x,y)=(x^\top y)^2\),那么由于\((x^\top y)^2=\left(\sum\limits_{i}x_iy_i\right)^2=\)\(\left(\sum\limits_{i}x_iy_i\right)\left(\sum\limits_{j}x_jy_j\right)=\sum\limits_{i}\sum\limits_{j}(x_ix_j)(y_iy_j)\),所以令\(\phi(x)=(x_1x_1,\cdots,x_1x_n,x_2x_1,\cdots,x_2x_n,\cdots,\cdots,x_nx_1,\cdots,x_nx_n)\),就有\(K(x,y)=\phi(x)^\top \phi(y)\)。可见,尽管对于某个\(x\)计算\(\phi(x)\)\(O(n^2)\)的,但计算\(K(x,y)\)却是\(O(n)\)的,因为我们可以先计算出\(x^\top y\)再对实数做平方。

更一般的,我们要问如何判断\(K(x,y)\)是一个well-defined的kernel呢(即它能被写成某个\(\phi\)的内积形式呢)?当\(x,y\)只能取有限个向量时,我们可以定义kernel矩阵\(K:\R^n\times \R^n\to \R\)。此时,Mercer定理给出了判断kernel合法性的充分必要条件:矩阵\(K\)是对称且半正定的。我们验证必要性,充分性从略。如果存在\(\phi\)使得\(K(x_i,x_j)=\phi(x_i)^\top \phi(x_j)\),那么显然\(K(x_i,x_j)=K(x_j,x_i)\);其次,\(\forall z\in \R^n,z^\top Kz=\sum\limits_{i}\sum\limits_{j}K_{ij}z_iz_j\)\(=\sum\limits_{i}\sum\limits _{j}z_i\phi(x_i)^\top \phi(x_j)z_j\)\(=\sum\limits_{i}\sum\limits_{j}\sum\limits_{k}z_i\left(\phi(x_i)^{(k)}\phi(x_j)^{(k)}\right)z_j\)\(=\sum\limits_{k}\left(\sum\limits_{i}\sum\limits_{j}z_i\phi(x_i)^{(k)}\cdot z_j\phi(x_j)^{(k)}\right)\)\(=\sum\limits_{k}\left(\sum\limits_{i}z_i\phi(x_i)^{(k)}\right)^2\geq 0\)

SVM中常用的kernel有:RBF kernel(Radial Basis Function,径向基函数,也称为为Gaussion kernel):\(K(x_i,x_j)=e^{-\frac{\|x_i-x_j\|^2}{2\sigma^2}}\);Simple polynomial kernel:\(K(x_i,x_j)=(x_i^\top x_j)^d\);Cosine similarity kernel:\(K(x_i,x_j)=\dfrac{x_i^\top x_j}{\|x_i\|\|x_j\|}\);Sigmoid kernel:\(K(x_i,x_j)=\tanh(\alpha x_i^\top x_j+c)\),其中\(\tanh(x)=\dfrac{1-e^{-2a}}{1+e^{-2a}}\)

posted @ 2024-05-03 00:35  DennyQi  阅读(19)  评论(0编辑  收藏  举报