SVM入门笔记

本文不是一篇正式的tutorial,只是帮助回忆和理解SVM推导的笔记。此文章会长期更新。

分类问题

SVM(support vector machine)是一种著名的分类算法。我们学过Logistic回归,但它只能处理简单的线性分类。在现实生活中,很多问题的属性不能简单的用线性分类完成,或者说线性分类的效果不好,这时候我们就要想其他办法。

超平面

我们可以想象这样一个方程:

w T x + b = 0 w^Tx + b = 0 wTx+b=0

若这里的 x x x是二维向量,那么就是我们熟悉的平面方程。若大于二维,则是一个超平面,在SVM中,这个超平面也被称为决策面。

我们的目标就是想找到这样一个决策面,使得样本点能够较好的分布在超平面两侧,这就达到了我们分类的目的。

分类间隔

很显然,对于样本点来说,这样的决策面肯定不止一个。那么,如何来度量我们分类好坏的标准呢?

在SVM中,我们使用分类间隔来度量,所谓分类间隔,是指保证决策面方向不变且不会错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过则会产生错分现象)。因此,这两条平行线(面)之间的垂直距离就是这个决策面对应的分类间隔

不同方向的最优决策面通常是不同的,那个具有最大间隔的决策面就是SVM要寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为支持向量

根据我们学习过的平面距离可以得到:

d = ∣ w T + b ∣ ∣ ∣ w ∣ ∣ d = \frac {|w^T + b|}{||w||} d=wwT+b

我们首先考虑一个决策面是否能够将所有样本都正确分类的约束。我们可以为每个样本点 x i x_i xi加上一个类别标签 y i = { − 1 , 1 } y_i = \{-1,1\} yi={1,1},假如我们的决策面方程能够完全正确的对所有样本点进行分类,则可以得到:

