感知机是二分类的线性分类器,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值。感知机将特征空间中的实例划分为正负两类,属于判别模型。
感知机模型
模型
输入空间: X ⊆ R n \mathcal X\sube \bf R^n X⊆Rn
输出空间: Y = { + 1 , − 1 } \mathcal Y=\{+1,-1\} Y={+1,−1}
决策函数: f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign (w\cdot x+b) f(x)=sign(w⋅x+b)
其中sign是符号函数,即
s
i
g
n
(
x
)
=
{
1
,
x
≥
0
−
1
,
x
<
0
sign(x) = \begin{cases} 1,\qquad x \geq 0 \\-1, \qquad x < 0\end{cases}
sign(x)={1,x≥0−1,x<0
感知机将特征空间中的实例划分为正负两类,属于判别模型。
模型的几何解释
线性方程:
w
⋅
x
+
b
=
0
w\cdot x+b = 0
w⋅x+b=0
对应特征空间
R
n
\bf R^n
Rn 中的一个超平面
S
\bf S
S ,其中
w
w
w 是超平面的法向量,
b
b
b 是超平面的截距。
超平面将样本点分成两类。感知机的目标就是确定这个超平面。即确定模型的参数 w , b w,b w,b ,这就需要一个损失函数,并将损失函数极小化。
损失函数
选择误分类点到超平面 S \bf S S 的总距离作为损失函数。
首先,找出一个误分类点到超平面的距离
因为输入空间$\bf R^n $ 中任一点
x
0
x_0
x0到超平面
S
S
S 的距离:
1
∣
∣
w
∣
∣
∣
w
⋅
x
0
+
b
∣
\frac{1}{||w||}|w\cdot x_0 + b|
∣∣w∣∣1∣w⋅x0+b∣
对于误分类点来说:
w
⋅
x
0
+
b
w\cdot x_0 + b
w⋅x0+b 与
y
i
y_i
yi 总是符号相反。即:
−
y
i
(
w
⋅
x
0
+
b
)
>
0
-y_i(w\cdot x_0 + b)>0
−yi(w⋅x0+b)>0
所以一个误分类点到超平面之间的距离是:
−
1
∣
∣
w
∣
∣
y
i
(
w
⋅
x
0
+
b
)
-\frac{1}{||w||} y_i(w\cdot x_0 + b)
−∣∣w∣∣1yi(w⋅x0+b)
其次,假设所有的误分类点的集合是
M
M
M,所以所有误分类点到平面的总距离为:
−
1
∣
∣
w
∣
∣
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
-\frac{1}{||w||}\sum_{x_i\in M}y_i(w\cdot x_i+b)
−∣∣w∣∣1xi∈M∑yi(w⋅xi+b)
令
∣
∣
w
∣
∣
=
1
||w||=1
∣∣w∣∣=1,得到损失函数:
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b)
L(w,b)=−xi∈M∑yi(w⋅xi+b)
注意:损失函数是非负的,若不存在误分类点,则损失函数为0。
有了损失函数,接下来就是极小化损失函数,确定模型参数。
学习算法
学习算法的原始形式
给定一个训练集:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
N
,
y
N
)
}
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
…
,
N
;
0
<
η
⩽
1
T=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\} \\ x_i\in \mathcal X=\bf R^n, y_i\in \mathcal Y\it =\{-1,+1\}, i=1,2,\dots,N; 0<\eta\leqslant 1
T={(x1,y1),(x2,y2),…,(xN,yN)}xi∈X=Rn,yi∈Y={−1,+1},i=1,2,…,N;0<η⩽1
求
w
,
b
w,b
w,b,使得损失函数极小化:
min
w
,
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
\min\limits_{w,b} L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b)
w,bminL(w,b)=−xi∈M∑yi(w⋅xi+b)
采用梯度下降算法。假设误分类点M是固定的。所以有:
∂
L
(
w
,
b
)
∂
w
=
−
∑
x
i
∈
M
x
i
y
i
∂
L
(
w
,
b
)
∂
b
=
−
∑
x
i
∈
M
y
i
\frac{\partial L(w,b)}{\partial w} = -\sum_{x_i \in M} x_i y_i\\ \frac{\partial L(w,b)}{\partial b} = -\sum_{x_i \in M} y_i
∂w∂L(w,b)=−xi∈M∑xiyi∂b∂L(w,b)=−xi∈M∑yi
对于每一个分类点,对
w
,
b
w,b
w,b 进行更新:
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
w\leftarrow w+\eta y_ix_i \\ b\leftarrow b+\eta y_i
w←w+ηyixib←b+ηyi
具体算法流程如下:
输入:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
N
,
y
N
)
}
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
…
,
N
;
0
<
η
⩽
1
T=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\}\\ \\x_i\in \mathcal X=\bf R^n , y_i\in \mathcal Y\it =\{-1,+1\}, i=1,2,\dots,N; \ \ 0<\eta\leqslant 1
T={(x1,y1),(x2,y2),…,(xN,yN)}xi∈X=Rn,yi∈Y={−1,+1},i=1,2,…,N; 0<η⩽1
输出: w , b ; f ( x ) = s i g n ( w ⋅ x + b ) w,b;f(x)=sign(w\cdot x+b) w,b;f(x)=sign(w⋅x+b)
- 选取初值 w 0 , b 0 w_0,b_0 w0,b0
- 训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
- 如果 y i ( w ⋅ x i + b ) ⩽ 0 y_i(w\cdot x_i+b)\leqslant 0 yi(w⋅xi+b)⩽0
w ← w + η y i x i b ← b + η y i w\leftarrow w+\eta y_ix_i \\ b\leftarrow b+\eta y_i w←w+ηyixib←b+ηyi
- 转至(2),直至训练集中没有误分类点
学习算法的对偶形式
对偶形式的基本思想是:将 w w w和 b b b表示为实例 x i x_i xi和标记 y i y_i yi的线性组合的形式,通过求解其系数而求得 w w w和 b b b。
回顾
w
,
b
w,b
w,b 的更新过程:
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
w\leftarrow w+\eta y_ix_i \\ b\leftarrow b+\eta y_i
w←w+ηyixib←b+ηyi
对于某一个误分类点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi) 而言,他可能参与了
n
i
n_i
ni次的
w
,
b
w,b
w,b 的更新过程,直至超平面能使他成为正确分类点,他才不参与
w
,
b
w,b
w,b 的更新。所以此误分类点对
w
,
b
w,b
w,b 所贡献的增量分别为 $n_i\eta y_i x_i
和
和
和n_i\eta y_i
,
这
是
一
个
误
分
类
点
的
情
况
。
令
,这是一个误分类点的情况。令
,这是一个误分类点的情况。令\alpha_i = n_i\eta$,对于多个分类点,我们对其累加即可:
w
=
∑
i
=
1
N
n
i
η
y
i
x
i
=
∑
i
=
1
N
α
i
y
i
x
i
b
=
∑
i
=
1
N
n
i
η
y
i
=
∑
i
=
1
N
α
i
y
i
w = \sum_{i=1}^Nn_i\eta y_i x_i = \sum_{i=1}^N\alpha_i y_i x_i \\ b = \sum_{i=1}^Nn_i\eta y_i = \sum_{i=1}^N\alpha_i y_i
w=i=1∑Nniηyixi=i=1∑Nαiyixib=i=1∑Nniηyi=i=1∑Nαiyi
这样我们就实现了将
w
w
w和
b
b
b表示为实例
x
i
x_i
xi和标记
y
i
y_i
yi的线性组合的形式
输入:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } x i ∈ X = R n , y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , … , N ; 0 < η ⩽ 1 T=\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\}\\ x_i\in \mathcal{X}=\bf{R}^n , y_i\in \mathcal{Y} =\{-1,+1\}, i=1,2,\dots, N; 0< \eta \leqslant 1 T={(x1,y1),(x2,y2),…,(xN,yN)}xi∈X=Rn,yi∈Y={−1,+1},i=1,2,…,N;0<η⩽1输出:
α , b ; α = ( α 1 , α 2 , ⋯ , α N ) T f ( x ) = s i g n ( ∑ j = 1 N α j y j x j ⋅ x + b ) \alpha ,b;\quad\alpha=(\alpha_1,\alpha_2,\cdots,\alpha_N)^T \\f(x)=sign\left(\sum_{j=1}^N\alpha_jy_jx_j\cdot x+b\right)\\ α,b;α=(α1,α2,⋯,αN)Tf(x)=sign(j=1∑Nαjyjxj⋅x+b)
- α ← 0 , b ← 0 \alpha \leftarrow 0,b\leftarrow 0 α←0,b←0
- 训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
- 如果 y i ( ∑ j = 1 N α j y j x j ⋅ x i + b ) ⩽ 0 y_i\left(\sum_{j=1}^N\alpha_jy_jx_j\cdot x_i+b\right) \leqslant 0 yi(∑j=1Nαjyjxj⋅xi+b)⩽0
α i ← α i + η b ← b + η y i \alpha_i\leftarrow \alpha_i+\eta\\ b\leftarrow b+\eta y_i αi←αi+ηb←b+ηyi
- 转至(2),直至训练集中没有误分类点
Gram matrix
对偶形式中,训练实例仅以内积的形式出现。
为了方便可预先将训练集中的实例间的内积计算出来并以矩阵的形式存储,这个矩阵就是所谓的Gram矩阵
G
=
[
x
i
⋅
x
j
]
N
×
N
G=[x_i\cdot x_j]_{N\times N}
G=[xi⋅xj]N×N
感知机不能用于异或
现感知机是一种线性分类模型。而异或可以表示为如下形式:
x 1 x_1 x1 | x 2 x_2 x2 | y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
由图可知,这个问题是线性不可分的,所以不能用感知机。