摘要
对于Support Vector Machine(SVM)你是否停留在调用相关算法包的层面?是否每次想要加深对SVM的理解时却被枯燥的公式劝退?本文将以SVM发展历史时间线为文章组织结构,让您理解SVM基本原理、发展的内在需求以及其公式背后的意义。
0 引言
SVM自1964年被Vapnik等人提出以来,至今已经成为了重要的基准(Base Line)分类器之一。SVM最开始是被作为线性分类器提出来的,其最大间隔(Max Margin)的算法特性 [ 1 ] ^{[1]} [1]使得SVM拥有非常好的泛化能力,但由于在现实世界中数据并不是都拥有如此强的规律(存在许多噪音),因此研究者们又提出了软间隔(Soft Margin)来解决非严格线性可分的情形(即总体上仍然是线性可分的)。纵使软间隔能够一定程度缓解非线性问题,但归根到底还是总体还是线性可分的,核函数(Kernal Function)的应用让SVM强大的分类能力得以拓展到非线性数据领域。至此,拥有核技巧的SVM才真正成为了机器学习里的通用技术。
为了读者能够全面的了解SVM的基本原理,因此本文以SVM发展的历史过程重要节点作为文章组织结构,第一节将会介绍线性SVM,以及如何求其最优化解;第二节软间隔如何解决非严格线性问题;第三节阐述SVM核技巧如何适应非线性可分数据;第四节是对全文的总结。在接下来的阐述SVM基本原理的过程中是一定会伴随的数学公式的推导(因为SVM的背后有非常漂亮的数学理论在支撑着),但是尽量会使其通俗易懂,并且会保证数学推导部分的独立,方便读者日后查阅。
此外,周志华老师的巨作机器学习 [ 3 ] ^{[3]} [3](后文简称:西瓜书)对SVM的讲解是非常的好的,可惜的是西瓜书篇幅有限没办法讲解细节,拙文尝试尽量弥补这个缺陷,因此本文中所有公式均与西瓜书对标。笔者才疏学浅,文中有不当之处还烦请读者雅正。
1 线性分类器SVM
1.1 基本原理
分类是机器学习中一项重要的任务,SVM最开始提出的目的就是为了解决线性分类问题。考虑一个最简单的分类任务,如图1.1所示,仅有两个数据代表点 ( 0 , 0 ) ( 1 , 1 ) (0, 0) (1, 1) (0,0)(1,1)分别对应负类和正类 [ 注 1 ] ^{[注1]} [注1]。分类器要做的就是找到一个决策平面(SVM中称超平面: Hyper Plane)然后将两类有效区分开,不同的分类器会导出不同的决策平面,而泛化误差就是决定哪个决策平面更优的一个量化指标。SVM的目标很明确就是最大化泛化误差,而Vapnik的想法就是找到一个能够提供最大容错空间的决策平面,而这个最大容错空间就是最大化间隔 [ 1 ] ^{[1]} [1]。SVM要解决以下两个问题:
-
如何定义样本点到超平面的距离?
-
如何根据距离来正确分类样本?
问题1: 如何定义样本点到超平面的距离?
在中学所学的点到平面的距离公式可描述为:
r i = ∣ w T x i + b ∣ ∣ ∣ w ∣ ∣ , i = 1 , 2 , ⋯ , m ( 1.1 ) r_i = \frac{|w^Tx_i+b|}{||w||} , \qquad \qquad i=1,2, \cdots, m \quad (1.1) ri=∣∣w∣∣∣wTxi+b∣,i=1,2,⋯,m(1.1)
其中 w T x + b w^Tx+b wTx+b是一个超平面,当然在二维特征空间中就是一条线,而 w w w是超平面的法向量矩阵, b b b是超平面距原点的距离。显然所有的 x i x_i xi到超平面的都可以使用公式(1.1)求出。
问题2: 如何根据距离来正确分类样本?
常用的方法是根据某个阈值归并所属类,即
f ( x ) = { w T x i + b ≥ + 1 , y i = + 1 w T x i + b ≤ − 1 , y i = − 1 ( 1.2 ) f(x)=\left\{ \begin{aligned} & w^Tx_i+b \geq +1, & y_i=+1\\ & w^Tx_i+b \leq -1, & y_i=-1 \end{aligned} \right. \qquad (1.2) f(x)={ wTxi+b≥+1,wTxi+b≤−1,yi=+1yi=−1(1.2)
对于一个样本点 x i x_i xi,如果它到此超平面的距离大于等于1则归为正类,对负类来说情况即相反。至于公式(1.2)为什么将阈值设置为1,我的一个不成熟的想法是:单位数字1能够提供很好的运算便利,且具体的间隔变化可由 w w w来控制。
但分段函数与不等式计算起来非常麻烦,对于分段函数很直观的可以将公式(1.2)改写成如下形式:
y i ( w T x i + b ) ≥ 1 , i = 1 ⋯ m ( 1.3 ) y_i(w^Tx_i+b) \geq 1, \qquad \qquad i=1 \cdots m \quad (1.3) yi(wTxi+b)≥1,i=1⋯m(1.3)
而对于解决不等式Vapnik就提出了一个非常巧妙的方式,即只关注每一类中的临界样本点(值)到超平面的距离,而其他样本点到此平面是一定大于临界样本点的,即支持向量(Support Vectors)。而这些支持向量到超平面的距离就是我们要找的间隔。用数学语言描述这段话即:
y i ( w T x i + b ) ≥ 1 → y s ( w T x s + b ) = 1 , i ∈ D , s ∈ s u p p o r t v e c t o r s y_i(w^Tx_i+b) \geq 1 \to y_s(w^Tx_s+b) = 1, \qquad i \in D, s \in support \quad vectors yi(wTxi+b)≥1→ys(wTxs+b)=1,i∈D,s∈supportvectors
这就是为什么SVM可以用于小样本分类的原因,超平面的确立只与支持向量有关,其他的样本点并不会影响 w w w的值。那么现在我们就可以用上面的公式来表达最大间隔,即:
γ = 2 ∗ ∣ w T x s + b ∣ ∣ ∣ w ∣ ∣ = 2 ∣ ∣ w ∣ ∣ , ( 1.4 ) \gamma = \frac{2*|w^Tx_s+b|}{||w||} = \frac{2}{||w||}, \qquad \qquad \qquad (1.4) γ=∣∣w∣∣2∗∣wTxs+b∣=∣∣w∣∣2,(1.4)
综上,就导出了SVM的核心:最大间隔 max w , b γ = 2 ∣ ∣ w ∣ ∣ \max \limits_{w, b} \gamma=\frac{2}{||w||} w,bmaxγ=∣∣w∣∣2,约束条件是$ y_i(w^Tx_i+b) \geq 1 。 而 最 大 化 。而最大化 。而最大化||w||{-1}$可以等价于最小化$||w||{2}$,故整理得:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 ( 1.5 ) s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , ⋯ , m \begin{aligned} & \min_{w, b} \frac{1}{2}||w||^2 \qquad \qquad \qquad (1.5)\\ & s.t. \quad y_i(w^Tx_i+b) \geq 1,\qquad i = 1,2,\cdots,m \end{aligned} w,bmin21∣∣w∣∣2(1.5)s.t.yi(wTxi+b)≥1,i=1,2,⋯,m
公式(1.5)即是SVM的基本型 [ 3 ] ^{[3]} [3]。至此,SVM的基本理念以及数学描述均已阐述完毕,SVM另一个神奇的点在于它将整个优化问题变成了凸优化(二次规划)的问题,通过二次方程的结论告诉我们 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w∣∣2要么无解,要么有且仅有一个最优解。
在图1.2中,有三个决策超平面(边界),分别是 x 1 = 1 2 , x 2 = 1 2 , x 1 + x 2 − 1 = 0 x_1=\frac{1}{2}, x_2=\frac{1}{2}, x_1+x_2-1=0 x1=21,x2=21,x1+x2−1=0,三个平面皆可将正负样本正确区分,按照前面所说的SVM的思想会选择其中间隔最大的一个决策超平面,如图1.3中所示,显然 x 1 + x 2 − 1 = 0 x_1+x_2-1=0 x1+x2−1=0这一超平面使得两个样本点(支持向量)到超平面的最大,在图形上我们可以直观的看到SVM选择的结果。
在1.2节中我们将会对图1.1的示例进行公式推导并得出与图1.3中所示的结果,本文所用的例子计算量较小,相信在自己计算一次后,会加深您对SVM的运算原理的理解。当然您也可以选择跳过公式推导环节,这样并不会影响你对后面内容的阅读。
注1:事实上,许多讲解SVM原理的书上使用的例子数据分布也与图1大同小异,只是数据量多了一点,但数据量多对于手工运算来说并不友好。因此本例仅使用两个点来做运算推导。
1.2 解SVM基本型
回顾公式(1.5),我们得知SVM的求解实际上是一个凸优化(有约束的最优化)的问题,因此可以用拉格朗日乘数(算子)法 [ 4 ] ^{[4]} [4]求解式(1.5),为公式(1.5)中的每一个约束添加算子 α ≥ 0 \alpha \geq 0 α≥0,有:
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) ( 1.6 ) L(w, b, \alpha) = \frac{1}{2}||w||^2 + \sum_{i=1}^{m} \alpha_{i}(1 - y_i(w^Tx_i+b)) \qquad \qquad \qquad (1.6) L(w,b,α)=21∣∣w∣∣2+i=1∑mαi(1−yi(wTxi+b))(1.6)
令式(1.6)中参数偏导数为零得:
∂ L ∂ w = w − ∑ i = 1 m α i y i x i = 0 → w = ∑ i = 1 m α i y i x i ( 1.7 ) ∂ L ∂ b = ∑ i = 1 m α i y i = 0 ( 1.8 ) ∂ L ∂ α = ∑ i = 1 m 1 − y i ( w T x i + b ) = 0 ( 1.9 ) \begin{aligned} \frac{\partial L}{\partial w} & = w-\sum_{i=1}^{m}\alpha_iy_ix_i=0 \rightarrow w=\sum_{i=1}^{m}\alpha_iy_ix_i & (1.7) \\ \frac{\partial L}{\partial b} & = \sum_{i=1}^{m}\alpha_iy_i=0 & (1.8) \\ \frac{\partial L}{\partial \alpha} &=\sum_{i=1}^{m} 1 - y_i(w^Tx_i+b)=0 &(1.9) \\ \end{aligned} ∂w∂L∂b∂L∂α∂L=w−i=1∑mαiyixi=0→w=i=1∑mαiyixi=i=1∑mαiyi=0=i=1∑m1−yi(wTxi+b)=0(1.7)(1.8)(1.9)
将式(1.7)代入式(1.6)中消去 w , b w,b w,b得:(注: ∣ ∣ w ∣ ∣ 2 = w T w ||w||^2=w^Tw ∣∣w∣∣2=wTw)
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) = 1 2 ∑ i = 1 m ( α i y i x i ) T ∑ j = 1 m α j y j x j + ∑ i = 1 m α i − ∑ i = 1 m α i y i ( ∑ j = 1 m ( α j y j x j ) T x i + b ) = 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j + ∑ i = 1 m α i − ∑ i = 1 m ∑ j = 1 m α