Support Vector Machine

Jun 25, 2016


1. Maximum Margin Classifier

首先简单介绍下SVM的基本思想。

SVM作为一个分类器,其分类的措施是构建一个超平面,将平面一侧的数据点分为一类,另一侧的数据点分为另一类。

为了能有较好的泛化误差,平面与训练集中的数据点的最小距离应尽可能大。

2. Linear SVM

设训练集有n个数据点

设定

超平面定义为

\begin{align} f(x) = w \cdot x - b = 0 \end{align}

如果,则分类为1 如果,则分类为-1

2.1 Hard Marign

如果数据是线性可分的,可构建两个平行的超平面,如下图虚线

分类超平面就是两个平行超平面的中间位置

构建的两个超平面上的点称为支持向量

使用表示的L2范数

对于支持向量,其到分类超平面的距离为

由于训练集的数据点不会变化,因此是个关于的函数,使用表示这个函数

SVM的优化目标

\begin{align} w,b=\mathop{argmax}_{w,b} \frac{g(w,b)}{\vert \vert w\vert \vert } \end{align}

此时还有约束

\begin{align} y(w\cdot x-b) \geq g(w,b) \end{align}

容易发现,通过缩放可以控制,但对超平面本身没有影响,因此我们为了简便推导令

新的优化目标变为

\begin{align} &w,b = \mathop{argmax}_{w,b} \frac{1}{\vert \vert w\vert \vert }\\ & s.t. \quad \forall i , y_i(w\cdot x_i-b)\geq 1 \end{align}

变换一下 \begin{align} &w,b = \mathop{argmin}_{w,b} \vert \vert w\vert \vert \\ & s.t. \quad \forall i , y_i(w\cdot x_i-b)\geq 1 \end{align}

2.2 Soft Margin

为了处理数据线性不可分的情况,引入hinge损失函数

\begin{align} \max\left(0, 1 - y_i(w \cdot x_i-b)\right) \end{align}

对于满足约束的数据点,其损失值为0

此时,新的优化目标

\begin{align} w,b=\mathop{argmin}_{w,b}\lambda\vert \vert w\vert \vert ^2+\frac{1}{n}\sum_{i=1}^n\max\left(0, 1 - y_i(w\cdot x_i-b)\right) \end{align}

人工设定的参数用于均衡两者的重要性

2.3 Differentiable Objective Function

表示使得成立的最小非负数,此时

\begin{align} \zeta_i = \max\left(0, 1 - y_i(w\cdot x_i-b)\right) \end{align}

因此,优化目标可以写为

\begin{align} &w,b=\mathop{argmin}_{w,b}\lambda\vert \vert w\vert \vert ^2+\frac{1}{n}\sum_{i=1}^n\zeta_i \\ &s.t. \forall i,\quad 1 - y_i(w\cdot x_i-b) -\zeta_i\leq 0,-\zeta_i \leq 0 \end{align}

2.4 Dual

引入非负的拉格朗日乘子

\begin{align} \Lambda &= \lambda\vert \vert w\vert \vert ^2+\frac{1}{n}\sum_{i=1}^n\zeta_i \\ &+ \sum_{i=1}^n\mu_i[1 - y_i(w\cdot x_i-b) -\zeta_i] - \sum_{i=1}^n \nu_i\zeta_i \end{align}

原求解目标等价于

这里满足Slater条件,因此等价于对偶目标

先求

\begin{align} &\frac{\partial \Lambda}{\partial w}=2\lambda w-\sum_{i=1}^n\mu_iy_ix_i=0 \\ &\frac{\partial \Lambda}{\partial b}=\sum_{i=1}^n\mu_iy_i=0 \\ & \frac{\partial \Lambda}{\partial \zeta_i}=\frac{1}{n}-\mu_i-\nu_i=0 \end{align}

为了和wiki的符号统一,令,于是 \begin{align} &\frac{\partial \Lambda}{\partial w}= w-\sum_{i=1}^nc_iy_ix_i=0 \\ &\frac{\partial \Lambda}{\partial b}=\sum_{i=1}^nc_iy_i=0 \\ & \frac{\partial \Lambda}{\partial \zeta_i}=\frac{1}{n}-2\lambda c_i-\nu_i=0 \end{align}

代回

\begin{align} \Lambda &= \lambda\vert \vert w\vert \vert ^2 + 2\lambda\sum_{i=1}^nc_i[1 - y_i(w\cdot x_i-b)] \end{align}

