感知机(perceptron)是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取
+
1
+1
+ 1 和
−
1
-1
− 1 二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。
1. 感知机模型
假设输入空间(特征空间)是
X
⊆
R
n
{X}\subseteq {R}^n
X ⊆ R n ,输出空间是
Y
=
{
+
1
,
−
1
}
Y=\{+1, -1\}
Y = { + 1 , − 1 } ,输入
x
∈
X
x \in X
x ∈ X 表示实例的特征向量,对应于输入空间(特征空间)的点;输出
y
∈
Y
y \in Y
y ∈ Y 表示实例的类别。由输入空间到输出空间的如下函数:
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign(w\cdot x+b)
f ( x ) = s i g n ( w ⋅ x + b ) 称为感知机 。其中
w
w
w 和
b
b
b 为感知机模型参数,
w
∈
R
n
w\in R^n
w ∈ R n 叫做权值(weight)或权值向量(weight vector),
b
∈
R
b \in R
b ∈ R 叫做偏置(bias),
w
⋅
x
w \cdot x
w ⋅ x 表示
w
w
w 和
x
x
x 的内积,
s
i
g
n
sign
s i g n 是符号函数,即
s
i
g
n
(
x
)
=
{
+
1
,
x
≥
0
−
1
,
x
<
0
sign(x)= \begin{cases} +1 ,x \ge 0\\ -1 ,x \lt 0 \end{cases}
s i g n ( x ) = { + 1 , x ≥ 0 − 1 , x < 0 感知机有如下几何解释: 线性方程
w
⋅
x
+
b
=
0
w \cdot x + b = 0
w ⋅ x + b = 0 对应于特征空间
R
n
R^n
R n 中的一个超平面
S
S
S ,其中
w
w
w 是超平面的法向量,
b
b
b 是超平面的截距。这个超平面将特征空间划分为两个部分。位于两部分的点(特征向量)分别被分为正、负两类。因此超平面S称为分离超平面(separating hyperplane)
2. 数据集的线性可分性
给定一个数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
n
,
y
n
)
}
T=\left\{(x_1, y_1), (x_2, y_2), \cdots, (x_n, y_n) \right\}
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) } 其中
x
i
∈
R
n
,
y
i
∈
Y
=
{
+
1
,
−
1
}
,
i
=
1
,
2
,
⋯
,
n
x_i \in R^n, y_i \in Y=\{+1,-1\}, i=1,2,\cdots,n
x i ∈ R n , y i ∈ Y = { + 1 , − 1 } , i = 1 , 2 , ⋯ , n ,如果存在某个超平面能够将数据集的正实例点和负实例点完全正确地划分到超平面两侧,即对所有
y
i
=
+
1
y_i=+1
y i = + 1 的实例
i
i
i ,有
w
⋅
x
i
+
b
>
0
w\cdot x_i+b\gt 0
w ⋅ x i + b > 0 ,对所有
y
i
=
−
1
y_i=-1
y i = − 1 的实例
i
i
i ,有
w
⋅
x
i
+
b
<
0
w\cdot x_i+b\lt 0
w ⋅ x i + b < 0 ,则称数据集
T
T
T 为线性可分数据集(linearly separable data set);否则称数据集
T
T
T 线性不可分。
3. 感知机学习策略——损失函数极小化
损失函数的一个自然选择是误分类点的总数。但是这样的损失函数不是参数
w
,
b
w,b
w , b 的连续可导函数,不易优化。损失函数的另一个选择是误分类点到超平面
S
S
S 的总距离,这是感知机所采用的。为此,首先写出输入空间
R
n
R^n
R n 中任意一点
x
0
x_0
x 0 到超平面
S
S
S 的距离:
1
∣
∣
w
∣
∣
2
∣
w
⋅
x
0
+
b
∣
\frac{1}{||w||_2}|w\cdot x_0+b|
∣ ∣ w ∣ ∣ 2 1 ∣ w ⋅ x 0 + b ∣ 这里
∣
∣
w
∣
∣
2
||w||_2
∣ ∣ w ∣ ∣ 2 是
w
w
w 的
l
2
l_2
l 2 范数。 其次,对于误分类的数据
(
x
i
,
y
i
)
(x_i,y_i)
( x i , y i ) 来说,
−
y
i
(
w
⋅
x
i
+
b
)
>
0
-y_i(w \cdot x_i+b)\gt0
− y i ( w ⋅ x i + b ) > 0 。因此,误分类点
x
i
x_i
x i 到超平面
S
S
S 的距离是
−
1
∣
∣
w
∣
∣
2
y
i
(
w
⋅
x
i
+
b
)
-\frac{1}{||w||_2}y_i(w \cdot x_i+b)
− ∣ ∣ w ∣ ∣ 2 1 y i ( w ⋅ x i + b ) 这样,假设超平面
S
S
S 的误分类点集合为
M
M
M ,那么所有误分类点到超平面
S
S
S 的总距离为
−
1
∣
∣
w
∣
∣
2
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
-\frac{1}{||w||_2}\sum_{x_i \in M}y_i(w \cdot x_i+b)
− ∣ ∣ w ∣ ∣ 2 1 x i ∈ M ∑ y i ( w ⋅ x i + b ) 不考虑
1
∣
∣
w
∣
∣
2
\displaystyle\frac{1}{||w||_2}
∣ ∣ w ∣ ∣ 2 1 ,就得到感知机的损失函数,即
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
\begin{aligned} L(w,b)&=-\sum_{x_i \in M}y_i(w \cdot x_i+b) \end{aligned}
L ( w , b ) = − x i ∈ M ∑ y i ( w ⋅ x i + b ) 显然
L
(
w
,
b
)
≥
0
L(w,b)\ge0
L ( w , b ) ≥ 0 ,故我们的目标只要减小损失函数就行了。
4. 感知机学习算法
4.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 = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) } ,其中
x
i
∈
X
,
y
i
∈
{
+
1
,
−
1
}
,
i
=
1
,
2
,
⋯
,
n
x_i \in X,y_i \in \{+1,-1\},i=1,2,\cdots,n
x i ∈ X , y i ∈ { + 1 , − 1 } , i = 1 , 2 , ⋯ , n ;学习率
η
(
0
<
η
≤
1
)
\eta(0\lt\eta\le1)
η ( 0 < η ≤ 1 ) : 输出 :
w
,
b
w,b
w , b :感知机模型
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
f(x)=sign(w\cdot x+b)
f ( x ) = s i g n ( w ⋅ x + b ) (1) 选取初值
w
0
,
b
0
w_0,b_0
w 0 , b 0 ; (2)在训练集中选取数据
(
x
i
,
y
i
)
(x_i,y_i)
( x i , y i ) ; (3)如果
J
=
−
y
i
(
w
⋅
x
i
+
b
)
≥
0
J=-y_i(w\cdot x_i+b)\ge0
J = − y i ( w ⋅ x i + b ) ≥ 0 (单样本损失函数)
w
=
w
−
η
∂
J
∂
w
=
w
+
η
x
i
y
i
b
=
b
−
η
∂
J
∂
b
=
w
+
η
y
i
\begin{aligned} w&=w-\eta \frac{\partial J}{\partial w}=w+\eta x_i y_i \\ \\ b&=b-\eta\frac{\partial J}{\partial b}=w+\eta y_i \end{aligned}
w b = w − η ∂ w ∂ J = w + η x i y i = b − η ∂ b ∂ J = w + η y i (4)转至(2),直至训练集中没有误分类点。
直观解释 : 当一个实例点被误分类,即位于分离超平面的错误一侧时,则调整
w
,
b
w,b
w , b 的值,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直至超平面越过该误分类点使其被正确分类。 【注】 这里每次只用一个样本进行梯度下降,因为你不确定每次参数更新后误分类的点有多少集合
M
M
M 时变化的,损失函数无法构成
w
,
b
w,b
w , b 的连续函数。
4.2 对偶形式
对偶,简单地说,就是从一个不同的角度去解答相似问题,但是问题的解是相通的。 或者说原始问题比较难求解,我们去求解另外一个问题,希望通过更简单的方法得到原始问题的解。 我们假设样本点
(
x
i
,
y
i
)
(x_i,y_i)
( x i , y i ) 在更新过程中被使用了
n
i
n_i
n i 次,
w
,
b
w,b
w , b 使用零初始化,因此,从原始的学习过程可以得到,最后学习到的
w
w
w 和
b
b
b 可以分别表示为:
w
=
∑
j
=
1
n
n
j
η
x
j
y
j
=
∑
j
=
1
n
α
j
x
j
y
j
b
=
∑
j
=
1
n
n
j
η
y
j
=
∑
j
=
1
n
α
j
y
j
\begin{aligned} w&=\sum_{j=1}^n n_j \eta x_j y_j =\sum_{j=1}^n \alpha_j x_j y_j\\ \\ b&=\sum_{j=1}^n n_j \eta y_j=\sum_{j=1}^n \alpha_j y_j \end{aligned}
w b = j = 1 ∑ n n j η x j y j = j = 1 ∑ n α j x j y j = j = 1 ∑ n n j η y j = j = 1 ∑ n α j y j 其中
w
,
b
w,b
w , b 关于
(
x
j
,
y
j
)
(x_j,y_j)
( x j , y j ) 的增量分别是
α
j
x
j
y
j
\alpha_j x_j y_j
α j x j y j 和
α
j
y
j
\alpha_j y_j
α j y j 。 考虑
n
j
n_j
n j 的含义:如果
n
j
n_j
n j 的值越大,那么意味着这个样本点经常被误分。什么样的点容易被误分?很明显就是离超平面很近的点。超平面稍微一点点移动,这个点就从正变负,或者从负变正。将上式带入到原始的感知机中,可以得到:
f
(
x
)
=
s
i
g
n
(
w
⋅
x
+
b
)
=
s
i
g
n
(
∑
j
=
1
n
n
j
η
x
j
y
j
⋅
x
+
∑
j
=
1
n
n
j
η
y
j
)
f(x)=sign(w\cdot x+b)=sign(\sum_{j=1}^n n_j \eta x_j y_j \cdot x+\sum_{j=1}^n n_j \eta y_j)
f ( x ) = s i g n ( w ⋅ x + b ) = s i g n ( j = 1 ∑ n n j η x j y j ⋅ x + j = 1 ∑ n n j η y j ) 此时的学习目标不再是
w
,
b
w,b
w , b ,而是
n
j
,
j
=
1
,
2
,
⋯
,
n
n_j,j=1,2,\cdots,n
n j , j = 1 , 2 , ⋯ , n ,故算法描述如下:
输入 :线性可分的数据集
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 = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) } ,其中
x
i
∈
X
,
y
i
∈
{
+
1
,
−
1
}
,
i
=
1
,
2
,
⋯
,
n
x_i \in X,y_i \in \{+1,-1\},i=1,2,\cdots,n
x i ∈ X , y i ∈ { + 1 , − 1 } , i = 1 , 2 , ⋯ , n ;学习率
η
(
0
<
η
≤
1
)
\eta(0\lt\eta\le1)
η ( 0 < η ≤ 1 ) 输出 :
α
\alpha
α 和
b
b
b ;感知机模型
f
(
x
)
=
s
i
g
n
(
∑
j
=
1
n
n
j
η
x
j
y
j
⋅
x
+
∑
j
=
1
n
n
j
η
y
j
)
=
s
i
g
n
(
∑
j
=
1
n
α
j
x
j
y
j
⋅
x
+
b
)
f(x)=\displaystyle sign(\sum_{j=1}^n n_j \eta x_j y_j \cdot x+\sum_{j=1}^n n_j \eta y_j)=sign(\sum_{j=1}^n \alpha_j x_j y_j \cdot x+b)
f ( x ) = s i g n ( j = 1 ∑ n n j η x j y j ⋅ x + j = 1 ∑ n n j η y j ) = s i g n ( j = 1 ∑ n α j x j y j ⋅ x + b ) ,其中
α
=
(
α
1
,
α
2
,
⋯
,
α
n
)
T
\alpha=(\alpha_1,\alpha_2,\cdots,\alpha_n)^T
α = ( α 1 , α 2 , ⋯ , α n ) T (1)
α
=
0
,
b
=
0
\alpha=0,\quad b=0
α = 0 , b = 0 ; (2)在训练集中选取数据
(
x
i
,
y
i
)
(x_i,y_i)
( x i , y i ) ; (3)如果
J
=
−
y
i
(
∑
j
=
1
n
α
j
y
j
x
j
⋅
x
i
+
b
)
≥
0
\displaystyle J= - y_i(\sum_{j=1}^n \alpha_j y_j x_j \cdot x_i+b) \ge 0
J = − y i ( j = 1 ∑ n α j y j x j ⋅ x i + b ) ≥ 0 (单样本损失函数,本质上是每次
n
i
=
n
i
+
1
n_i=n_i+1
n i = n i + 1 )
α
i
=
α
i
+
η
b
=
b
+
η
y
i
\begin{aligned} \alpha_i&=\alpha_i+\eta \\ b&=b+\eta y_i \end{aligned}
α i b = α i + η = b + η y i (4)转至(2)直至没有误分类数据