从感知机说起
感知机(Perceptron)是一种简单的线性二类分类模型,同时也是神经网络和支持向量机的基础。感知机学习的目标是得到一个能将实例划分为正负两类的分离超平面。它的分类决策函数定义如下:
f
(
x
)
=
s
i
g
n
(
w
x
+
b
)
f(\mathbf x) = sign(\mathbf w\mathbf x+b)
f(x)=sign(wx+b)
其中
x
\mathbf x
x为输入数据的特征向量,
w
\mathbf w
w和
b
b
b为模型参数,
s
i
g
n
(
x
)
sign(x)
sign(x)为指示函数,当
x
>
=
0
x>=0
x>=0时取1,
x
<
0
x<0
x<0取-1。那么
w
x
+
b
=
0
\mathbf w\mathbf x+b = 0
wx+b=0 就是我们要找的超平面,下一步就是确定这个超平面的参数。我们的目标可以再细化一下,也就是让误分类的点到超平面的距离越小越好,等价于下面公式:
L
(
w
,
b
)
=
−
1
∣
∣
w
∣
∣
∑
x
i
∈
M
y
i
(
w
x
i
+
b
)
L(\mathbf w,b) = -\frac{1}{||\mathbf w||}\sum_{\mathbf x_{i}\in M} y_{i}(\mathbf w \mathbf x_{i}+b)
L(w,b)=−∣∣w∣∣1xi∈M∑yi(wxi+b)
其中集合
M
M
M为所有的误分类点集合。损失函数非负,当所有的输入数据都被正确分类的话,那么损失函数为0。常数项
1
∣
∣
w
∣
∣
\frac{1}{||\mathbf w||}
∣∣w∣∣1不影响最优解的自变量,那么就可以得到感知机的损失函数:
m
i
n
w
,
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
x
i
+
b
)
min _{\mathbf w,b} L(\mathbf w,b) = -\sum_{\mathbf x_{i}\in M} y_{i}(\mathbf w \mathbf x_{i}+b)
minw,bL(w,b)=−xi∈M∑yi(wxi+b)
参数的学习采用梯度下降来学习, 损失函数分别对w和b求偏导数得到梯度:
∇
w
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
x
i
\nabla_{\mathbf w} L(\mathbf w,b) = -\sum_{\mathbf x_{i}\in M} y_{i} \mathbf x_{i}
∇wL(w,b)=−xi∈M∑yixi
∇
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
\nabla_{b} L(\mathbf w,b) = -\sum_{\mathbf x_{i}\in M} y_{i}
∇bL(w,b)=−xi∈M∑yi
然后更新w和b:
w
:
=
w
+
η
∇
w
L
(
w
,
b
)
\mathbf w:=\mathbf w+\eta \nabla_{\mathbf w} L(\mathbf w,b)
w:=w+η∇wL(w,b)
b
:
=
b
+
η
∇
b
L
(
w
,
b
)
b:=b+\eta \nabla_{b} L(\mathbf w,b)
b:=b+η∇bL(w,b)
其中
η
\eta
η为学习率。通过不过迭代使得损失函数最小,最后得到的w和b就是符合要求的参数。
需要注意的是,感知机得到的超平面不是唯一,采用不同的初值会有不同的误分类点从而得到不同的超平面。图一中可以画出无数个超平面使得正负样本分离。
三大核心
和感知机类似,支持向量机(Support vector machine)的目标也是要学得一个能让正负实例分离的超平面;不同的是,支持向量机学到的超平面还需要保证正负实例几何间隔最大化。间隔最大化的直观理解是不仅要让正负实例分开,而且离超平面最近的点也需要有足够大的确信度分开。针对输入数据是否线性可分,可以将支持向量机分为线性和非线性两大类。
支持向量
那么现在来一点一点地分析上面的要求。和感知机类似,我们最终也是要学一个超平面,用
w
x
+
b
=
0
\mathbf w \mathbf x+b = 0
wx+b=0表示。那么点
x
i
\mathbf x_{i}
xi到超平面的几何间隔可以表示为:
γ
i
=
y
i
(
w
x
i
+
b
)
∣
∣
w
∣
∣
\gamma_{i} = \frac{y_{i}(\mathbf w \mathbf x_{i}+b)}{||\mathbf w||}
γi=∣∣w∣∣yi(wxi+b)
假设所有样本点到超平面的最短距离为:
γ
=
min
i
=
1
,
2
,
3...
,
N
γ
i
\gamma =\min_{i=1,2,3...,N} \gamma_{i}
γ=i=1,2,3...,Nminγi
那么要想几何间隔最大化即只要满足离超平面最近的点间隔最大即可:
max
w
,
b
γ
\max_{\mathbf w,b} \gamma
w,bmaxγ
s
.
t
.
y
i
(
w
x
i
+
b
)
∣
∣
w
∣
∣
≥
γ
s.t. \frac{y_{i}(\mathbf w \mathbf x_{i}+b)}{||\mathbf w||} \geq \gamma
s.t.∣∣w∣∣yi(wxi+b)≥γ
这句话很拗口,这样我们慢慢分析。前面提到了感知机的损失函数是让误分类点到超平面的距离越近越好,也就是说离超平面远的点都是明确被分类的点,只有那些“立场不稳”的点才会在超平面附近,也就说它们很有可能被分类错。那从这角度讲,我们只需要关心那些离平面最近的点即可,只要它们被正确分类,那所有点都被正确分类。 这也就是找到最短距离点的意义。那么为什么要满足几何间隔最大化?很简单,只要所有点到这个平面的距离都不小于这个最小距离,那么所有的点不被正确分类了吗?
其实到这里我们也可以想到,这是严格的能完全的分类,也就是硬间隔最大化。
不等式两边同时除以
γ
\gamma
γ,且转换
w
,
b
\mathbf w,b
w,b:
w
:
=
w
∣
∣
w
∣
∣
γ
\mathbf w:= \frac{\mathbf w}{||\mathbf w||\gamma}
w:=∣∣w∣∣γw,
b
:
=
b
∣
∣
w
∣
∣
γ
b:=\frac{b}{||\mathbf w||\gamma}
b:=∣∣w∣∣γb,可以得到一个更加简洁的表达:
min
w
,
b
1
2
∣
∣
w
∣
∣
2
\min_{\mathbf w,b}\frac{1}{2}||\mathbf w||^{2}
w,bmin21∣∣w∣∣2
y
i
(
w
x
i
+
b
)
≥
1
y_{i}(\mathbf w \mathbf x_{i}+b)\geq 1
yi(wxi+b)≥1
考虑到
γ
\gamma
γ是个常数,因此,最大化目标函数变成最大化
1
∣
∣
w
∣
∣
\frac{1}{||\mathbf w||}
∣∣w∣∣1,同时也等价于
1
2
∣
∣
w
∣
∣
2
\frac{1}{2}||\mathbf w||^{2}
21∣∣w∣∣2。这里1/2是为了求导方便。假设求得的最优值为
w
∗
,
b
∗
\mathbf w^{*},b^{*}
w∗,b∗,则最终的最优超平面为
w
∗
x
+
b
∗
=
0
\mathbf w^{*}\mathbf x+b^{*}=0
w∗x+b∗=0,分类决策函数为
f
(
x
)
=
s
i
g
n
(
w
∗
x
+
b
∗
)
f(x) = sign(\mathbf w^{*}\mathbf x+b^{*})
f(x)=sign(w∗x+b∗)。距离分割平面最近的点也就是支持向量:
很显然,只有支持向量才能决定超平面的位置,那么训练的时候大部分样本不影响超平面的位置。
KKT条件
那么如何去优化得到最终的参数呢?上式是一个不等式约束的凸二次优化问题,这里采用拉格朗日乘法得到:
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
−
∑
i
=
1
N
α
i
(
y
i
(
w
⋅
x
i
+
b
)
−
1
)
L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^{2}-\sum_{i=1}^{N} \alpha_{i}\left(y_{i}\left(\boldsymbol{w} \cdot \boldsymbol{x}_{i}+b\right)-1\right)
L(w,b,α)=21∥w∥2−i=1∑Nαi(yi(w⋅xi+b)−1)
其中
α
i
\mathbf \alpha_{i}
αi为乘法算子。问题求解即是求
min
w
,
b
max
α
L
(
w
,
b
,
α
)
\min _{w, b} \max _{\alpha} L(w, b, \alpha)
minw,bmaxαL(w,b,α)。但是直接求该问题有要面临先满足不等式约束,比较复杂。因此将该问题转换成求对偶问题:
max
α
min
w
,
b
L
(
w
,
b
,
α
)
\max _{\alpha} \min _{w, b} L(w, b, \alpha)
αmaxw,bminL(w,b,α)
分别对两个参数求偏导数得到:
w
=
∑
i
=
1
N
α
i
y
i
x
i
∑
i
=
1
N
α
i
y
i
=
0
\begin{array}{c} \boldsymbol w=\sum_{i=1}^{N} \alpha_{i} y_{i} x_{i} \\ \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \end{array}
w=∑i=1Nαiyixi∑i=1Nαiyi=0
代入到
L
(
w
,
b
,
α
)
L(\boldsymbol{w}, b, \boldsymbol{\alpha})
L(w,b,α)得到
min
w
,
b
L
(
w
,
b
,
α
)
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
\min _{w, b} L(w, b, \alpha)=-\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)+\sum_{i=1}^{N} \alpha_{i}
w,bminL(w,b,α)=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
同时不等式满足下面的KKT条件:
{
α
i
≥
0
y
i
(
w
i
⋅
x
i
+
b
)
−
1
≥
0
α
i
(
y
i
(
w
i
⋅
x
i
+
b
)
−
1
)
=
0
\left\{\begin{array}{l} \alpha_{i} \geq 0 \\ y_{i}\left(\boldsymbol{w}_{i} \cdot \boldsymbol{x}_{i}+b\right)-1 \geq 0 \\ \alpha_{i}\left(y_{i}\left(\boldsymbol{w}_{i} \cdot \boldsymbol{x}_{i}+b\right)-1\right)=0 \end{array}\right.
⎩⎨⎧αi≥0yi(wi⋅xi+b)−1≥0αi(yi(wi⋅xi+b)−1)=0
KKT条件表明,要么
α
i
=
0
\alpha_{i}=0
αi=0即该点,要么
y
i
(
w
i
⋅
x
i
+
b
)
=
1
y_{i}(\boldsymbol{w}_{i} \cdot \boldsymbol{x}_{i}+b)=1
yi(wi⋅xi+b)=1也就是该点出现在位于最大间隔上,即该点为支持向量。然后我们再把原问题换回来,得到下面的最优化问题:
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⊤
x
j
)
−
∑
i
=
1
N
α
i
s.t.
∑
i
=
1
N
α
i
y
i
=
0
α
i
≥
0
,
i
=
1
,
2
,
…
,
N
\begin{aligned} &\min _{\alpha} \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(\boldsymbol{x}_{i}\top \boldsymbol{x}_{j}\right)-\sum_{i=1}^{N} \alpha_{i}\\ &\text {s.t.} \quad \sum_{i=1}^{N} \alpha_{i} y_{i}=0\\ &\alpha_{i} \geq 0, i=1,2, \dots, N \end{aligned}
αmin21i=1∑Nj=1∑Nαiαjyiyj(xi⊤xj)−i=1∑Nαis.t.i=1∑Nαiyi=0αi≥0,i=1,2,…,N
一般使用SMO算法求解上述公式的参数
α
i
\mathbf \alpha_{i}
αi。基本思路是先固定
α
i
\mathbf \alpha_{i}
αi之外的参数,然后求
α
i
\mathbf \alpha_{i}
αi的极值。之后可以得到超平面的参数:
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
\begin{array}{l} \boldsymbol{w}^{*}=\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} \boldsymbol{x}_{i} \\ b^{*}=y_{j}-\sum_{i=1}^{N} \alpha_{i}^{*} y_{i}\left(\boldsymbol{x}_{i} \cdot \boldsymbol{x}_{j}\right) \end{array}
w∗=∑i=1Nαi∗yixib∗=yj−∑i=1Nαi∗yi(xi⋅xj)
上面我们谈到的间隔最大是硬间隔最大,但是实际情况下几乎不存在完全线性可分的数据。因此,引入了“软间隔”的概念,即允许某些点不满足约束。引入软间隔之后,支持向量机的损失函数就是hinge loss。软间隔下确定超平面的求解流程和硬间隔的类似,这里不做赘述。
核方法
当训练样本线性不可分,也就是我们无法找到一个超平面使得样本正确分类,那我们就需要将样本从原始空间映射到其它的高维空间。比如二维空间的异或问题无法找到一个平面使得它们正确分类,但是如果能映射到三维空间,那么总能找到一个有效的超平面:
这里的
ϕ
(
x
)
\phi(x)
ϕ(x)即为映射函数。因此要想用线性分类方法求得非线性分类的问题分成两个步骤:
1、找到一个非线性变换将原空间的数据映射到新的空间;
2、在新的空间使用线性分类学习方法从线性分类数据中学习分类模型。
这样的技巧又叫核方法。在目标函数中与输入空间相关的公式是:
x
i
⊤
x
j
\mathbf x_{i}^{\top} \mathbf x_{j}
xi⊤xj,那么使用映射函数转换得到:
ϕ
(
x
i
)
⊤
ϕ
(
x
j
)
\phi (\mathbf x_{i})^{\top} \phi (\mathbf x_{j})
ϕ(xi)⊤ϕ(xj).这样看映射函数比较难以显式确定,基于此,我们考虑得到定义
ϕ
(
x
i
)
⊤
ϕ
(
x
j
)
\phi (\mathbf x_{i})^{\top} \phi (\mathbf x_{j})
ϕ(xi)⊤ϕ(xj)即:
K
(
x
,
z
)
=
<
ϕ
(
x
)
,
ϕ
(
z
)
>
=
ϕ
(
x
i
)
⊤
ϕ
(
x
j
)
K(x,z) = <\phi(x),\phi(z)> = \phi (\mathbf x_{i})^{\top} \phi (\mathbf x_{j})
K(x,z)=<ϕ(x),ϕ(z)>=ϕ(xi)⊤ϕ(xj),
这样问题就转换成求核函数
K
(
x
,
z
)
K(x,z)
K(x,z)。那么核函数是否就一定存在?哪些核函数符合要求呢?
一般来讲,只要一个函数所对应的核矩阵半正定,它就能作为核函数使用。因此,对于一个线性不可分的数据集而言,我们不知道什么核函数是合适且核函数也只是隐式定义了将样本数据映射到的特征空间。常用的核函数有:
高斯核函数:
K
(
x
i
,
x
j
)
=
e
x
p
(
−
∣
∣
x
i
−
x
j
∣
∣
2
2
σ
2
)
K(\mathbf x_{i}, \mathbf x_{j}) = exp(- \frac{||\mathbf x_{i} - \mathbf x_{j}||^2}{2 \sigma^2})
K(xi,xj)=exp(−2σ2∣∣xi−xj∣∣2).
总结
支持向量机是一种常用的判别模型,根据数据实例是否线性可分分为线性SVM和非线性SVM。大多数样本点并不能对SVM最后求得的超平面产生影响,只有支持向量影响最终的超平面。SVM采用的loss一般是hinge loss。
Preference
1.统计学习方法,李航
2.机器学习,周志华
3.https://zhuanlan.zhihu.com/p/31886934