对于一个二分类问题,其样本分布如下所示,其中 + , − +,- +,− 分别代表正负样本,红色和绿色代表两个线性分类器,这两个分类器哪个更好呢?
虽然这两个分类器都能把两类样本完全分开,训练误差为 0,但是红色的分类器更好,因为其泛化能力更强,即对新样本的判断能力更好。假设我们有两个新样本(如下图紫色样本所示):
左下角的紫色样本与正样本簇靠在一起,显然其应该属于正样本,同理,右上角的紫色样本理当属于负样本。但是,如果按照绿色分类器的结果,则会把这两个新样本分错。原因是因为其分类边界与样本距离太近了。因此,如果想让分类器的泛化性能较好,就应该让其和红色分类器一样,与样本间的间隔越大越好,这就是支持向量机(Support Vector Machine) 的主要思想。
一个线性分类边界可以用方程 w T x + b = 0 \boldsymbol w^T \boldsymbol x+b = 0 wTx+b=0 表示,我们假设分类间隔区域与样本接触的两条直线分别是 w T x + b = + 1 \boldsymbol w^T \boldsymbol x+b = +1 wTx+b=+1 和 w T x + b = − 1 \boldsymbol w^T \boldsymbol x+b = -1 wTx+b=−1,如下图所示:
我们希望:
我们可以把这两个条件统一成一个式子, y i ( w T x i + b ) ≥ 1 y_i(\boldsymbol w^T \boldsymbol x_i+b)\ge 1 yi(wTxi+b)≥1,其中 x i \boldsymbol x_i xi 和 y i y_i yi 分别表示第 i i i 个样本的特征和标签, y i ∈ { + 1 , − 1 } y_i\in \{+1,-1\} yi∈{+1,−1}。计算分类间隔的长度,得到:
γ = 2 ∥ w ∥ 2 \gamma = \frac{2}{\Vert \boldsymbol w \Vert_2} γ=∥w∥22 那么我们便可以得到 SVM 要求解的目标函数:
max w , b 2 ∥ w ∥ 2 \max_{\boldsymbol w,b} \frac{2}{\Vert \boldsymbol w \Vert_2} w,bmax∥w∥22 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 … , m s.t.\quad y_i(\boldsymbol w^T \boldsymbol x_i+b)\ge 1, i = 1,2\dots,m s.t.yi(wTxi+b)≥1,i=1,2…,m 这个公式的意义是:在不分错训练样本的约束下(即 y i ( w T x i + b ) ≥ 1 y_i(\boldsymbol w^T \boldsymbol x_i+b)\ge 1 yi(wTxi+b)≥1),使得分类间隔最大化。
显然,上述目标函数可以等价变换成:
(1) min w , b 1 2 ∥ w ∥ 2 2 \min_{\boldsymbol w,b} \frac{1}{2} \Vert \boldsymbol w \Vert_2^2 \tag{1} w,bmin21∥w∥22(1) s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 … , m s.t.\quad y_i(\boldsymbol w^T \boldsymbol x_i+b)\ge 1, i = 1,2\dots,m s.t.yi(wTxi+b)≥1,i=1,2…,m
对每个约束条件乘以拉格朗日乘子 α i ≥ 0 \alpha_i \ge 0 αi≥0 ,加到目标函数后面,得到拉格朗日函数:
L ( w , b , α ) = 1 2 ∥ w ∥ 2 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) L(\boldsymbol w,b,\boldsymbol \alpha)=\frac{1}{2} \Vert \boldsymbol w \Vert_2^2 + \sum_{i=1}^m \alpha_i(1-y_i(\boldsymbol w^T \boldsymbol x_i+b)) L(w,b,α)=21∥w∥22+i=1∑mαi(1−yi(wTxi+b)) 现在分析一下拉格朗日函数的最大值与原函数的关系:
从以上分析,我们得到:
max α L ( w , b , α ) = { 1 2 ∥ w ∥ 2 2 , 若 约 束 满 足 + ∞ , 若 约 束 不 满 足 \max_{\boldsymbol \alpha}L(\boldsymbol w,b,\boldsymbol \alpha)=\begin{cases} \frac{1}{2} \Vert \boldsymbol w \Vert_2^2, & 若约束满足 \\ +\infty, & 若约束不满足 \end{cases} αmaxL(w,b,α)={21∥w∥22,+∞,若约束满足若约束不满足 因此优化带约束的原目标函数(1)等价于优化不带约束的下列函数:
(2) min w , b max α L ( w , b , α ) \min_{\boldsymbol w,b} \max_{\boldsymbol \alpha} L(\boldsymbol w,b,\boldsymbol \alpha) \tag{2} w,bminαmaxL(w,b,α)(2) 若约束得不到满足的话,上述式子的结果为 + ∞ +\infty +∞,由于外层是求最小值,所以显然 + ∞ +\infty +∞ 不是 min \min min 想要的结果,因此如果存在参数满足约束的话,上述函数会尽可能往约束满足的方向求解。
虽然我们把问题转化成了公式(2),但是这个很难求解。此时我们考虑其对偶问题,只要把 max \max max 和 min \min min 的次序交换一下,就得到了原问题的对偶问题:
(3) max α min w , b L ( w , b , α ) \max_{\boldsymbol \alpha} \min_{\boldsymbol w,b} L(\boldsymbol w,b,\boldsymbol \alpha) \tag{3} αmaxw,bminL(w,b,α)(3) 这个问题比较容易求解,首先求内层最小化问题:
(4) min w , b L ( w , b , α ) \min_{\boldsymbol w,b} L(\boldsymbol w,b,\boldsymbol \alpha) \tag{4} w,bminL(w,b,α)(4) 只要对参数求导,令其为 0 即可,得到:
(5) w = ∑ i = 1 m α i y i x i \boldsymbol w = \sum_{i=1}^m \alpha_i y_i \boldsymbol x_i \tag{5} w=i=1∑mαiyixi(5) (6) ∑ i = 1 m α i y i = 0 \sum_{i=1}^m \alpha_i y_i = 0 \tag{6} i=1∑mαiyi=0(6) 把公式(5)代入公式(4),可得:
min w , b L ( w , b , α ) = 1 2 ∥ w ∥ 2 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) = 1 2 w T w + ∑ i = 1 m α i − ∑ i = 1 m α i y i w T x i − ∑ i = 1 m α i y i b = 1 2 w T w + ∑ i = 1 m α i − w T w − 0 ( 利 用 公 式 ( 5 ) , ( 6 ) ) = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j \begin{aligned} \min_{\boldsymbol w,b} L(\boldsymbol w,b,\boldsymbol \alpha) &= \frac{1}{2} \Vert \boldsymbol w \Vert_2^2 + \sum_{i=1}^m \alpha_i(1-y_i(\boldsymbol w^T \boldsymbol x_i+b)) \\ & = \frac{1}{2} \boldsymbol w^T \boldsymbol w + \sum_{i=1}^m \alpha_i-\sum_{i=1}^m \alpha_i y_i \boldsymbol w^T \boldsymbol x_i-\sum_{i=1}^m \alpha_i y_i b\\ & = \frac{1}{2} \boldsymbol w^T \boldsymbol w + \sum_{i=1}^m \alpha_i - \boldsymbol w^T \boldsymbol w - 0 \quad(利用公式(5),(6))\\ & = \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i \alpha_j y_i y_j \boldsymbol x_i^T \boldsymbol x_j \end{aligned} w,bminL(w,b,α)=21∥w∥22+i=1∑mαi(1−yi(wTxi+b))=21wTw+i=1∑mαi−i=1∑mαiyiwTxi−i=1∑mαiyib=21wTw+i=1∑mαi−wTw−0(利用公式(5),(6))=i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj 所以对偶问题转化为:
(7) max α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j \max_{\boldsymbol \alpha} \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i \alpha_j y_i y_j \boldsymbol x_i^T \boldsymbol x_j \tag{7} αmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj(7) s . t . ∑ i = 1 m α i y i = 0 α i ≥ 0 , i = 1 , 2 , … , m \begin{aligned} s.t.\quad & \sum_{i=1}^m \alpha_i y_i = 0 \\ & \alpha_i \ge 0, \quad i = 1,2,\dots,m \end{aligned} s.t.i=1∑mαiyi=0αi≥0,i=1,2,…,m
前面我们一直在尝试求对偶问题的解,但是对偶问题与原问题真的完全等价吗?求出了对偶问题的最优值就能得到原问题的最优值吗?答案是不一定。但是对偶问题与原问题之间确实存在一定的联系。令 p ∗ p^* p∗ 为原问题的最优值, d ∗ d^* d∗ 是对偶问题的最优值:
原问题公式(1)的目标函数和约束条件都是凸函数,因此原问题是凸问题。另外,由于约束函数是仿射函数,因此只要存在参数满足公式(1)的约束(即只要样本是线性可分的),那么 Slater 条件就满足。由此我们可以看出,对于这个问题,强对偶性是成立的。所以,我们只要求出对偶问题的最优值,就可断定其一定也是原问题的最优值。
不过,我们提到的是原问题和对偶问题的最优值相等,其实它们的最优解之间也存在一定的联系。令 w , b \boldsymbol w, b w,b 是原问题的最优解, α \boldsymbol \alpha α 是对偶问题的最优解, f ( x ) = w T x + b f(\boldsymbol x)=\boldsymbol w^T \boldsymbol x + b f(x)=wTx+b, 那么对于 i = 1 , 2 … , m i = 1,2\dots,m i=1,2…,m, 一定有下列关系满足:
{ y i f ( x i ) ≥ 1 α i ≥ 0 α i ( y i f ( x i ) − 1 ) = 0 ∂ L ∂ w = 0 ∂ L ∂ b = 0 \begin{cases} y_i f(\boldsymbol x_i)\ge 1 \\ \alpha_i \ge 0 \\ \alpha_i (y_i f(\boldsymbol x_i)-1) = 0 \\ \frac{\partial L}{\partial \boldsymbol w}=0 \\ \frac{\partial L}{\partial b}=0 \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧yif(xi)≥1αi≥0αi(yif(xi)−1)=0∂w∂L=0∂b∂L=0 上述条件被称作 KKT 条件。当原问题是凸问题且强对偶性成立时,KKT 条件是最优解的充分必要条件。
从公式(5)可以看出,参数 w \boldsymbol w w 是样本 x i \boldsymbol x_i xi 的线性组合,权重为 α i \alpha_i αi(因为 y i ∈ { + 1 , − 1 } y_i\in \{+1,-1\} yi∈{+1,−1},只决定符号,不影响大小)。 现在我们重点关注第三个条件,被称为互补松弛性条件, α i ( y i f ( x i ) − 1 ) = 0 \alpha_i (y_i f(\boldsymbol x_i)-1) = 0 αi(yif(xi)−1)=0,具体分析如下:
所以可以看出,分类边界的参数 w \boldsymbol w w 只与少数的那些在边界上(即 α i > 0 \alpha_i > 0 αi>0)的样本有关,这些样本被称为支持向量,这就是支持向量机的名字由来。
对公式(7)进行求解,解得一组 α i \alpha_i αi。常用的算法是 SMO(Sequential Minimal Optimization) 算法,SMO 算法不断执行下列两个步骤直到收敛:
求出 α \boldsymbol \alpha α 之后,代入公式(5)即可求出 w \boldsymbol w w。而对于任意的支持向量,都有 y i f ( x i ) = 1 y_i f(\boldsymbol x_i)=1 yif(xi)=1,所以只要代入任意一个支持向量,即可求出 b b b。在现实中,我们常用一种更鲁棒性的做法:使用所有支持向量求出的 b b b 的平均值。