感知机(perceptron)是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取 + 1 +1 +1 和 − 1 -1 −1 二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。
2.1 感知机模型
假设输入空间(特征空间)是 X ⊆ R n \mathcal{X}\subseteq\mathbb{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)
称为感知机。其中, w w w 和 b b b 为感知机模型参数, w ∈ R n w\in\mathbb{R}^n w∈Rn 叫做权值(weight)或权值向量(weight vector), b ∈ R b\in\mathbb{R} b∈R 叫做偏置(bias), s i g n sign sign 是符号函数。
2.2 感知机学习策略
给定训练集
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 ∈ X = R n x_i\in\mathcal{X}=\mathbb{R}^n xi∈X=Rn, y i ∈ Y = { + 1 , − 1 } y_i\in\mathcal{Y}=\{+1,-1\} yi∈Y={+1,−1}, i = 1 , 2 , ⋯ , N i=1,2,\cdots,N i=1,2,⋯,N。感知机学习的损失函数定义为
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)
其中 M M M 为误分类点的集合。这个损失函数就是感知机学习的经验风险函数。
2.3 感知机学习算法
2.3.1 感知机学习算法的原始形式
感知机学习算法是误分类驱动的,具体采用随机梯度下降法(stochastic gradient descent)。首先,任意选取一个超平面 w 0 , b 0 w_0,b_0 w0,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 ∇ b L ( w , b ) = − ∑ x i ∈ M y i \begin{aligned} \nabla_wL(w,b)&=-\sum_{x_i\in M}y_ix_i\\ \nabla_bL(w,b)&=-\sum_{x_i\in M}y_i \end{aligned} ∇wL(w,b)∇bL(w,b)=−xi∈M∑yixi=−xi∈M∑yi
给出。随机选取一个误分类点 ( x i , y i ) (x_i,y_i) (xi,yi),对 w , b w,b w,b 进行更新:
w ← w + η y i x i b ← b + η y i \begin{aligned} w&\leftarrow w+\eta y_ix_i\\ b&\leftarrow b+\eta y_i \end{aligned} wb←w+ηyixi←b+ηyi
式中 η ( 0 < η ≤ 1 ) \eta(0<\eta\leq1) η(0<η≤1) 是步长,在统计学习中又称为学习率(learning rate)。这样,通过迭代可以期待损失函数 L ( w , b ) L(w,b) L(w,b) 不断减小,直到为0。
原始形式:
- 选取初值 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)\leq0
yi(w⋅xi+b)≤0:
w ← w + η y i x i b ← b + η y i \begin{aligned} w&\leftarrow w+\eta y_ix_i\\ b&\leftarrow b+\eta y_i \end{aligned} wb←w+ηyixi←b+ηyi - 转至 2,直到训练集中没有误分类点
2.3.2 算法的收敛性
Novikoff 定理:设训练数据集 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 ∈ X = R n , y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , ⋯ , N x_i\in\mathcal{X}=\mathbb{R}^n,y_i\in\mathcal{Y}=\{-1,+1\},i=1,2,\cdots,N xi∈X=Rn,yi∈Y={−1,+1},i=1,2,⋯,N,则
- 存在满足条件
∥
w
^
_
o
p
t
∥
=
1
\lVert\hat{w}\_{opt}\rVert=1
∥w^_opt∥=1 的超平面
w
^
_
o
p
t
⋅
x
^
=
w
o
p
t
⋅
+
b
o
p
t
=
0
\hat{w}\_{opt}\cdot\hat{x}=w_{opt}\cdot+b_{opt}=0
w^_opt⋅x^=wopt⋅+bopt=0 将训练集完全正确分开;且存在
γ
>
0
\gamma>0
γ>0,对所有
i
=
1
,
2
,
⋯
,
N
i=1,2,\cdots,N
i=1,2,⋯,N:
y i ( w ^ _ o p t ⋅ x ^ _ i ) = y i ( w o p t ⋅ x i + b o p t ) ≥ γ y_i(\hat{w}\_{opt}\cdot\hat{x}\_i)=y_i(w_{opt}\cdot x_i+b_{opt})\geq\gamma yi(w^_opt⋅x^_i)=yi(wopt⋅xi+bopt)≥γ - 令
R
=
max
1
≤
i
≤
N
∥
x
^
_
i
∥
R=\max_{1\leq i\leq N}\lVert \hat{x}\_i\rVert
R=max1≤i≤N∥x^_i∥,则感知机算法在训练集上的误分类次数
k
k
k 满足不等式
k ≤ ( R γ ) 2 k\leq(\frac{R}{\gamma})^2 k≤(γR)2
2.3.3 感知机学习的对偶形式
将 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,设修改 n n n 次,设 α i = n i η \alpha_i=n_i\eta αi=niη,则最后学习到的 w , b w,b w,b 可以分别表示为
w = ∑ i = 1 N α i y i x i b = ∑ i = 1 N α i y i \begin{aligned} w&=\sum_{i=1}^{N}\alpha_iy_ix_i\\ b&=\sum_{i=1}^{N}\alpha_iy_i \end{aligned} wb=i=1∑Nαiyixi=i=1∑Nαiyi
这里, α i ≥ 0 , i = 1 , 2 , ⋯ , N \alpha_i\geq0,i=1,2,\cdots,N αi≥0,i=1,2,⋯,N,当 η = 1 \eta=1 η=1 时,表示第 i i i 个实例点由于误分而进行更新的次数。实例点更新次数越多,意味着它距离分离超平面越近,也就越难正确分类。换句话说,这样的实例对学习结果影响最大。
对偶形式:
- α ← 0 , b ← 0 \alpha\leftarrow0,b\leftarrow0 α←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(\sum_{j=1}^N\alpha_jy_jx_j\cdot x_i+b)\leq0
yi(∑j=1Nαjyjxj⋅xi+b)≤0:
α i ← α i + η b ← b + η y i \begin{aligned} \alpha_i&\leftarrow \alpha_i+\eta\\ b&\leftarrow b+\eta y_i \end{aligned} αib←αi+η←b+ηyi - 转至 2,直到训练集中没有误分类点
对偶形式中训练实例仅以内积的形式出现。为了方便,可以预先将训练集中的实例间的内积计算出来并以矩阵的形式存储,这个矩阵就是所谓的 Gram 矩阵(Gram matrix)
G = [ x i ⋅ x j ] N × N G=[x_i\cdot x_j]_{N\times N} G=[xi⋅xj]N×N