首页 > 代码库 > SVM公式详解

SVM公式详解

点(x,y)到平面(w,b)的距离公式是:$\gamma=\frac{1}{||w||}y(xw+b)$。我们称之为几何间隔。另外$\hat{\gamma}=y(xw+b)$记为函数间隔。

SVM的基本思路就是,寻找一个能够正确划分数据集,并且几何间隔最大的超平面。这个目标可以表达为:

$$\max_{w,b}{\gamma} , \ s.t., \ \frac{1}{||w||}y_i(wx_i + b) \geq \gamma$$

可以改写为:

$$\max_{w,b}{\frac{\hat{\gamma}}{||w||}} , \ s.t., \ y_i(wx_i + b) \geq \hat{\gamma}$$

实际上,可以按比例将$w$和$b$改成合适的大小,使$\hat{\gamma}=1$,即

$$\max_{w,b}{\frac{1}{||w||}} , \ s.t., \ y_i(wx_i + b) \geq 1$$

最大化$\frac{1}{||w||}$和最小化$||w||$是一样的,也就是和最小化$\frac{1}{2}||w||^2$是一样的(这样方便后续计算),所以我们的目标函数变成了

$$ \min_{w,b}{\frac{1}{2}||w||^2} , \ s.t., \ y_i(wx_i + b) \geq 1 $$

但是这个带约束条件的优化很难求解,于是这里用到了拉格朗日对偶。定义拉格朗日函数:

$$L(w,b,\alpha)=\frac{1}{2}||w||^2 - \sum_{i}\alpha_i({y_i(wx_i + b)-1})$$ 其中$\alpha$是拉格朗日乘子

我们定义$\theta(w,b)=\max_{\alpha,\alpha \geq 0}{L(w,b,\alpha)}$,当${y_i(wx_i + b)-1} \leq 0$时,我们一定可以通过调整$\alpha$的值来是$\theta$为正无穷,这样我们把原问题转化为

$$\min_{w,b}{\theta(w,b)}=\min_{w,b}{\max_{\alpha,\alpha \geq 0}{L(w,b,\alpha)}}$$

这样的最小值一定满足那些约束条件。这里我们可以得到对偶问题:$\max_{\alpha,\alpha \geq 0}{\min_{w,b}{L(w,b,\alpha)}}$

这个对偶问题把w,b放在内层中,比较好求解。对于一般的问题,有$d \leq p$。对于满足强对偶条件的问题,有$d = p$,即原问题的解和对偶问题的解是一样的。

对于强对偶问题,$w^*,\alpha^*$是一组解的充要条件是满足下面的KKT条件:

$$\nabla_w L(w^*,\alpha_*)=0\\ \nabla_\alpha L(w^*,\alpha_*)=0\\ \alpha^* g(w_*)=0\\g(w_*) \leq 0\\ \alpha \geq 0$$

回到SVM的优化问题,由KKT条件可知,$\min_{w,b}{L(w,b,\alpha)}$的解满足

$\nabla_w L()=0 \Rightarrow w=\sum_{i}{\alpha_i y_i x_i}$,$\nabla_b L()=0 \Rightarrow \sum_i{a_i y_i}=0$

把w和b重新带入到L函数中,得到:$L(w,b,\alpha)=\sum_i{\alpha_i}-\frac{1}{2}\sum_{i,j}{y_i y_j \alpha_i \alpha_j (x_i)^T x_j} ,\ s.t. \ \alpha \geq 0, \sum_i{\alpha_i y_i}=0$

到这里,式子中只剩下了$\alpha$这一个变量。那么我们剩下的步骤就是求解$\max_{\alpha, \alpha \geq 0}{L(w,b,\alpha)}$。

一旦求出了$\alpha$,w可以通过$ w=\sum_{i}{\alpha_i y_i x_i}$得到,为了满足正负样本的支持向量到超平面的距离相等,b的值为$b=\frac{1}{2}(\min_{y_i=1}{wx_i} + \max_{y_i=-1}{wx_i})$

 

在讲如何计算$\alpha$的值之前,还要引入一个概念,那就是软间隔。我们之前讨论的情况都是建立在样例线性可分的假设上,当样例线性不可分时,我们需要将模型进行调整,以保证在不可分的情况下,也能够尽可能地找出分隔超平面。

$$\min_{\gamma, w, b}{\frac{1}{2}||w||^2+C\sum_i{\zeta_i}}, \ s.t. \ y_i(wx_i+b) \geq 1-\zeta_i, \zeta_i \geq 0$$

引入松弛变量$\zeta$之后,就允许某些样例的间隔小于1。C越大表示越不能接受离群点。再次建立新的拉格朗日函数:

$$L(w,b,\alpha)=\frac{1}{2}||w||^2 + C\sum_i{\zeta_i} - \sum_{i}\alpha_i({y_i(wx_i + b)-1+\zeta_i})-\sum_i{\beta \zeta_i}$$

由KKT条件可以知道,