f ( x ) = { w T x i + b > 0   f o r   y i = 1 w T x i + b < 0   f o r   y i = − 1 f(x)=\left\{\begin{aligned}w^Tx_i + b >0 \space for \space y_i = 1 \\w^Tx_i + b <0 \space for \space y_i = -1\end{aligned}\right. f(x)={wTxi+b>0 for yi=1wTxi+b<0 for yi=1

如果我们要求再高一点,假设决策面正好处于间隔区域的中轴线上,并且相应的支持向量对应的样本点到决策面的距离为d,那么公式可以进一步写成:

f ( x ) = { ( w T x i + b ) / ∣ ∣ w ∣ ∣ ≥ d   ∀ y i = 1 ( w T x i + b ) / ∣ ∣ w ∣ ∣ ≤ − d   ∀ y i = − 1 f(x)=\left\{\begin{aligned}(w^Tx_i + b )/||w||\ge d \space \forall y_i = 1 \\ (w^Tx_i + b )/||w||\le -d \space \forall y_i = -1\end{aligned}\right. f(x)={(wTxi+b)/wd yi=1(wTxi+b)/wd yi=1

对公式重写(两边同时除以d):

f ( x ) = { w d T x i + b d > 1   f o r   y i = 1 w d T x i + b d < 1   f o r   y i = − 1 w d = w ∣ ∣ w ∣ ∣ d , b d = b ∣ ∣ w ∣ ∣ d f(x)=\left\{\begin{aligned}w_d^Tx_i + b_d >1 \space for \space y_i = 1 \\w_d^Tx_i + b_d <1 \space for \space y_i = -1\end{aligned}\right. \quad w_d = \frac{w}{||w||d},b_d = \frac {b}{||w||d} f(x)={wdTxi+bd>1 for yi=1wdTxi+bd<1 for yi=1wd=wdw,bd=wdb

由于 w d w_d wd w w w并没有本质差别,因此不再做区分,我们的目标是想要在正确分类的情况下使得分类间隔最大化,即 m a x { d } max \{d\} max{d},也等价于 m i n { 1 2 ∣ ∣ w ∣ ∣ 2 } min \{ \frac {1}{2} ||w||^2\} min{21w2}

因此,我们得到我们问题的总描述:

min ⁡ 1 2 ∣ ∣ w ∣ ∣ 2 \min \frac {1}{2} ||w||^2 min21w2

s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , . . . , n s.t. \quad y_i(w^Tx_i +b)\ge1,i=1,...,n s.t.yi(wTxi+b)1,i=1,...,n

margins

  • Functional margins
    • γ ( i ) = y ( i ) ( w T x + b ) \gamma^{(i)} = y^{(i)}(w^Tx + b) γ(i)=y(i)(wTx+b)
    • 这个函数可以用来衡量confident和correct
    • 如果分类正确,那么该函数始终是正数,且离决策边界越远,值越大,也就越confident
    • 如果分类错误,那么该函数是负数
    • 因此,我们的目标是找到最小的margin,也就是 γ = min ⁡ γ ( i ) \gamma = \min \gamma^{(i)} γ=minγ(i)
  • Geometric margins
    • Functional margins有一个很大的问题在于,如果我等比例的scale w , b w,b w,b,那么该值就一定会增大。但此时对于margin来说并没有提升,因此无法直接用来衡量。
    • 我们新定义一个Geometric margins,可以认为是一个相对的大小:
      • γ ( i ) = y ( i ) ( w ∣ ∣ w ∣ ∣ T x + b ∣ ∣ w ∣ ∣ ) \gamma^{(i)} = y^{(i)}(\frac{w}{||w||}^Tx + \frac{b}{||w||}) γ(i)=y(i)(wwTx+wb)
    • 我们的目标不变:
      • γ = min ⁡ γ ( i ) \gamma = \min \gamma^{(i)} γ=minγ(i)
    • 很容易证明,这时候无论 w , b w,b w,b 如何 scale,都不会影响margins了。(类似于normalization)

Optimal margin classifier

我们的目标是最大化margins,因此可以将原问题写为:

max ⁡ γ ∣ ∣ w ∣ ∣ \max \frac{\gamma}{||w||} maxwγ

s . t . y ( i ) ( w T x ( i ) + b ) ≥ γ s.t. y^{(i)}(w^Tx^{(i)} + b) \ge \gamma s.t.y(i)(wTx(i)+b)γ

但这依然不容易求解,联想到,我们已经使得无论 w , b w,b w,b 如何 scale,都不会影响最终的值,因此,总是可以使 w , b w,b w,b 满足 γ = 1 \gamma = 1 γ=1,因此,我们的目标函数可以写为 max ⁡ 1 ∣ ∣ w ∣ ∣ \max \frac{1}{||w||} maxw1。注意到,最大化 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} w1和最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 w2是一回事情(更容易求导),因此,我们将原问题转为了凸优化问题:

min ⁡ 1 2 ∣ ∣ w ∣ ∣ 2 \min \frac {1}{2} ||w||^2 min21w2

s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , . . . , n s.t. \quad y_i(w^Tx_i +b)\ge1,i=1,...,n s.t.yi(wTxi+b)1,i=1,...,n

线性可分情况

拉格朗日函数

这是一个有约束条件的极值问题,因此可使用拉格朗日函数表达:

L ( w , b , a ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i ( y i ( w T x i + b ) − 1 ) L(w,b,a) =\frac {1}{2} ||w||^2 - \sum\limits _{i=1}^n \alpha_i(y_i(w^Tx_i +b)-1) L(w,b,a)=21w2i=1nαi(yi(wTxi+b)1)

我们令$\alpha_i \ge 0,\theta(w) = {max}_{a_i \ge 0} L(w,b,a) 。 容 易 验 证 : 当 某 个 约 束 条 件 不 满 足 时 , 例 如 。容易验证:当某个约束条件不满足时,例如 y_i(w^Tx_i +b)<1 , 则 有 ,则有 \theta(w) = \infty ( 只 要 令 (只要令 \alpha _i = \infty 而 当 所 有 约 束 都 满 足 时 , 则 有 而当所有约束都满足时,则有 \theta(w) = \frac {1}{2} ||w||^2$,即为最初要最小化的量。

这样,我们就使用拉格朗日函数将所有约束条件集中到一个函数中,目标函数变成了:

min ⁡ w , b θ ( w ) = min ⁡ w , b max ⁡ α i ≥ 0 L ( w , b , a ) = p ∗ \min\limits_{w,b}\theta(w) = \min\limits_{w,b} \max\limits_{\alpha_i\ge 0}L(w,b,a) = p^* w,bminθ(w)=w,bminαi0maxL(w,b,a)=p

这里用 p ∗ p^* p表示这个问题的最优解,且与最初的问题是等价的,但如果直接面对这个函数,有 w , b w,b w,b两个参数,并且 α \alpha α还是不等式约束,不好求解。那么我们可以转化为对偶问题:

max ⁡ α i ≥ 0 min ⁡ w , b L ( w , b , a ) = d ∗ \max\limits_{\alpha_i\ge 0}\min\limits_{w,b} L(w,b,a) = d^* αi0maxw,bminL(w,b,a)=d

这个新问题的最优解表示为 d ⋆ d^\star d,且有 d ⋆ ≤ p ⋆ d^{\star} \le p^{\star} dp,在某些情况下这两者相等,因此可以求解对偶问题来间接求解原始问题。

KKT条件

由于对偶问题和原始问题有 d ⋆ ≤ p ⋆ d^{\star} \le p^{\star} dp 的关系,但我们更希望取等号,这样我们就可以利用对偶问题来求得原问题的最优解。

而满足这种条件的约束称为KKT条件。

首先重新定义一下凸优化问题:

min ⁡ f ( w ) \min f(w) minf(w)

s . t . g i ( w ) ≤ 0 s.t. \quad g_i(w) \le 0 s.t.gi(w)0

h i ( w ) = 0 h_i(w) = 0 hi(w)=0

拉格朗日函数可以表示为: L ( w , α , β ) = f ( w ) + ∑ α i g i ( w ) + ∑ β i h ( w ) L(w,\alpha,\beta) = f(w) + \sum \alpha_i g_i(w) + \sum \beta_i h(w) L(w,α,β)=f(w)+αigi(w)+βih(w)

KKT条件可以表示为:

∂ ∂ w i L ( w ∗ , α ∗ , β ∗ ) = 0 \frac{\partial}{\partial w_i}L(w^*,\alpha^*,\beta^*) = 0 wiL(w,α,β)=0

∂ ∂ β i L ( w ∗ , α ∗ , β ∗ ) = 0 \frac{\partial}{\partial \beta_i}L(w^*,\alpha^*,\beta^*) = 0 βiL(w,α,β)=0

α i ∗ g i ∗ ( w ∗ ) = 0 \alpha_i^* g_i^*(w^*) = 0 αigi(w)=0

g i ( w ∗ ) ≤ 0 g_i(w^*) \le 0 gi(w)0

α ∗ ≥ 0 \alpha^* \ge 0 α0

其中第三个条件被称为dual complementarity condition,也就是说,只有在 g i ⋆ ( w ⋆ ) = 0 g_i^{\star}(w^{\star}) = 0 gi(w)=0 α ≠ 0 \alpha \ne 0 α̸=0,也就是真正作为support vector,在后面的SMO中会有帮助。

对偶问题求解

我们需要求解的方程为:

max ⁡ α i ≥ 0 min ⁡ w , b L ( w , b , a ) = d ∗ \max\limits_{\alpha_i\ge 0}\min\limits_{w,b} L(w,b,a) = d^* αi0maxw,bminL(w,b,a)=d

首先固定 α \alpha α,对 w , b w,b w,b求导数:

∂ L ∂ w = 0 ⇒ w = ∑ i = 1 n a i y i x i \frac{\partial L }{\partial w} = 0 \Rightarrow w =\sum\limits_{i=1}^{n}a_iy_ix_i wL=0w=i=1naiyixi

∂ L ∂ w b = 0 ⇒ ∑ i = 1 n a i y i = 0 \frac{\partial L }{\partial wb} = 0 \Rightarrow\sum\limits_{i=1}^{n}a_iy_i = 0 wbL=0i=1naiyi=0

将上面的结果带到 L ( w , b , a ) L(w,b,a) L(w,b,a)中可得:

KaTeX parse error: No such environment: equation at position 7: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\begin{split} L…

这样,我们的目标函数就变为:

max ⁡ α ∑ i = 1 n a i − 1 2 ∑ i , j = 1 n a i a j y i y j x i T x j \max\limits_{\alpha} \sum\limits _{i= 1}^n a_i-\frac {1}{2} \sum\limits_{i,j = 1}^n a_ia_jy_iy_jx^T_ix_j αmaxi=1nai21i,j=1naiajyiyjxiTxj

s . t . a i ≥ 0 , i = 1 , . . . , a n d ∑ i = 1 n a i y i = 0 s.t. \quad a_i\ge0,i=1,..., and \sum\limits_{i=1}^{n}a_iy_i = 0 s.t.ai0,i=1,...,andi=1naiyi=0

这样,我们的目标就变成了求 α \alpha α,从而可以求出:

w = ∑ i = 1 n a i y i x i w =\sum\limits_{i=1}^{n}a_iy_ix_i w=i=1naiyixi

b = − max ⁡ i : y i = − 1 w T x + min ⁡ i : y i = 1 w T x i 2 b = - \frac {\max _{i:y_i = -1} w^Tx + \min_{i:y_i = 1}w^Tx _i}{2} b=2maxi:yi=1wTx+mini:yi=1wTxi

求$\alpha 比 直 接 求 比直接求 w,b$简单多了,其中SMO算法是目前最常用的,我们之后再说。

我们目前的分类函数为 f ( x ) = w T x + b f(x) = w^Tx+b f(x)=wTx+b,带入:

KaTeX parse error: No such environment: equation at position 7: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲\begin{split} f…

注意,这里的 ( x i x ) (x_ix) (xix)表示向量乘积,因此,对于新点 x x x只需要计算它与训练数据点的内积即可。这一点在之后的kernel函数中也会使用。

线性不可分情况

核函数

  • 将attributes -> feature 的过程定义为feature mapping,例如 ϕ ( x ) = [ x x 2 x 3 ] \phi(x) = \begin{bmatrix}x\\x^2 \\ x^3\end{bmatrix} ϕ(x)=xx2x3,因此,我们想从feature中进行学习,而不是原始的attributes。而注意到,我们对样本的预测只与内积有关,因此可以定义Kernel: K ( x , z ) = ϕ ( x ) T ϕ ( z ) ​ K(x,z) = \phi(x)^T\phi(z)​ K(x,z)=ϕ(x)Tϕ(z)
    • 这样,在原始算法中的所有内积都用Kernel代替,这样就实现了从feature中学习
  • 这里最值得注意的是,为什么我们不直接学习feature的表示,而要学习kernel呢?
    • 因为kernel的计算代价可能远远小于提取feature
    • 例如,如果 K ( x , z ) = ( x T z + c ) d K(x,z) = (x^Tz +c)^d K(x,z)=(xTz+c)d,则对应于 C n + d n C_{n+d}^n Cn+dn个feature space,而对于计算kernel来说,复杂度只有 O ( n ) O(n) O(n)
    • 这种kernel的思想并不仅仅适用于SVM,只要有内积的形式,都可以使用,可以大大减少feature空间的维度
  • 直觉来说,如果 ϕ ( x ) \phi(x) ϕ(x) ϕ ( z ) \phi(z) ϕ(z)越相近,则我们希望得到的 K ( x , z ) K(x,z) K(x,z)越大,反之越小
  • 例如Gaussian kernel: K ( x , z ) = exp ⁡ ( − ∣ ∣ x − z ∣ ∣ 2 w σ 2 ) ​ K(x,z) = \exp(-\frac{||x-z||^2}{w\sigma^2})​ K(x,z)=exp(wσ2xz2)
    • correspond to an infinite dimensional feature mapping

正则化&不可分

  • 当我们用 ϕ \phi ϕ将数据映射到高维特征空间,并不能提高线性可分的likelihood。同时,如果样本中存在outlier,会大大影响我们分类的效果和margin的大小。
  • 因此,我们希望模型能够对outlier不敏感,加上正则项( l 1 l_1 l1正则化):
    • min ⁡ γ , w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m ε i \min_{\gamma,w,b} \frac{1}{2}||w||^2 + C\sum\limits_{i=1}^m\varepsilon_i minγ,w,b21w2+Ci=1mεi
    • $s.t\quad y{(i)}(wTx^{(i)} + b) \ge 1- \varepsilon_i $
    • ε i ≥ 0 \varepsilon_i \ge 0 εi0
  • 这样,我们的拉格朗日问题就变为:
    • L ( w , b , ε , α , r ) = 1 2 w T w + C ∑ i = 1 m ε i − ∑ i = 1 m α i [ y ( i ) ( x T w + b − 1 + ε i ) ] − ∑ i = 1 m r i ε i L(w,b,\varepsilon,\alpha,r) = \frac{1}{2} w^Tw + C\sum\limits_{i=1}^m\varepsilon _i - \sum\limits_{i=1}^m\alpha_i[y^{(i)}(x^Tw + b - 1 +\varepsilon_i)] - \sum\limits_{i=1}^m r_i \varepsilon_i L(w,b,ε,α,r)=21wTw+Ci=1mεii=1mαi[y(i)(xTw+b1+εi)]i=1mriεi
  • 通过同样的方法,可以得到拉格朗日对偶问题为:
    • max ⁡ α ∑ i = 1 n a i − 1 2 ∑ i , j = 1 n a i a j y i y j ( x i ( i ) , x ( j ) ) \max\limits_{\alpha} \sum\limits _{i= 1}^n a_i-\frac {1}{2} \sum\limits_{i,j = 1}^n a_ia_jy_iy_j(x^{(i)}_i,x^{(j)}) αmaxi=1nai21i,j=1naiajyiyj(xi(i),x(j))
    • s . t . 0 ≤ α ≤ C s.t. \quad 0\le \alpha \le C s.t.0αC
    • ∑ i = 1 m α i y ( i ) = 0 \sum\limits_{i=1}^m \alpha_i y^{(i)} = 0 i=1mαiy(i)=0
  • 根据KKT条件,我们可以得到
    • α i = 0 ⇒ y ( i ) ( w T x ( i ) + b ) ≥ 1 \alpha_i = 0 \quad \Rightarrow\quad y^{(i)}(w^Tx^{(i)} + b) \ge 1 αi=0y(i)(wTx(i)+b)1
    • α i = C ⇒ y ( i ) ( w T x ( i ) + b ) ≤ 1 \alpha_i = C \quad \Rightarrow\quad y^{(i)}(w^Tx^{(i)} + b) \le 1 αi=Cy(i)(wTx(i)+b)1
    • 0 < α i < C ⇒ y ( i ) ( w T x ( i ) + b ) = 1 0<\alpha_i < C \quad \Rightarrow\quad y^{(i)}(w^Tx^{(i)} + b) = 1 0<αi<Cy(i)(wTx(i)+b)=1

SMO算法

我们已经将SVM的基本问题从attributes空间通过kernel转到feature空间,同时定义了有正则项的对偶函数,最后剩下的就是如何求解了。

Coordinate ascent

我们之前已经熟悉了gradient ascent和Newton’s method两种优化算法,现在介绍一种新的优化方法。

假设我们的优化目标是 max ⁡ α W ( α 1 , α 2 , . . . , α m ) \max\limits_{\alpha} W(\alpha_1,\alpha_2,...,\alpha_m) αmaxW(α1,α2,...,αm)

那么,我们按照一定的order对某些变量依次进行更新(从启发式算法角度考虑,我们的更新order是从希望更新的参数变化最大的开始):

α i : = arg ⁡ max ⁡ α i ^ W ( α 1 , α 2 , . . α i . , α m ) \alpha_i := \arg\max_{\hat{\alpha_i}} W(\alpha_1,\alpha_2,..\alpha_i.,\alpha_m) αi:=argmaxαi^W(α1,α2,..αi.,αm)

这种优化算法非常有效,收敛得很快。

SMO

max ⁡ α ∑ i = 1 n a i − 1 2 ∑ i , j = 1 n a i a j y i y j ( x ( i ) , x ( j ) \max\limits_{\alpha} \sum\limits _{i= 1}^n a_i-\frac {1}{2} \sum\limits_{i,j = 1}^n a_ia_jy_iy_j(x^{(i)},x^{(j)} αmaxi=1nai21i,j=1naiajyiyj(x(i),x(j)

s . t . 0 ≤ α ≤ C s.t. \quad 0\le \alpha \le C s.t.0αC

∑ i = 1 m α i y ( i ) = 0 \sum\limits_{i=1}^m \alpha_i y^{(i)} = 0 i=1mαiy(i)=0

我们如果直接对满足约束条件的优化问题使用coordinate ascent,则会发现,如果我们需要更新的 α 1 \alpha_1 α1,在约束条件下,没有办法得到更新后的值。这是因为:

α 1 y ( 1 ) = − ∑ i = 2 m α i y ( i ) \alpha_1y^{(1)} = - \sum\limits_{i=2}^m \alpha_i y^{(i)} α1y(1)=i=2mαiy(i)

因此,解决该问题,至少需要我们同时更新两个值。

首先,如果我们同时更新 α 1 , α 2 \alpha_1,\alpha_2 α1,α2,则约束条件为:

α 1 y ( 1 ) + α 2 y ( 2 ) = − ∑ i = 3 m α i y ( i ) = ε \alpha_1 y^{(1)} + \alpha_2y^{(2)} = -\sum\limits_{i=3}^m \alpha_i y^{(i)} = \varepsilon α1y(1)+α2y(2)=i=3mαiy(i)=ε

实际上,由于 0 ≤ α ≤ C 0\le \alpha \le C 0αC,因此可以更进一步得到其范围:

带入目标函数为:

W ( α 1 , α 2 , . . . , α m ) = W ( ( ε − α 2 y ( 2 ) ) , α 2 , . . . , α m ) W(\alpha_1,\alpha_2,...,\alpha_m) = W((\varepsilon - \alpha_2y^{(2)}),\alpha_2,...,\alpha_m) W(α1,α2,...,αm)=W((εα2y(2)),α2,...,αm)

实际上,根据我们之前写的 W W W的具体形式,这里就是一个关于 α 2 \alpha_2 α2的二次型函数: a α 2 2 + b α 2 + c a \alpha_2^2 + b\alpha_2 + c aα22+bα2+c,同时满足某些约束 L ≤ α 2 ≤ H L\le \alpha_2 \le H Lα2H,这样我们很容易就可以求得更新后的 α 2 \alpha_2 α2的值。

这样,我们就可以按照coordinate ascent的方式依次更新所有的参数,直到收敛。

你可能感兴趣的:(MachineLearning)