概念
感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的分类,取+1和-1二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。
感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降对损失函数进行极小化,求得感知机模型。
感知机学习算法分为原始形式和对偶形式。
模型
定义:由输入空间到输出空间的函数:
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign(w·x+b)
f(x)=sign(w⋅x+b),称为感知机;其中
w
w
w 和
b
b
b 为感知机模型的参数,
w
∈
R
n
w\in\mathbf{R}^n
w∈Rn叫作权值(weight)或权值向量(weight vector),
b
∈
R
b\in\mathbf{R}
b∈R叫作偏置(bias),
w
⋅
x
w·x
w⋅x表示内积,
s
i
g
n
sign
sign为符号函数,即
s
i
g
n
(
x
)
=
{
+
1
,
x
≥
0
−
1
,
x
<
0
sign(x)=\begin{cases}+1, & x\ge0\\-1, & x <0\end{cases}
sign(x)={+1,−1,x≥0x<0
策略
数据集的线性可分性:这个是前提,也是选择感知机模型的必要条件;即存在摸个超平面 w ⋅ x + b = 0 w·x+b = 0 w⋅x+b=0能够将数据集的正、负实例点一分为二。
学习目标:感知机学习的目标是求得一个能够将训练集正实例点和负实例点完全分开的分离超平面。
损失函数定义: L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) L(w,b)=-\sum_{x_i \in M}y_i(w·x_i+b) L(w,b)=−xi∈M∑yi(w⋅xi+b)其中 M M M为误分类点的集合。
损失函数 L ( w , b ) L(w,b) L(w,b) 是非负的,如果没有误分类点,损失函数值为0;误分类点越少,误分类点离超平面越近,损失值就越小。一个特定的样本点的损失函数:在误分类时是参数 w w w, b b b的线性函数,在正确分类时是0。因此,给定训练数据集 T T T,损失函数 L ( w , b ) L(w,b) L(w,b)是 w w w, b b b的连续可导函数
算法
1、原始形式
感知机学习算法是误分类驱动的,具体采用随机梯度下降法。
首先,任意选取一个超平面
w
0
w_0
w0,
b
0
b_0
b0,然后用梯度下降法不断地极小化目标函数(损失函数)。极小化过程中不是一次使
M
M
M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。
假设误分类点集合
M
M
M是固定的,那么损失函数
L
(
w
,
b
)
L(w,b)
L(w,b) 的梯度如下:
∇
w
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
x
i
\nabla_w L(w,b)=-\sum_{x_i \in M}y_ix_i
∇wL(w,b)=−xi∈M∑yixi
∇
b
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
\nabla_b L(w,b)=-\sum_{x_i \in M}y_i
∇bL(w,b)=−xi∈M∑yi
随机选取一个误分类点 ( x i , y i ) (x_i,y_i) (xi,yi),对 L ( w , b ) L(w,b) L(w,b)进行更新(取梯度下降的反向): w ← w + η y i x i w\gets w+\eta y_ix_i w←w+ηyixi b ← b + η y i b\gets b+\eta y_i b←b+ηyi其中 η ( 0 < η ≤ 1 ) \eta(0< \eta \le1) η(0<η≤1)是步长,又称为学习率。
2、对偶形式
将 w w w和 b b b表示为实例 x i x_i xi和标记 j i j_i ji的线性组合的形式,通过求解其系数而求得 w w w和 b b b。
对误分类点 ( x i , y i ) (x_i,y_i) (xi,yi)通过 w ← w + η y i x i w\gets w+\eta y_ix_i w←w+ηyixi b ← b + η y i b\gets b+\eta y_i b←b+ηyi逐步修改 w w w和 b b b,设修改 n n n次,则 w w w和 b b b关于 ( x i , y i ) (x_i,y_i) (xi,yi)的增量分别是 α i y i x i \alpha_iy_ix_i αiyixi和 α i y i \alpha_iy_i αiyi,这里 α i = n i η \alpha_i=n_i\eta αi=niη。这样,从学习过程不难看出,最后学习到的 w w w和 b b b可以分别表示为 w = ∑ i = 1 α i y i x i w=\sum_{i=1}\alpha_iy_ix_i w=i=1∑αiyixi b = ∑ i = 1 α i y i b=\sum_{i=1}\alpha_iy_i b=i=1∑αiyi,其中 α i ≥ 0 , i = 1 , 2 , 3 , ⋅ ⋅ ⋅ N \alpha_i\ge0,i=1,2,3,···N αi≥0,i=1,2,3,⋅⋅⋅N时,当 η = 1 \eta=1 η=1时,表示第 i i i个实例点由于误分而进行更新的次数。实例点更新次数越多,意味着它距离超平面越近,也就越正确分类。
对偶形式改写:
感知机模型:
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
=
s
i
g
n
(
∑
j
=
1
α
j
y
j
x
j
⋅
x
+
b
)
f(x)=sign(w·x+b)=sign(\sum_{j=1}\alpha_jy_jx_j·x+b)
f(x)=sign(w⋅x+b)=sign(j=1∑αjyjxj⋅x+b)
损失函数(误分类点):
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
=
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
∑
j
=
1
N
α
j
y
j
x
j
⋅
x
i
+
b
)
L(w,b)=-\sum_{x_i \in M}y_i(w·x_i+b)=L(w,b)=-\sum_{x_i \in M}y_i(\sum_{j=1}^N\alpha_jy_jx_j·x_i+b)
L(w,b)=−xi∈M∑yi(w⋅xi+b)=L(w,b)=−xi∈M∑yi(j=1∑Nαjyjxj⋅xi+b)
误点区分:
y
i
(
w
⋅
x
i
+
b
)
=
y
i
(
∑
j
=
1
N
α
j
y
j
x
j
⋅
x
i
+
b
)
≤
0
y_i(w·x_i+b)=y_i(\sum_{j=1}^N\alpha_jy_jx_j·x_i+b)\le0
yi(w⋅xi+b)=yi(j=1∑Nαjyjxj⋅xi+b)≤0
转换为(内积矩阵):
G
=
[
x
i
⋅
x
j
]
N
∗
N
G=[x_i·x_j]_{N*N}
G=[xi⋅xj]N∗N
推导
损失函数的由来: L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) L(w,b)=-\sum_{x_i \in M}y_i(w·x_i+b) L(w,b)=−xi∈M∑yi(w⋅xi+b)
假设存在一个超平面
S
:
w
⋅
x
+
b
=
0
S: w·x+b=0
S:w⋅x+b=0能够将数据集的正、负实例点一分为二。为了找到这样的超平面,即确定感知机模型参数
w
w
w和
b
b
b,需要确定一个学习策略,即定义损失函数并将损失函数极小化。
损失函数的一个自然选择是误分类点的总数,但是这样的损失函数不是
w
w
w和
b
b
b的连续可到函数,不易优化;所以损失函数的另一个选择是误分类点到超平面
S
S
S的总距离,这是感知机所采用的。
-
首先,点 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1)到面 A x + B y + C z + D = 0 Ax+By+Cz+D =0 Ax+By+Cz+D=0的距离公式:
d = ∣ A x 1 + B y 1 + C z 1 + D ∣ A 2 + B 2 + C 2 d= \cfrac{|Ax_1+By_1+Cz_1+D|} {\sqrt{A^2+B^2+C^2}} d=A2+B2+C2∣Ax1+By1+Cz1+D∣
w ⋅ x + b = 0 w·x+b=0 w⋅x+b=0也可以写成 [ w ( 1 ) , w ( 2 ) , ⋅ ⋅ ⋅ , w ( i ) , ⋅ ⋅ ⋅ , w ( n ) ] ⋅ [ x ( 1 ) , x ( 2 ) , ⋅ ⋅ ⋅ , x ( i ) , ⋅ ⋅ ⋅ , x ( n ) ] T + b = 0 [w^{(1)},w^{(2)},···,w^{(i)},···,w^{(n)}]·[x^{(1)},x^{(2)},···,x^{(i)},···,x^{(n)}]^T+b=0 [w(1),w(2),⋅⋅⋅,w(i),⋅⋅⋅,w(n)]⋅[x(1),x(2),⋅⋅⋅,x(i),⋅⋅⋅,x(n)]T+b=0,即输入空间 R n \mathbf{R}^n Rn(n维空间)上的超平面,其中任意一点都有n个维度。
所以输入空间 R n \mathbf{R}^n Rn中任意一点 x 0 x_0 x0到超平面 S S S的距离:
d = ∣ w ⋅ x 0 + b ∣ ∣ ∣ w ∣ ∣ d= \cfrac{|w·x_0+b|} {||w||} d=∣∣w∣∣∣w⋅x0+b∣
∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣是 w w w的 L 2 L_2 L2的范数,即( w ( i ) w^{(i)} w(i)指输入的一个维度)
∣ ∣ w ∣ ∣ = ∑ i = 1 n ( w ( i ) ) 2 ||w||=\sqrt{\sum_{i=1}^n({w^{(i)}})^2} ∣∣w∣∣=i=1∑n(w(i))2 -
其次,因为当 w ⋅ x i + b > 0 w·x_i+b>0 w⋅xi+b>0时, y i = − 1 y_i=-1 yi=−1,而当当 w ⋅ x i + b < 0 w·x_i+b<0 w⋅xi+b<0时, y i = + 1 y_i=+1 yi=+1,所以对于误分类的数据 ( x i , y i ) (x_i,y_i) (xi,yi)来说, − y i ( w ⋅ x i + b ) > 0 -y_i(w·x_i+b)>0 −yi(w⋅xi+b)>0
故误分类的点 x i x_i xi到超平面 S S S的距离为
d = − 1 ∣ ∣ w ∣ ∣ y i ( w ⋅ x i + b ) d=- \cfrac{1} {||w||}y_i(w·x_i+b) d=−∣∣w∣∣1yi(w⋅xi+b) -
然后,所有的误分类点加起来( M M M为误分类集合):
− 1 ∣ ∣ w ∣ ∣ ∑ x i ∈ M y i ( w ⋅ x i + b ) - \cfrac{1} {||w||}\sum_{x_i \in M}y_i(w·x_i+b) −∣∣w∣∣1xi∈M∑yi(w⋅xi+b) -
最后,不考虑 1 ∣ ∣ w ∣ ∣ {1\over ||w|| } ∣∣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·x_i+b) L(w,b)=−xi∈M∑yi(w⋅xi+b)