监督学习 · 07

支持向量机

从函数间隔到几何间隔,从硬间隔到软间隔,从线性到核函数——完整推导 SVM 全部理论。

55 min read

线性可分支持向量机与硬间隔最大化

支持向量机(Support Vector Machine, SVM)是统计学习中最优美的模型之一。它的核心思想极其简洁:在所有能正确分类的超平面中,选择间隔最大的那一个。这一节我们从线性可分的最简单情形出发,一步步建立硬间隔最大化的完整理论——从问题的提出,到对偶形式的推导,再到解的存在唯一性证明。

线性可分支持向量机

线性可分性的严格定义

定义(线性可分性) 给定训练数据集 T={(x1,y1),(x2,y2),,(xN,yN)}T = \{(\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), \ldots, (\mathbf{x}_N, y_N)\},其中 xiRn\mathbf{x}_i \in \mathbb{R}^nyi{+1,1}y_i \in \{+1, -1\}i=1,2,,Ni = 1, 2, \ldots, N。若存在某个超平面 SS

wx+b=0\mathbf{w} \cdot \mathbf{x} + b = 0

能将数据集的正实例点和负实例点完全正确地划分到超平面的两侧,即对所有 yi=+1y_i = +1 的实例有 wxi+b>0\mathbf{w} \cdot \mathbf{x}_i + b > 0,对所有 yi=1y_i = -1 的实例有 wxi+b<0\mathbf{w} \cdot \mathbf{x}_i + b < 0,则称数据集 TT线性可分的(linearly separable)

等价地,线性可分意味着存在 (w,b)(\mathbf{w}, b) 使得:

yi(wxi+b)>0,i=1,2,,Ny_i(\mathbf{w} \cdot \mathbf{x}_i + b) > 0, \quad \forall\, i = 1, 2, \ldots, N

直觉上,线性可分就是说在特征空间里能找到一张"平板"(超平面),把两类点完全隔开,没有任何一个点被错分。

超平面与决策函数

超平面 wx+b=0\mathbf{w} \cdot \mathbf{x} + b = 0 由法向量 wRn\mathbf{w} \in \mathbb{R}^n 和截距 bRb \in \mathbb{R} 唯一确定。法向量 w\mathbf{w} 指向超平面的"正侧",垂直于超平面本身;bb 控制超平面离原点的偏移量——原点到超平面的有符号距离为 b/wb / \|\mathbf{w}\|

给定超平面后,对任意新输入 x\mathbf{x},分类决策函数为:

f(x)=sign(wx+b)f(\mathbf{x}) = \text{sign}(\mathbf{w} \cdot \mathbf{x} + b)

几何意义很清晰:看新点落在超平面的哪一侧,就归为哪一类。

线性可分支持向量机的定义

对于线性可分数据,能正确分类的超平面有无穷多个(感知机的收敛解就取决于初始化)。线性可分支持向量机要在这无穷多个解中找到一个"最优"的——间隔最大的那个。

定义(线性可分支持向量机) 给定线性可分训练数据集 TT,通过间隔最大化学习得到的分离超平面为 wx+b=0\mathbf{w}^* \cdot \mathbf{x} + b^* = 0,以及对应的分类决策函数 f(x)=sign(wx+b)f(\mathbf{x}) = \text{sign}(\mathbf{w}^* \cdot \mathbf{x} + b^*),称为线性可分支持向量机

函数间隔与几何间隔

要量化"间隔"到底有多大,我们需要精确定义距离的度量方式。

函数间隔

定义(函数间隔) 对于给定超平面 (w,b)(\mathbf{w}, b),定义超平面关于样本点 (xi,yi)(\mathbf{x}_i, y_i)函数间隔为:

γ^i=yi(wxi+b)\hat{\gamma}_i = y_i(\mathbf{w} \cdot \mathbf{x}_i + b)

定义超平面关于训练数据集 TT 的函数间隔为所有样本点函数间隔的最小值:

γ^=mini=1,,Nγ^i\hat{\gamma} = \min_{i=1,\ldots,N} \hat{\gamma}_i

函数间隔的符号反映分类的正确性:γ^i>0\hat{\gamma}_i > 0 时分类正确,γ^i<0\hat{\gamma}_i < 0 时分类错误。其绝对值可以相对地表示点距超平面的远近——值越大,"确信度"越高。

