![image]()
如图,对于一个可分并且没有异常数据的二分问题,通过原始的感知机算法能够得到正确分类。如果靠近直线的蓝点再往上移动一点,就回被错误预测,算法的泛化能力并不好。支持向量机是一种讲样本与分界面之间间隔最大化的算法,所以用SVM可以或者更好的划分。
Hard Margin SVM(硬间隔支持向量机)
为了方便我们使\(y = \begin{cases}& 1 \ \ \ \ \text{if 正确分类}\\ & -1 \ \text{if 错误分类}\\ \end{cases}\),这时,我们要求的为如下公式
\[\left\{\begin{matrix}
& \arg \max_{w,b} \min_x \frac{\left|w^{T} x+b\right|}{\|w\|} \\
& \text{s.t.}\ \ \ \ \ \ \left(w^{T} x+b\right) > 0
\end{matrix}\right.
\]
即在正确分类的情况下使到分界线的距离最小的点最大化。
前文中\(y\in \{ 1,-1\}\),所以可以写作
\[\left\{\begin{matrix}
& \arg \max_{w,b} \min_x \frac{y\left(w^{T} x+b\right)}{\|w\|} \\
& \text{s.t.}\ \ \ \ \ \ \left(w^{T} x+b\right) > 0
\end{matrix}\right.
\]
首先将由于多个(w,b)对应一个分界面,为了使最小值最大化分界面到两边最近的点距离一样,我们就可以通过缩放得出\(min_x|w^Tx+b|=1\)。即:
\[\begin{array}{l}
& \arg \max_{w,b} \min_x \frac{y\left(w^{T} x+b\right)}{\|w\|}\\
=&\arg \max_{w,b} \frac{\min_x y\left(w^{T} x+b\right)}{\|w\|}\\
=&\arg \max_{w,b} \frac{1}{\|w\|}\\
=&\arg \min_{w,b} \|w\|\\
=&\arg \min_{w,b} \frac{1}{2}w^Tw\\
\end{array}
\]
两边最小值一定存在且一定是\(\pm1\),所以可以写作
\[\left\{\begin{matrix}
& \arg \min_{w,b} \frac{1}{2}w^Tw\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
& \text{s.t.}\ \ 1 - y_i\left(w^{T} x_i+b\right) \leq 0\\
\end{matrix}\right.
\]
通过拉格朗日乘子法,我们可以去掉对(w,b)的约束。设\(\mathcal{L}(w,b,\lambda) = \frac{1}{2}w^Tw + \sum_{i=0}^n \lambda\left(1 - y_i\left(w^{T} x_i+b\right)\right)\),可得
\[\left\{\begin{matrix}
& \min_{w,b} max_{\lambda} \mathcal{L}(w,b,\lambda)\\
& \text{s.t.}\ \ \lambda_i \geq 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\end{matrix}\right.
\]
由于强对偶,得
\[\left\{\begin{matrix}
& max_{\lambda} \min_{w,b} \mathcal{L}(w,b,\lambda)\\
& \text{s.t.}\ \ \lambda_i \geq 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\
\end{matrix}\right.
\]
分别对w、b求导并令偏导为零
\[\begin{array}{l}
\frac{\partial L}{\partial w}=w-\sum_{i=1}^{n} \lambda_{i} x_{i} y_{i}=0 \\
\frac{\partial L}{\partial b}=\sum_{i=1}^{n} \lambda_{i} y_{i}=0
\end{array}
\]
得:
\[\begin{array}{c}
w^* = \sum_{i=1}^{n} \lambda_{i} x_{i} y_{i}\\
\sum_{i=1}^{n} \lambda_{i} y_{i}=0
\end{array}
\]
将条件带入,得:
\[\begin{aligned}
\mathcal{L}(w, b, \lambda) &=\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)+\sum_{i=1}^{n} \lambda_{i}-\sum_{i=1}^{n} \lambda_{i} y_{i}\left(\sum_{j=1}^{n} \lambda_{j} y_{j}\left(x_{i} \cdot x_{j}\right)+b\right) \\
&=\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)+\sum_{i=1}^{n} \lambda_{i}-\sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{n} \lambda_{i} y_{i} b \\
&=\sum_{j=1}^{n} \lambda_{i}-\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)
\end{aligned}
\]
即
\[\left\{\begin{array}{rl}
max_{\lambda}&\sum_{j=1}^{n} \lambda_{i}-\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)\\
\text{s.t.} &\ \ \lambda_i \geq 0\\
& \sum_{i=1}^{n} \lambda_{i} y_{i}=0
\end{array}\right.
\]
又由于KKT条件,可得
\[\begin{aligned}
\nabla_{w} \mathcal{L} &=0\\
\nabla_{b} &=0 \\
g(\mathbf{x}) & \leq 0 \\
\lambda & \geq 0 \\
\lambda g(\mathbf{x}) &=0
\end{aligned}
\]
即\(\lambda \neq 0\)时,\(\left(1 - y_i\left(w^{T} x_i+b\right)\right)=0\)。
最终得
\[\begin{array}{rl}
w^* &= \sum_{i=1}^{n} \lambda_{i} x_{i} y_{i}\\
b^* &= \sum_{s\in S}y_s-w^Tx_s\\
&= \sum_{s\in S}y_s-(\sum_{i=1}^{n} \lambda_{i} x_{i} y_{i})x_s\\
\end{array}
\]
其中\(\lambda_{i}\)未知可以通过SMO算法求出
这是可以通过\(y^* = \text{sign}(w^*{^T}x+b^*)\)
这便是Hard Margin SVM(硬间隔支持向量机)。Hard Margin SVM是一个硬分类算法,所以对于存在异常数据和不可分的问题,效果不好,如果我们允许少量的样本跨过分界会有更好的效果,即Soft Margin SVM(软间隔支持向量机)。
Soft Margin SVM(软间隔支持向量机)
如何量化那条线更好呢?我们可以用过一个损失函数,最简单的就是穿过分界线的个数\(J = \text{count}_{s \in SS} (s) \ \ (S = \{(x,y) | y(W^Tx+b)<1\})\),但此函数不连续。另一种连续的函数跨过分界线距离之和\(J = \sum_{s \in S}1-y_s(W^Tx_s+b)\ \ (S = \{(x,y) | y(W^Tx+b)<1\})\)
每个样本的损失为\(loss = \max(0, 1-y_s(W^Tx_s+b))\),这时,我们得到了hinge loss(铰链损失)\(loss = max(0,1-z)\)
![image]()
这时候我们就可以通过,将原来改写成下列公式。
\[\left\{\begin{array}{rl}
& \arg \min_{w,b} & \frac{1}{2}w^Tw+C\sum_{i=1}^n\max(0, 1-y_s(W^Tx_s+b))\\
& \text{s.t.}\ \ & 1 - y_i\left(w^{T} x_i+b\right) \leq 0\\
\end{array}\right.
\]
通常情况下引入变量\(\xi\),来简写这个式子
\[\left\{\begin{array}{rll}
& \arg \min_{w,b} & \frac{1}{2}w^Tw+C\sum_{i=1}^n\xi_i\\
& \text{s.t.}\ \ & y_i\left(w^{T} x_i+b\right) \geq 1-\xi_i\\
& & \xi_i \geq 0
\end{array}\right.
\]
通过这两个式子限制损失项最小值为0。如何实现的呢?
通过这种方式求最小值,使得\(\xi\)不能太大,也就是满足下面两个条件的最小值,如果\(y_i\left(w^{T} x_i+b\right) \geq 1\),正确分类,这时候损失应为0,\(\xi\)最小值为0,否则迫使等号成立,即\(\xi_i = 1-y_i\left(w^{T} x_i+b\right)\)。经过化简即可求出(w,b)。