$ \nabla_w{L}=0 \Rightarrow w=\sum_i{\alpha_i y_i x_i}\\ \nabla_b{L}=0 \Rightarrow \sum_i{\alpha_i y_i} = 0\\ \nabla_\zeta{L}=0 \Rightarrow \alpha_i = C- \beta_i\\ \alpha_i \geq 0, \beta_i \geq 0 \Rightarrow 0 \leq \alpha_i \leq C$

把w和b重新带入到L函数中,得到新的最优化函数:$\max_{\alpha}{L(w,b,\alpha)}=\sum_i{\alpha_i}-\frac{1}{2}\sum_{i,j}{y_i y_j \alpha_i \alpha_j (x_i)^T x_j} ,\ s.t. \ 0 \leq \alpha \leq C , \sum_i{\alpha_i y_i}=0$

 

下面开始讲如何计算$\alpha$的值——SMO算法。SMO算法是一种启发式算法,目标是使所有的$\alpha$满足KKT条件。为了达到这个目标,算法每次取两个变量,固定其它变量,每次只优化这两个变量。这个优化两个变量的子问题可以简单地通过求导的方法求解。这里为什么是两个变量?因为我们的约束条件中有$\sum_i{\alpha_i y_i}=0$,确定一个变量的时候,另一个变量也就随之确定了。

现在假设选择的两个变量是$\alpha_1, \alpha_2$,其它变量是固定的。于是最优化问题可以重写成:

$$\min_{\alpha}{L(w,b,\alpha)}=\frac{1}{2}K_{11}\alpha_1^2+\frac{1}{2}K_{22}\alpha_2^2+K{12} y_1 y_2 \alpha_1 \alpha_2 +y_1 v_1 \alpha_1 +y_2 v_2 \alpha_2 - \alpha_1 - \alpha_2 + (const)$$

其中$v_i = \sum_{j=3}{y_j \alpha_j K_{ij}}$。

另外还有:$y_1 \alpha_1 = -\sum_{i=3}{y_i \alpha_i} - y_2 \alpha_2 = D - y_2 \alpha_2$,D表示一个常数。把这个式子继续代入优化函数中:

$$L()=\frac{1}{2}K_{11}(D - y_2 \alpha_2)^2+\frac{1}{2}K_{22}\alpha_2^2+K_{12} y_1 y_2 (D - y_2 \alpha_2) \alpha_2 +y_1 v_1 (D - y_2 \alpha_2) +y_2 v_2 \alpha_2 -(D - y_2 \alpha_2) - \alpha_2$$

对$\alpha_2$求导数:

$\frac{\partial L}{\partial \alpha_2} = K_{11} \alpha_2 + K_{22} \alpha_2 - 2K_{12} \alpha_2 - K_{11} D y_2 + K_{12} D y_2 + y_1 y_2 - 1 - v_1 y_2 + v_2 y_2$

$\frac{\partial L^2}{\partial \alpha_2^2} = K_{11} + K_{22} - 2K_{12}$

 一般情况下二阶导数大于0,当$x_1,x_2$完全相同时,会出现二阶导数等于0的情况,此时L是单调函数,最小值在边缘处取到,直接将左边缘和右边缘带入就可以知道哪个是最小值了。

考虑二阶导数大于0的情况,最小值在导数等于0的地方取到。通过简单计算可以得到,

$$\alpha_2^{new,unc}=\alpha_2^{old}+\frac{y_2(E_1-E_2)}{K_{11}+K_{22}-2K_{12}}$$

其中$E_i=wx_i+b-y_i=\sum_j{\alpha_j y_j K_{ji}}+b - y_i$

再来看$\alpha_2$的取值范围。假设$y_1=y_2$,有

$$\left\{ \begin{array}{lr} \alpha_1 + \alpha_2 = \alpha_1^{old} + \alpha_2^{old}, \\ 0 \leq \alpha_1 \leq C, & \Rightarrow max(0,a_2^{old}+a_1^{old}-C) \leq \alpha_2 \leq min(C, a_2^{old}+a_1^{old}-C)) \\ 0 \leq \alpha_2 \leq C, \end{array} \right.  $$

同理可以得到$y_1 \neq y_2$时候的范围。$max(0,a_2^{old}-a_1^{old}) \leq \alpha_2 \leq min(C, C + a_2^{old} - a_1^{old}))$

对之间求出来的$\alpha_2^{new,unc}$按照这个取值范围剪辑一下就能得到最后的$\alpha_2^{new}$。

在每次完成两个变量的优化之后,我们需要重新计算b。当$0 < \alpha_1 < C$时,由KKT条件可知:$0 < \alpha_1 < C \Rightarrow y_1(wx_1 + b) = 1 \Rightarrow \sum_i{\alpha_i y_i K_{i1} + b } = y_1$

于是,$b_1^{new} = y_1 - \sum_{i=3}{\alpha_i y_i K_{i1}} - \alpha_1^{new}y_1 K_{11} - \alpha_2^{new}y_2 K_{21}\\= -E_1 - y_1 K_{11}(\alpha_1^{new} - \alpha_1^{old}) - y_2 K_{21}(\alpha_2^{new} - \alpha_2^{old}) + b^{old}$

同理可以得到$b_2^{new}$

SVM公式详解