函数间隔的缺陷:尺度不变性

函数间隔有一个根本缺陷:不具有尺度不变性。将 w\mathbf{w}bb 同时乘以正常数 λ\lambda,超平面本身不变,但函数间隔变成了原来的 λ\lambda 倍:

yi(λwxi+λb)=λyi(wxi+b)=λγ^iy_i(\lambda\mathbf{w} \cdot \mathbf{x}_i + \lambda b) = \lambda \cdot y_i(\mathbf{w} \cdot \mathbf{x}_i + b) = \lambda\hat{\gamma}_i

仅仅通过放大 w\mathbf{w} 的模长,就能让函数间隔任意大——但超平面和它与数据点的实际距离根本没变。因此,函数间隔不能直接作为最大化的目标。

几何间隔

定义(几何间隔) 对于给定超平面 (w,b)(\mathbf{w}, b),定义超平面关于样本点 (xi,yi)(\mathbf{x}_i, y_i)几何间隔为:

γi=yi(wwxi+bw)=γ^iw\gamma_i = y_i\left(\frac{\mathbf{w}}{\|\mathbf{w}\|} \cdot \mathbf{x}_i + \frac{b}{\|\mathbf{w}\|}\right) = \frac{\hat{\gamma}_i}{\|\mathbf{w}\|}

定义超平面关于训练数据集 TT 的几何间隔为 γ=miniγi\gamma = \min_i \gamma_i

几何间隔就是点到超平面的有符号欧氏距离。它对 (w,b)(\mathbf{w}, b) 的等比例缩放不敏感:

yi(λwxi+λb)λw=λyi(wxi+b)λw=γi\frac{y_i(\lambda\mathbf{w} \cdot \mathbf{x}_i + \lambda b)}{\|\lambda\mathbf{w}\|} = \frac{\lambda \cdot y_i(\mathbf{w} \cdot \mathbf{x}_i + b)}{\lambda\|\mathbf{w}\|} = \gamma_i

两种间隔的关系

γi=γ^iw,γ=γ^w\gamma_i = \frac{\hat{\gamma}_i}{\|\mathbf{w}\|}, \quad \gamma = \frac{\hat{\gamma}}{\|\mathbf{w}\|}

w=1\|\mathbf{w}\| = 1 时两者相等。函数间隔是"未归一化的距离",几何间隔才是"真正的距离"。

间隔最大化

最大间隔分离超平面的直觉

为什么要最大化间隔?

  1. 鲁棒性:间隔越大,决策边界离最近的训练点越远,对测试数据的扰动越不敏感。
  2. 泛化能力:VC 维理论表明,间隔越大,分类器的 VC 维越低,泛化误差上界越紧。

优化问题的逐步推导

目标:最大化几何间隔,同时要求每个样本的几何间隔都不小于 γ\gamma

maxw,bγ^ws.t.yi(wxi+b)γ^,i=1,,N\max_{\mathbf{w}, b} \quad \frac{\hat{\gamma}}{\|\mathbf{w}\|} \quad \text{s.t.} \quad y_i(\mathbf{w} \cdot \mathbf{x}_i + b) \geq \hat{\gamma}, \quad i = 1, \ldots, N