除以一个常数不影响对的优化,因此 \begin{align} \Lambda &= \frac{1}{2}\vert \vert w\vert \vert ^2 + \sum_{i=1}^nc_i[1 - y_i(w\cdot x_i-b)] \\ &= \frac{1}{2}w^Tw+\sum_{i=1}^nc_i - w^T\sum_{i=1}^nc_iy_ix_i+\sum_{i=1}^nc_iy_ib \\ &=\sum_{i=1}^nc_i - \frac{1}{2}w^Tw \\ &=\sum_{i=1}^nc_i - \frac{1}{2}\sum_{i=1}^n\sum_{j=1}^nc_ic_jy_iy_j(x_i \cdot x_j) \end{align}

由于,因此

所求变为

\begin{align} &\mathop{argmax}_{c_i}\sum_{i=1}^nc_i - \frac{1}{2}\sum_{i=1}^n\sum_{j=1}^nc_ic_jy_iy_j(x_i \cdot x_j) \\ & s.t. \forall i\quad 0 \leq c_i \leq \frac{1}{2\lambda n},\sum_{i=1}^nc_iy_i=0 \end{align}

时,的值无贡献,也就是说被平面正确分类,且不在两个平行的边界上 当时,就在分类边界上,也称为支持向量 当时,意味着为0,即被错误分类了

b的计算可以找到一个支持向量然后通过求解

3. Kernel Trick

观察Linear SVM我们知道,其对数据点的计算仅有点积

如果我们将其映射到高维,以增强其拟合能力

此时需要计算的仍然仅是点积

因此我们可以使用核函数完成使用低维数据点计算高维点积的任务

此时我们的优化目标为

\begin{align} &\mathop{argmax}_{c_i}\sum_{i=1}^nc_i - \frac{1}{2}\sum_{i=1}^n\sum_{j=1}^nc_ic_jy_iy_jk(x_i, x_j) \\ & s.t. \forall i\quad 0 \leq c_i \leq \frac{1}{2\lambda n},\sum_{i=1}^nc_iy_i=0 \end{align}

式中的表示核函数

4. Modern Methods

4.1 Sub-gradient Descent

直接使用梯度方法优化

\begin{align} w,b&=\mathop{argmin}_{w,b}f(w,b)\\ &=\mathop{argmin}_{w,b}\lambda\vert \vert w\vert \vert ^2+\frac{1}{n}\sum_{i=1}^n\max\left(0, 1 - y_i(w\cdot x_i-b)\right) \end{align}

求其梯度

\begin{align} &\frac{\partial f(w,b)}{\partial w}=2\lambda w - \frac{1}{n}\sum_{i\in {i\vert y_i(w\cdot x_i-b) < 1}}(y_ix_i) \\ &\frac{\partial f(w,b)}{\partial b} = \frac{1}{n}\sum_{i\in {i\vert y_i(w\cdot x_i-b) < 1}}y_i \end{align}

这个方法无法使用kernel trick,但是可以做到大规模并行

4.2 Coordinate Descent

该方法优化目标为

\begin{align} &\mathop{argmax}_{c_i}\sum_{i=1}^nc_i - \frac{1}{2}\sum_{i=1}^n\sum_{j=1}^nc_ic_jy_iy_jk(x_i, x_j) \\ & s.t. \forall i\quad 0 \leq c_i \leq \frac{1}{2\lambda n},\sum_{i=1}^nc_iy_i=0 \end{align}

迭代地对每个根据梯度方向调整,调整完后会不满足约束条件,将调整完的向量替换为满足约束条件的解空间中与其距离(通常是欧式距离)最近的数据点

这个方法可以使用kernel trick,但是无法做大规模

5. Regression

分类时的优化目标变为 \begin{align} &w,b = \mathop{argmin}_{w,b} \frac{1}{2}\vert \vert w\vert \vert ^2\\ & s.t. \quad \forall i , y_i(w\cdot x_i-b)\geq 1 \end{align} 回归时,将设定为的预测结果,则有类似的回归的优化目标

\begin{align} &w,b = \mathop{argmin}_{w,b} \frac{1}{2}\vert \vert w\vert \vert ^2\\ & s.t. \quad \forall i , \vert y_i - (w\cdot x_i-b)\vert \leq \epsilon \end{align}