感知机(perceptron) 是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取 + 1 +1 +1和 − 1 -1 −1。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。感知机的目的是找到将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。
感知机模型
定义
假设输入空间(特征空间)是 χ ⊆ R n \chi \subseteq \mathbf{R}^n χ⊆Rn,输出空间是 Y = { + 1 , − 1 } \mathscr{Y}=\{+1,-1\} Y={+1,−1},输入 x ∈ χ x \in \chi x∈χ表示实例( n n n维特征向量),对应于输入空间的点;输出 y ∈ Y y \in \mathscr{Y} y∈Y表示实例的类别,由输入空间映射到输出空间,步骤如下:
- 将
n
n
n维输入向量
x
=
[
x
1
,
x
2
,
⋯
,
x
n
]
x=[x_1,x_2,\cdots,x_n]
x=[x1,x2,⋯,xn]经过与其相应的权重
w
=
[
w
1
,
w
2
,
⋯
,
w
n
]
w=[w_1,w_2,\cdots,w_n]
w=[w1,w2,⋯,wn]综合计算,得到
z = w 1 x 1 + w 2 x 2 + ⋯ + w n x n + b z = w_1x_1+w_2x_2+\cdots+w_nx_n+b z=w1x1+w2x2+⋯+wnxn+b
其中, z z z叫做感知机的净活性值, w ∈ R n w \in \mathbf{R}^n w∈Rn叫做感知机的权重向量(weight vector)或权重(weight), b ∈ R b \in \mathbf{R} b∈R叫做感知机的偏置(bias),写成向量形式:
z = w T x + b z=w^T x + b z=wTx+b - 在线性模型之后添加激活函数,得到:
a = s i g n ( z ) (1) a=sign(z) \tag{1} a=sign(z)(1)
称为感知机,其中, a a a叫做活性值, s i g n ( ⋅ ) sign(\cdot) sign(⋅)是符号函数:
s i g n ( z ) = { + 1 , z ≥ 0 − 1 , z < 0 (2) sign(z) = \begin{cases} +1, &z \geq 0 \\ -1, &z < 0 \tag{2} \end{cases} sign(z)={+1,−1,z≥0z<0(2)
由上述步骤可以看出,感知机是一种线性分类模型,属于判别模型。感知机模型的假设空间是定义在特征空间中的所有线性分类模型或线性分类器,即函数集合 { f ∣ f ( x ) = w T x + b } \{f|f(x)=w^T x + b\} {f∣f(x)=wTx+b}。
几何解释
感知机模型中的线性方程:
w
T
x
+
b
=
0
(3)
w^T x + b=0 \tag{3}
wTx+b=0(3)
对应于特征空间
R
n
\mathbf{R}^n
Rn中的一个超平面
S
S
S,其中
w
w
w是超平面的法向量,
b
b
b是超平面的截距。这个超平面将特征空间划分为两个部分。位于两部分的点(特征向量)分别被分为正、负两类。因此,超平面
S
S
S又称为分离超平面,如下图所示:
感知机学习策略
数据集的线性可分性
给定一个数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}
T={(x1,y1),(x2,y2),⋯,(xN,yN)}
其中
x
i
∈
χ
⊆
R
n
,
y
i
∈
Y
=
{
+
1
,
−
1
}
,
i
=
1
,
2
,
⋯
,
N
x_i \in \chi \subseteq \mathbf{R}^n,y_i \in \mathscr{Y}=\{+1,-1\},i=1,2,\cdots,N
xi∈χ⊆Rn,yi∈Y={+1,−1},i=1,2,⋯,N,如果存在某个超平面
S
S
S能够将数据集的正实例点和负实例点完全正确地划分到超平面地两侧,则称数据集
T
T
T为线性可分数据集;否则,称数据集
T
T
T线性不可分。
学习策略
假设训练数据集是线性可分的,感知机学习的目标是找到一个能够将训练集的正实例点和负实例点完全正确分开的分离超平面。为了找出这样的超平面,即计算出感知机模型参数
w
,
b
w,b
w,b,需要定义一个学习策略,即定义损失函数,并将损失函数极小化。
损失函数的一个自然选择是误分类点的总数。但是,这样的损失函数对于参数
w
,
b
w,b
w,b不是连续可导函数,不易优化。损失函数的另一个选择是误分类点到超平面
S
S
S的总距离,这是感知机所采用的损失函数。输入空间
R
n
\mathbf{R}^n
Rn中的任一点
x
0
x_0
x0到超平面
S
S
S的距离:
∣
w
T
x
0
+
b
∣
∣
∣
w
∣
∣
\frac{|w^Tx_0+b|}{||w||}
∣∣w∣∣∣wTx0+b∣
这里,
∣
∣
w
∣
∣
||w||
∣∣w∣∣是
w
w
w的
L
2
L_2
L2范数。
其次,对于误分类的数据
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)来说,
−
y
i
(
w
T
x
i
+
b
)
>
0
-y_i(w^Tx_i+b)>0
−yi(wTxi+b)>0
成立。因为当
w
T
x
i
+
b
>
0
w^Tx_i+b>0
wTxi+b>0时,
y
i
=
−
1
y_i=-1
yi=−1;而当
w
T
x
i
+
b
<
0
w^Tx_i+b<0
wTxi+b<0时,
y
i
=
+
1
y_i=+1
yi=+1。因此,误分类点到超平面
S
S
S的距离为:
−
y
i
(
w
T
x
i
+
b
)
∣
∣
w
∣
∣
-\frac{y_i(w^Tx_i+b)}{||w||}
−∣∣w∣∣yi(wTxi+b)
这样,假设超平面
S
S
S的误分类点集合为
M
M
M,那么所有误分类点到超平面
S
S
S的总距离为:
−
1
∣
∣
w
∣
∣
∑
x
i
∈
M
y
i
(
w
T
x
i
+
b
)
-\frac{1}{||w||} \sum_{x_i \in M} y_i(w^Tx_i+b)
−∣∣w∣∣1xi∈M∑yi(wTxi+b)
不考虑
1
∣
∣
w
∣
∣
\frac{1}{||w||}
∣∣w∣∣1,就得到感知机学习的损失函数。
给定训练集:
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}
T={(x1,y1),(x2,y2),⋯,(xN,yN)}
其中
x
i
∈
χ
⊆
R
n
,
y
i
∈
Y
=
{
+
1
,
−
1
}
,
i
=
1
,
2
,
⋯
,
N
x_i \in \chi \subseteq \mathbf{R}^n,y_i \in \mathscr{Y}=\{+1,-1\},i=1,2,\cdots,N
xi∈χ⊆Rn,yi∈Y={+1,−1},i=1,2,⋯,N。感知机
s
i
g
n
(
w
T
x
+
b
)
sign(w^T x + b)
sign(wTx+b)学习的损失函数定义为:
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
T
x
i
+
b
)
(4)
L(w,b)=-\sum_{x_i \in M} y_i(w^Tx_i+b) \tag{4}
L(w,b)=−xi∈M∑yi(wTxi+b)(4)
其中
M
M
M为误分类点的集合。
感知机算法
感知机学习问题转化为求解损失函数式(4)的最优化问题,最优化的方法是随机梯度下降法。
感知机学习算法的原始形式
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}
T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中
x
i
∈
R
n
,
y
i
∈
{
+
1
,
−
1
}
,
i
=
1
,
2
,
⋯
,
N
x_i \in \mathbf{R}^n,y_i \in \{+1,-1\},i=1,2,\cdots,N
xi∈Rn,yi∈{+1,−1},i=1,2,⋯,N;学习率
η
(
0
<
η
<
1
)
\eta(0<\eta<1)
η(0<η<1)。
输出:
w
,
b
w,b
w,b,感知机模型
f
(
x
)
=
s
i
g
n
(
w
T
x
+
b
)
f(x)=sign(w^T x + b)
f(x)=sign(wTx+b)。
(1) 选取初始值
w
0
,
b
0
w_0,b_0
w0,b0;
(2) 在训练集中选取数据
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi);
(3) 如果
y
i
(
w
T
x
i
+
b
)
≤
0
y_i(w^T x_i + b) \leq 0
yi(wTxi+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
(4) 转至(2),直至训练集中没有误分类点。
上述算法过程可理解为:当一个实例点被误分类,即位于分离超平面的错误一侧时,则调整
w
,
b
w,b
w,b的值,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面之间的距离,直至超平面越过该误分类点使其被正确分类。
感知机算法的对偶形式
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}
T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中
x
i
∈
R
n
,
y
i
∈
{
+
1
,
−
1
}
,
i
=
1
,
2
,
⋯
,
N
x_i \in \mathbf{R}^n,y_i \in \{+1,-1\},i=1,2,\cdots,N
xi∈Rn,yi∈{+1,−1},i=1,2,⋯,N;学习率
η
(
0
<
η
<
1
)
\eta(0<\eta<1)
η(0<η<1)。
输出:
α
,
b
\alpha,b
α,b,感知机模型
f
(
x
)
=
s
i
g
n
(
∑
j
=
1
N
α
j
y
j
x
j
⋅
x
+
b
)
f(x)=sign(\sum_{j=1}^N \alpha_jy_jx_j \cdot x+b)
f(x)=sign(∑j=1Nαjyjxj⋅x+b),其中
α
=
(
α
1
,
α
2
,
⋯
,
α
N
)
T
\alpha=(\alpha_1,\alpha_2,\cdots,\alpha_N)^T
α=(α1,α2,⋯,αN)T。
(1)
α
←
0
,
b
←
0
\alpha \leftarrow \mathbf{0},b \leftarrow \mathbf{0}
α←0,b←0;
(2)在训练集中选取数据
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi);
(3)如果
y
i
(
∑
j
=
1
N
α
j
y
j
x
j
⋅
x
i
+
b
)
≤
0
y_i(\sum_{j=1}^N \alpha_jy_jx_j \cdot x_i+b) \leq 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
(4)转至(2),直至训练集中没有误分类点。
参考:
[1] 李航.统计学习方法(第2版)[D].清华大学出版社.