约束的规范化:令函数间隔为 1。 由于函数间隔有缩放自由度,我们令 γ^=1\hat{\gamma} = 1(将 (w,b)(\mathbf{w}, b) 缩放为 (w/γ^,b/γ^)(\mathbf{w}/\hat{\gamma}, b/\hat{\gamma}) 即可)。此时:

  • 约束变为 yi(wxi+b)1y_i(\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1
  • 几何间隔 γ=1/w\gamma = 1 / \|\mathbf{w}\|
  • 最大化 γ\gamma 等价于最小化 12w2\frac{1}{2}\|\mathbf{w}\|^2

最终的凸二次规划形式

原始问题(线性可分 SVM)

minw,b12w2\min_{\mathbf{w}, b} \quad \frac{1}{2}\|\mathbf{w}\|^2 s.t.yi(wxi+b)1,i=1,2,,N\text{s.t.} \quad y_i(\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1, \quad i = 1, 2, \ldots, N

这是一个凸二次规划(QP):目标函数是严格凸的二次函数,约束是线性不等式,全局最优解唯一。

解的存在性与唯一性

定理(存在唯一性) 若训练数据集 TT 线性可分,则原始问题存在唯一的最优解 (w,b)(\mathbf{w}^*, b^*)

证明要点:

  • 存在性:可行域非空(线性可分保证)且目标函数下有界,连续函数在紧集上取到最小值。
  • w\mathbf{w}^* 的唯一性:若存在两个最优解 w1w2\mathbf{w}_1 \neq \mathbf{w}_2,其中点 (w1+w2)/2(\mathbf{w}_1+\mathbf{w}_2)/2 可行且 (w1+w2)/2<w1=w2\|(\mathbf{w}_1+\mathbf{w}_2)/2\| < \|\mathbf{w}_1\| = \|\mathbf{w}_2\|(范数严格凸性),与最优性矛盾。
  • bb^* 的唯一性:由正类和负类支持向量的约束取等号直接确定。\blacksquare

试试切换下面的三条线,观察间隔宽度的差异:

间隔宽度 (margin)1.61
三条线都能分开数据,但 SVM 选间隔最大的那条。黄色圈标出的是支持向量——决定边界位置的关键点。

那些刚好满足 yi(wxi+b)=1y_i(\mathbf{w} \cdot \mathbf{x}_i + b) = 1 的点叫支持向量——它们"撑住"间隔边界。

对偶问题的算法

将原始问题转化为对偶问题有三大好处:(1)揭示解的稀疏结构;(2)数据只以内积形式出现,为核技巧打开大门;(3)当 NnN \ll n 时对偶更高效。

构造拉格朗日函数

对每个约束引入乘子 αi0\alpha_i \geq 0

L(w,b,α)=12w2i=1Nαi[yi(wxi+b)1]L(\mathbf{w}, b, \boldsymbol{\alpha}) = \frac{1}{2}\|\mathbf{w}\|^2 - \sum_{i=1}^{N} \alpha_i \left[y_i(\mathbf{w} \cdot \mathbf{x}_i + b) - 1\right]

由 Slater 条件,强对偶性成立:minw,bmaxα0L=maxα0minw,bL\min_{\mathbf{w},b}\max_{\boldsymbol{\alpha}\geq 0} L = \max_{\boldsymbol{\alpha}\geq 0} \min_{\mathbf{w},b} L

w\mathbf{w}bb 求极小

wL=wi=1Nαiyixi=0w=i=1Nαiyixi\nabla_{\mathbf{w}} L = \mathbf{w} - \sum_{i=1}^{N}\alpha_i y_i \mathbf{x}_i = 0 \quad \Rightarrow \quad \mathbf{w}^* = \sum_{i=1}^{N}\alpha_i y_i \mathbf{x}_i Lb=i=1Nαiyi=0i=1Nαiyi=0\frac{\partial L}{\partial b} = -\sum_{i=1}^{N}\alpha_i y_i = 0 \quad \Rightarrow \quad \sum_{i=1}^{N}\alpha_i y_i = 0

第一个等式意义深远:最优权重是训练样本的线性组合,系数为 αiyi\alpha_i y_i

代回得到对偶问题

w\mathbf{w}^* 代入 LL 并化简:

12w2=12i,jαiαjyiyj(xixj)\frac{1}{2}\|\mathbf{w}^*\|^2 = \frac{1}{2}\sum_{i,j}\alpha_i\alpha_j y_i y_j (\mathbf{x}_i \cdot \mathbf{x}_j) iαiyi(wxi)=i,jαiαjyiyj(xixj)\sum_i \alpha_i y_i (\mathbf{w}^* \cdot \mathbf{x}_i) = \sum_{i,j}\alpha_i\alpha_j y_i y_j (\mathbf{x}_i \cdot \mathbf{x}_j)

两项相减加上 αi\sum \alpha_i,得到对偶目标:

对偶问题

maxαi=1Nαi12i=1Nj=1Nαiαjyiyj(xixj)\max_{\boldsymbol{\alpha}} \quad \sum_{i=1}^{N}\alpha_i - \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_j y_i y_j (\mathbf{x}_i \cdot \mathbf{x}_j) s.t.i=1Nαiyi=0,αi0,i=1,,N\text{s.t.} \quad \sum_{i=1}^{N}\alpha_i y_i = 0, \quad \alpha_i \geq 0, \quad i = 1, \ldots, N

关键特征:数据只以内积 xixj\mathbf{x}_i \cdot \mathbf{x}_j 出现——将内积替换为核函数就能做非线性分类。

KKT 条件与互补松弛

在最优解处,互补松弛条件:

αi[yi(wxi+b)1]=0,i=1,,N\alpha_i^*\left[y_i(\mathbf{w}^* \cdot \mathbf{x}_i + b^*) - 1\right] = 0, \quad i = 1, \ldots, N

这意味着:

  • αi=0\alpha_i^* = 0:点在间隔外,不影响决策边界(非支持向量)。
  • αi>0\alpha_i^* > 0yi(wxi+b)=1y_i(\mathbf{w}^* \cdot \mathbf{x}_i + b^*) = 1,点恰在间隔边界上(支持向量)。

只有支持向量对最终分类超平面有贡献。 删掉非支持向量,最优解不变。这就是 SVM 名字的由来和模型稀疏性的数学根源。

从对偶解恢复原始解

w=iSVαiyixi\mathbf{w}^* = \sum_{i \in SV}\alpha_i^* y_i \mathbf{x}_i b=yjiSVαiyi(xixj)(取任一支持向量 jb^* = y_j - \sum_{i \in SV}\alpha_i^* y_i (\mathbf{x}_i \cdot \mathbf{x}_j) \quad \text{(取任一支持向量 } j \text{)}

对偶形式的决策函数

f(x)=sign(iSVαiyi(xix)+b)f(\mathbf{x}) = \text{sign}\left(\sum_{i \in SV}\alpha_i^* y_i (\mathbf{x}_i \cdot \mathbf{x}) + b^*\right)

预测只需计算新样本与支持向量的内积,计算量与支持向量数成正比。


线性支持向量机与软间隔最大化

硬间隔要求所有点正确分类且在间隔外——现实数据有噪声,一两个离群点就可能让问题无解或扭曲边界。本节引入松弛变量和惩罚参数,得到实际应用中真正使用的线性支持向量机

线性支持向量机

松弛变量的引入

对每个样本引入松弛变量 ξi0\xi_i \geq 0,将硬约束放松为:

yi(wxi+b)1ξi,ξi0y_i(\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0

ξi\xi_i 的几何含义:

  • ξi=0\xi_i = 0:样本在间隔边界外(满足硬约束)
  • 0<ξi<10 < \xi_i < 1:在间隔内但正确分类
  • ξi=1\xi_i = 1:恰在决策超平面上
  • ξi>1\xi_i > 1:被错误分类

软间隔优化问题

minw,b,ξ12w2+Ci=1Nξi\min_{\mathbf{w}, b, \boldsymbol{\xi}} \quad \frac{1}{2}\|\mathbf{w}\|^2 + C \sum_{i=1}^{N} \xi_i s.t.yi(wxi+b)1ξi,ξi0,i=1,,N\text{s.t.} \quad y_i(\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0, \quad i = 1, \ldots, N

C>0C > 0 的作用(偏差-方差权衡):

  • CC 大 → 对误分类惩罚严厉,间隔窄,容易过拟合
  • CC 小 → 容许更多违反,间隔宽,可能欠拟合
  • CC \to \infty 退化为硬间隔 SVM

拖动下面的滑块,观察 CC 对间隔和决策边界的影响:

正则化参数 C = 3.2log₁₀(C) = 0.5
C=0.01(宽容)C=1000(严格)
间隔宽度
1.18
违反点数
16
训练误差
2/30
类别 0类别 1支持向量违反点
拖动滑块改变 C 值:C 小则间隔宽、容忍更多违反(欠拟合);C 大则间隔窄、严格拟合训练数据(过拟合风险)。

对偶问题的推导

构造拉格朗日函数

引入两组乘子:αi0\alpha_i \geq 0(对应主约束)和 μi0\mu_i \geq 0(对应 ξi0\xi_i \geq 0):

L=12w2+Ciξiiαi[yi(wxi+b)1+ξi]iμiξiL = \frac{1}{2}\|\mathbf{w}\|^2 + C\sum_i \xi_i - \sum_i \alpha_i \left[ y_i(\mathbf{w} \cdot \mathbf{x}_i + b) - 1 + \xi_i \right] - \sum_i \mu_i \xi_i

对原始变量求偏导

Lw=0:w=i=1Nαiyixi\frac{\partial L}{\partial \mathbf{w}} = 0: \quad \mathbf{w} = \sum_{i=1}^N \alpha_i y_i \mathbf{x}_i Lb=0:i=1Nαiyi=0\frac{\partial L}{\partial b} = 0: \quad \sum_{i=1}^N \alpha_i y_i = 0 Lξi=0:Cαiμi=0μi=Cαi\frac{\partial L}{\partial \xi_i} = 0: \quad C - \alpha_i - \mu_i = 0 \quad \Rightarrow \quad \mu_i = C - \alpha_i

μi0\mu_i \geq 0αiC\alpha_i \leq C。这就是软间隔的箱约束0αiC0 \leq \alpha_i \leq C

代入化简

所有含 ξi\xi_i 的项因为 Cαiμi=0C - \alpha_i - \mu_i = 0 完全消去。最终得到:

软间隔 SVM 的对偶问题:

maxαi=1Nαi12i=1Nj=1Nαiαjyiyj(xixj)\max_{\boldsymbol{\alpha}} \quad \sum_{i=1}^N \alpha_i - \frac{1}{2}\sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j (\mathbf{x}_i \cdot \mathbf{x}_j) s.t.i=1Nαiyi=0,0αiC,i=1,,N\text{s.t.} \quad \sum_{i=1}^N \alpha_i y_i = 0, \quad 0 \leq \alpha_i \leq C, \quad i = 1, \ldots, N

与硬间隔目标函数完全相同,唯一区别是 αi\alpha_i 多了上界 CC

支持向量

利用 KKT 条件,训练样本分为三类:

αi\alpha_i^*ξi\xi_i^*样本位置身份
=0= 0=0= 0间隔外:yif(xi)>1y_i f(\mathbf{x}_i) > 1非支持向量
(0,C)\in (0, C)=0= 0间隔边界上:yif(xi)=1y_i f(\mathbf{x}_i) = 1自由支持向量
=C= C>0> 0间隔内或错分:yif(xi)<1y_i f(\mathbf{x}_i) < 1有界支持向量

自由支持向量0<αi<C0 < \alpha_i < C)最为重要——用它们计算 bb^*

b=yji=1Nαiyi(xixj),j{i:0<αi<C}b^* = y_j - \sum_{i=1}^N \alpha_i^* y_i (\mathbf{x}_i \cdot \mathbf{x}_j), \quad j \in \{i: 0 < \alpha_i^* < C\}

有界支持向量αi=C\alpha_i = C)的影响力被限制在 CC——这保证了模型对离群值的鲁棒性。

合页损失函数与无约束优化

等价的无约束形式

定理(等价性) 软间隔 SVM 等价于:

minw,bCi=1N[1yi(wxi+b)]++12w2\min_{\mathbf{w}, b} \quad C \sum_{i=1}^N \left[1 - y_i(\mathbf{w} \cdot \mathbf{x}_i + b)\right]_+ + \frac{1}{2}\|\mathbf{w}\|^2

其中 [z]+=max(0,z)[z]_+ = \max(0, z) 就是合页损失(hinge loss)

证明: 在最优解处 ξi=max(0,1yi(wxi+b))=[1yif(xi)]+\xi_i^* = \max(0, 1 - y_i(\mathbf{w} \cdot \mathbf{x}_i + b)) = [1 - y_i f(\mathbf{x}_i)]_+,代入原目标函数即得。\square

合页损失的性质

记函数间隔 m=yf(x)m = y \cdot f(\mathbf{x})

hinge(m)=max(0,1m)={0m11mm<1\ell_{\text{hinge}}(m) = \max(0, 1 - m) = \begin{cases} 0 & m \geq 1 \\ 1 - m & m < 1 \end{cases}
  • m1m \geq 1 时损失为零——不只分类正确,还要有足够"间隔"
  • 是 0-1 损失的凸上界:[1m]+1[m0][1-m]_+ \geq \mathbb{1}[m \leq 0]
  • 不处处可微,但处处有次梯度

与其他损失的对比

损失函数表达式对应模型
0-1 损失1[m0]\mathbb{1}[m \leq 0]理想但非凸
合页损失max(0,1m)\max(0, 1-m)SVM
指数损失eme^{-m}AdaBoost
对数损失log(1+em)\log(1 + e^{-m})Logistic 回归

正则化框架的统一视角

minw,bi=1N(yi,f(xi))经验风险+λw2正则化\min_{\mathbf{w}, b} \quad \underbrace{\sum_{i=1}^N \ell(y_i, f(\mathbf{x}_i))}_{\text{经验风险}} + \underbrace{\lambda \|\mathbf{w}\|^2}_{\text{正则化}}
  • Hinge + L2 = SVM
  • Logistic + L2 = Logistic 回归(weight decay)
  • Hinge + L1 = 稀疏 SVM

深度学习中的 "loss + weight decay" 与 SVM 在数学结构上完全同构。

SMO 算法

对偶问题的标准求解方法是 SMO(Sequential Minimal Optimization, Platt 1998):每次只更新两个 αi\alpha_i(等式约束要求至少改两个变量)。

核心更新公式:

αjnew=αjold+yj(EiEj)η,η=Kii+Kjj2Kij\alpha_j^{\text{new}} = \alpha_j^{\text{old}} + \frac{y_j(E_i - E_j)}{\eta}, \quad \eta = K_{ii} + K_{jj} - 2K_{ij}

然后剪切到 [L,H][0,C][L, H] \cap [0, C] 的合法范围内。

下面的可视化展示了 SMO 的逐步求解过程:

步骤 1 / 7

选取 C、D 为工作对,初始化 α₃=0.3, α₄=0.3

ABCDEF

拉格朗日乘子 α

α10.00
α20.00
α30.30
α40.30
α50.00
α60.00

约束 α3y3 + α4y4 = const

α3α4
y = -1y = +1当前工作对支持向量 (α>0)
SMO 每次选取一对 α 进行优化,沿约束线移动到最优点。虚线圈标出当前工作对,黄色实圈为已激活的支持向量。

SMO 的优雅之处:不需要矩阵运算,内存友好,收敛快。这是 libsvm 和 sklearn 底层使用的算法。


非线性支持向量机与核函数

线性分类器只能画超平面。对环形分布、XOR 型数据,无论怎么调参都无法线性分开。核心思想:把数据映射到高维空间,使其线性可分,然后在高维做线性 SVM。 核函数让这个过程在计算上可行——你永远不需要显式计算高维坐标。

核技巧

从 XOR 问题说起

四个点:(1,1)+1(1,1) \to +1(1,1)+1(-1,-1) \to +1(1,1)1(1,-1) \to -1(1,1)1(-1,1) \to -1。无论怎么画直线都分不开。

定义映射 ϕ(x)=(x12,2x1x2,x22)\phi(\mathbf{x}) = (x_1^2, \sqrt{2}\,x_1 x_2, x_2^2),四点变为:

ϕ(1,1)=(1,2,1),ϕ(1,1)=(1,2,1)\phi(1,1) = (1, \sqrt{2}, 1), \quad \phi(-1,-1) = (1, \sqrt{2}, 1) ϕ(1,1)=(1,2,1),ϕ(1,1)=(1,2,1)\phi(1,-1) = (1, -\sqrt{2}, 1), \quad \phi(-1,1) = (1, -\sqrt{2}, 1)

新空间中超平面 z2=0z_2 = 0 完美分开两类。非线性问题在特征空间中变成了线性问题。

核函数的定义

定义。 函数 K:X×XRK: \mathcal{X} \times \mathcal{X} \to \mathbb{R} 称为核函数,如果存在映射 ϕ:XH\phi: \mathcal{X} \to \mathcal{H} 使得:

K(x,z)=ϕ(x),ϕ(z)K(\mathbf{x}, \mathbf{z}) = \langle \phi(\mathbf{x}), \phi(\mathbf{z}) \rangle

核技巧的本质

SVM 对偶问题中数据只通过内积 xixj\mathbf{x}_i \cdot \mathbf{x}_j 出现。将内积替换为 K(xi,xj)=ϕ(xi),ϕ(xj)K(\mathbf{x}_i, \mathbf{x}_j) = \langle\phi(\mathbf{x}_i), \phi(\mathbf{x}_j)\rangle,就等价于在高维特征空间中做线性 SVM——但无需显式计算 ϕ(x)\phi(\mathbf{x})

具体例子

x,zR2\mathbf{x}, \mathbf{z} \in \mathbb{R}^2,映射 ϕ(x)=(x12,2x1x2,x22)\phi(\mathbf{x}) = (x_1^2, \sqrt{2}\,x_1 x_2, x_2^2) 的内积:

ϕ(x),ϕ(z)=x12z12+2x1x2z1z2+x22z22=(xz)2\langle\phi(\mathbf{x}), \phi(\mathbf{z})\rangle = x_1^2 z_1^2 + 2x_1 x_2 z_1 z_2 + x_2^2 z_2^2 = (\mathbf{x} \cdot \mathbf{z})^2

核函数 K(x,z)=(xz)2K(\mathbf{x}, \mathbf{z}) = (\mathbf{x} \cdot \mathbf{z})^2 只需 O(d)O(d) 计算,等价于在三维特征空间做内积。对一般 dd 维输入和 pp 次多项式,特征空间维度为 (d+pp)\binom{d+p}{p}(指数级),但核计算始终 O(d)O(d)

下面的可视化展示了核技巧如何把非线性可分数据"拉直":

输入空间 (2D)

特征空间 φ(x) = (x₁², x₂², √2·x₁x₂)

类别 0(内圈)类别 1(外圈)决策边界
核技巧将线性不可分数据映射到高维空间,使其变得线性可分。左图为输入空间中的决策边界,右图为特征空间中的线性分离。

正定核

什么函数有资格当核函数?Mercer 定理给出完整回答。

Gram 矩阵与正定性

定义(正定核)。 K:X×XRK: \mathcal{X} \times \mathcal{X} \to \mathbb{R} 称为正定核,如果满足:

  1. 对称性K(x,z)=K(z,x)K(\mathbf{x}, \mathbf{z}) = K(\mathbf{z}, \mathbf{x})
  2. 正半定性:对任意 {x1,,xn}\{x_1, \ldots, x_n\}c1,,cnRc_1, \ldots, c_n \in \mathbb{R}
i=1nj=1ncicjK(xi,xj)0\sum_{i=1}^n \sum_{j=1}^n c_i c_j K(x_i, x_j) \geq 0

即 Gram 矩阵 Gij=K(xi,xj)G_{ij} = K(x_i, x_j) 半正定。

Mercer 定理

定理。 KK 是合法核函数     \iff KK 是正定核     \iff 对任何有限样本集,Gram 矩阵半正定。

必要性证明:K(x,z)=ϕ(x),ϕ(z)K(\mathbf{x}, \mathbf{z}) = \langle\phi(\mathbf{x}), \phi(\mathbf{z})\rangle,则:

i,jcicjK(xi,xj)=iciϕ(xi)20\sum_{i,j} c_i c_j K(x_i, x_j) = \left\| \sum_i c_i \phi(x_i) \right\|^2 \geq 0

充分性(构造性): 定义 ϕ(x)=K(,x)\phi(x) = K(\cdot, x)(映射为函数),则 ϕ(x),ϕ(z)=K(x,z)\langle\phi(x), \phi(z)\rangle = K(x,z)(再生性质)。构造出的空间称为再生核 Hilbert 空间(RKHS)

核函数的运算封闭性

  • 线性组合a1K1+a2K2a_1 K_1 + a_2 K_2ai0a_i \geq 0)仍是正定核
  • 乘积K1K2K_1 \cdot K_2 仍是正定核(Schur 乘积定理)
  • 极限:逐点收敛的正定核序列的极限仍是正定核
  • 指数exp(K)\exp(K) 仍是正定核

这意味着你可以通过组合已知核构造新核,无需显式写出 ϕ\phi

常用核函数

线性核

K(x,z)=xzK(\mathbf{x}, \mathbf{z}) = \mathbf{x} \cdot \mathbf{z}

特征空间 = 输入空间。适用于高维稀疏数据(文本 TF-IDF、基因组),dNd \gg N 时通常已够用。

多项式核

K(x,z)=(γxz+r)pK(\mathbf{x}, \mathbf{z}) = (\gamma \,\mathbf{x} \cdot \mathbf{z} + r)^p

特征空间维度 (d+pp)\binom{d+p}{p}p=2,3p=2,3 最常见,pp 太大易过拟合。适合存在特征交互的场景。

高斯 RBF 核

K(x,z)=exp ⁣(γxz2)K(\mathbf{x}, \mathbf{z}) = \exp\!\left( -\gamma \|\mathbf{x} - \mathbf{z}\|^2 \right)

对应无穷维特征空间。 证明:展开 exp(2γxz)=n=0(2γ)nn!(xz)n\exp(2\gamma\,\mathbf{x}\cdot\mathbf{z}) = \sum_{n=0}^{\infty} \frac{(2\gamma)^n}{n!}(\mathbf{x}\cdot\mathbf{z})^n,每一项是 nn 次多项式核,无穷求和对应无穷维特征。

γ\gamma 的含义:

  • γ\gamma 大 → 核衰减快,决策边界曲折,易过拟合
  • γ\gamma 小 → 核衰减慢,边界平滑,趋近线性

RBF 是最常用的默认选择,能逼近任意连续决策边界。

Sigmoid 核

K(x,z)=tanh(γxz+r)K(\mathbf{x}, \mathbf{z}) = \tanh(\gamma\,\mathbf{x} \cdot \mathbf{z} + r)

与两层神经网络的联系:每个隐藏单元计算 tanh(wx+b)\tanh(\mathbf{w}\cdot\mathbf{x}+b)。注意:不是对所有参数都正定,已较少使用。

核函数对比

核函数特征空间维度超参数典型场景
线性核dd文本、高维稀疏
多项式核(d+pp)\binom{d+p}{p}γ,r,p\gamma, r, p图像特征
RBF 核\inftyγ\gamma通用默认
Sigmoid 核不确定γ,r\gamma, r已少用

选择指南: 先试线性核 → 默认 RBF → 有领域知识时用多项式。数据必须先标准化。用网格搜索 + 交叉验证选 CCγ\gamma

非线性支持向量分类机

完整算法

输入: 训练集 TT,核函数 KK,惩罚参数 CC

步骤 1. 求解对偶问题:

minα12i,jαiαjyiyjK(xi,xj)iαi\min_{\boldsymbol{\alpha}} \frac{1}{2}\sum_{i,j} \alpha_i \alpha_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j) - \sum_i \alpha_i s.t.iαiyi=0,0αiC\text{s.t.} \quad \sum_i \alpha_i y_i = 0, \quad 0 \leq \alpha_i \leq C

步骤 2. 计算阈值(取自由支持向量平均):

b=1SfreejSfree(yjiαiyiK(xi,xj))b^* = \frac{1}{|\mathcal{S}_{\text{free}}|}\sum_{j \in \mathcal{S}_{\text{free}}} \left(y_j - \sum_i \alpha_i^* y_i K(\mathbf{x}_i, \mathbf{x}_j)\right)

步骤 3. 决策函数:

f(x)=sign ⁣(iSVαiyiK(xi,x)+b)f(\mathbf{x}) = \text{sign}\!\left( \sum_{i \in SV} \alpha_i^* y_i K(\mathbf{x}_i, \mathbf{x}) + b^* \right)

预测复杂度:O(SVd)O(|SV| \cdot d),只需遍历支持向量。

核化 SMO

SMO 直接适用于核化版本——将 xixj\mathbf{x}_i \cdot \mathbf{x}_j 替换为 K(xi,xj)K(\mathbf{x}_i, \mathbf{x}_j)

  • 误差:Ei=kSVαkykK(xk,xi)+byiE_i = \sum_{k \in SV} \alpha_k y_k K(\mathbf{x}_k, \mathbf{x}_i) + b - y_i
  • 二阶项:η=Kii+Kjj2Kij\eta = K_{ii} + K_{jj} - 2K_{ij}ϕ(xi)ϕ(xj)\phi(\mathbf{x}_i) - \phi(\mathbf{x}_j) 在特征空间中的范数平方)

计算复杂度

阶段复杂度
训练(SMO)O(N2d)O(N^2 d) ~ O(N3d)O(N^3 d)
预测(单样本)O(SVd)O(\|SV\| \cdot d)
核矩阵存储O(N2)O(N^2)(通常用 LRU 缓存)

大规模时的替代方案:随机 Fourier 特征(Rahimi & Recht 2007)将 RBF 核近似为有限维映射,转化为线性 SVM。

多类分类

SVM 本质是二分类器。多类扩展:

  • 一对一(OvO)(K2)\binom{K}{2} 个分类器,投票。libsvm/sklearn 默认。
  • 一对多(OvA)KK 个分类器,取 fi(x)f_i(\mathbf{x}) 最大的类。