感知机(perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和–1二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。感知机预测是用学习得到的感知机模型对新的输入实例进行分类。感知机1957年由
Rosenblatt提出,是神经网络与支持向量机的基础。
模型
感知机定义:假设输入空间(特征空间)是 X ⊆ R n \mathcal{X}\subseteq R^n X⊆Rn,输出空间是 Y Y Y= {+1,-1}。输入 x ∈ X x\in\mathcal{X} x∈X表示实例的特征向量,对应于输入空间(特征空间)的点;输出 y ⊆ Y y\subseteq \mathcal{Y} y⊆Y 表示实例的类别。由输入空间到输出空间的如下函数:
f ( x ) = s i g n ( w ⋅ x + b ) \begin{aligned} & \large \mathbf{f(x) = sign(w\cdot x + b)} \end{aligned} f(x)=sign(w⋅x+b)
感知机属于线性分类模型,属于判别模型
学习策略
给定一个数据集 T = T = T={( x 1 , y 1 x_1,y_1 x1,y1), ( x 2 , y 2 x_2,y_2 x2,y2)… ( x n , y n x_n,y_n xn,yn)} 其中 x i ∈ X = R n , y i ∈ Y x_i \in \mathcal{X} = R^n, y_i \in \mathcal{Y} xi∈X=Rn,yi∈Y = {+1, -1}, i = 1 , 2 , . . . , N i = 1,2,...,N i=1,2,...,N,如果存在某个超平面 S : w ⋅ x + b S: w \cdot x + b S:w⋅x+b 能够将数据集的正实例点和负实例点完全正确地划分到超平面的两侧,则称数据集 T T T为线性可分数据集;否则,称数据集 T T T 为线性不可分
损失函数的一个自然选择是误分类点的总数。但是,这样的损失函数不是参数 w , b \mathbf{w,b} w,b 的连续可导函数,不易优化。损失函数的另一个选择是误分类点到超平面 S \mathbf{S} S 的总距离,这是感知机所采用的。为此,首先写出输入空间 R n \mathbf{R_n} Rn 中任一点 x 0 \mathbf{x_0} x0 到超平面 S \mathbf{S} S的距离:
1 ∥ w ∥ ∣ w ⋅ x 0 + b ∣ \Large \frac{1}{\lVert w \rVert}|w \cdot x_0 + b| ∥w∥1∣w⋅x0+b∣
假设超平面 S S S 的误分类点集合为 M M M,那么所有错误分类点到超平面 S S S 的总距离为:
− 1 ∥ w ∥ ∑ x i ∈ M y i ∣ w ⋅ x 0 + b ∣ \Large -\frac{1}{\lVert w \rVert}\sum_{x_i\in M}y_i|w \cdot x_0 + b| −∥w∥1∑xi∈Myi∣w⋅x0+b∣
不考虑 1 ∥ w ∥ \Large \frac{1}{\lVert w \rVert} ∥w∥1 就得到感知机学习的损失函数: L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) \large \mathbf{L(w,b) = - \sum_{x_i\in M}y_i (w\cdot x_i +b)} L(w,b)=−∑xi∈Myi(w⋅xi+b),这个损失函数就是感知机学习的经验风险函数
学习算法
输入:训练数据集 T = T = T={( x 1 , y 1 x_1,y_1 x1,y1), ( x 2 , y 2 x_2,y_2 x2,y2)… ( x n , y n x_n,y_n xn,yn)},其中 x i ∈ X = R n , y i ∈ Y x_i \in \mathcal{X} = R^n, y_i \in \mathcal{Y} xi∈X=Rn,yi∈Y = {+1, -1}, i = 1 , 2 , . . . , N i = 1,2,...,N i=1,2,...,N,学习率 η ( 0 < η ≤ 1 ) \eta(0<\eta \leq 1) η(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)=sign(w⋅x+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
⋅
x
i
+
b
)
≤
0
y_i(w\cdot x_i + b) \leq 0
yi(w⋅xi+b)≤0:
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
\begin{aligned} & w \gets w + \eta y_ix_i \\ & b \gets b + \eta y_i & \end{aligned}
w←w+ηyixib←b+ηyi
(4)转至(2),直到训练集中没有误分类点
这种学习算法直观上有如下解释:当一个实例点被误分类,即位于分离超平面的错误一侧时,则调整 w , b \mathbf{w,b} w,b 的值,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面间的距离,直至超平面越过该误分类点使其被正确分类。
感知机学习算法的对偶形式
误分类点通过
w
←
w
+
η
y
i
x
i
b
←
b
+
η
y
i
\begin{aligned} & w \gets w + \eta y_ix_i \\ & b \gets b + \eta y_i & \end{aligned}
w←w+ηyixib←b+ηyi
逐步修改 w , b w, b w,b,设修改 n n n 次,则 w , b w,b w,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,b可以分别表示为
w
=
∑
i
=
1
N
α
i
y
i
x
i
b
=
∑
i
=
1
N
α
i
y
i
\begin{aligned} &\large w = \sum_{i=1}^N \alpha_iy_ix_i\\ & \large b = \sum_{i=1}^N \alpha_iy_i& \end{aligned}
w=i=1∑Nαiyixib=i=1∑Nαiyi
然后我们就可以愉快的导出感知学习算法的对偶形式
输入:训练数据集 T = T = T={( x 1 , y 1 x_1,y_1 x1,y1), ( x 2 , y 2 x_2,y_2 x2,y2)… ( x n , y n x_n,y_n xn,yn)},其中 x i ∈ X = R n , y i ∈ Y x_i \in \mathcal{X} = R^n, y_i \in \mathcal{Y} xi∈X=Rn,yi∈Y = {+1, -1}, i = 1 , 2 , . . . , N i = 1,2,...,N i=1,2,...,N,学习率 η ( 0 < η ≤ 1 ) \eta(0<\eta \leq 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, ...,\alpha_N)^T α=(α1,α2,...,αN)T
(1)
a
←
0
,
b
←
0
a \gets 0, b \gets 0
a←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
+
b
)
≤
0
\large y_i(\sum_{j=1}^N\alpha_jy_jx_j \cdot x + b) \leq 0
yi(∑j=1Nαjyjxj⋅x+b)≤0, 则:
α
i
←
α
i
+
η
b
←
b
+
η
y
i
\begin{aligned} & {\alpha_i \gets \alpha_i + \eta} \\ & b \gets b + \eta y_i & \end{aligned}
αi←αi+ηb←b+ηyi
(4)转至(2),直到训练集中没有误分类点
对偶形式中训练实例仅以内积的形式出现,为了方便,可以预先将训练集中实例间的内积计算出来并以矩阵的形式存储,这个矩阵就是所谓的Gram矩阵, G = [ x i ⋅ x j ] N × N \mathbf{G} = [x_i \cdot x_j]_{N \times N} G=[xi⋅xj]N×N
最后,当训练数据线性可分时,感知机学习算法是收敛的,误分类次数
k
k
k满足不等式:
k
≤
(
R
γ
)
2
\begin{aligned} \large k \leq (\frac{R}{\gamma})^2 \end{aligned}
k≤(γR)2