02_感知机
一、概念
最终要得到的输出是(Y/N)正例或反例,这种对样本二分类的问题,通常用感知机解决。感知机就是通过对输入向量的各个元素进行加权线性组合,根据得到的分数来判定是正例还是反例。在假设空间中,选取
w
\pmb w
www 作为对目标
w
∗
\pmb w^*
www∗ 的近似。
X
X
X 为样本输入矩阵。
h
(
X
)
=
s
i
g
n
(
w
T
X
)
h(X) =sign(\pmb w^TX)
h(X)=sign(wwwTX)
二、策略
假设空间 H H H 是一个无限大的集合,里面是无穷无尽的对所有样本进行二分的空间平面(或二维直线)采取“不断修正”的方法来试探到一个在数据集上表现不错的 w \pmb w www 。
我们先设定一个初始的 w 0 \pmb w_0 www0 ,用它去对每个样本进行二分;对于某个样本点,如果分类正确,那么就看下一个,如果分类不正确,那就说明需要修正 w \pmb w www ,具体的做法是:
满足 h ( x ) = s i g n ( ∑ i = 1 n w i x i ) ≠ y i h(x) = sign(\sum_{i=1}^{n} w_ix_i) \neq y_i h(x)=sign(∑i=1nwixi)=yi 的样本 ( x , y ) (\pmb x,y) (xxx,y) ,视为误分类点;在物理意义上,是内积 w ⋅ x i \pmb w \cdot \pmb x_i www⋅xxxi 的结果的正负性和标记 y i ∈ { + 1 , − 1 } y_i \in \{+1,-1\} yi∈{+1,−1} 的正负性不一致;因此我们用正确的方向对 w \pmb w www 进行修正,即 w : = w + y i x i \pmb w := \pmb w +y_i\pmb x_i www:=www+yixxxi ,让 w \pmb w www 向 x i \pmb x_i xxxi 的方向靠拢,这就会使 w \pmb w www 的平面将 x i \pmb x_i xxxi 划入正确的范围,就能让新的 w \pmb w www 和 x i \pmb x_i xxxi 做内积的正负性与 y i y_i yi 一致。这样就更新了 w \pmb w www ,再看下一个点。
三、算法
1. PLA
我们将策略部分的内容总结为一个算法,叫作PLA (Perceptron Linear Algorithm)。
算法描述
对于所有样本点 ( x i , y i ) (\pmb x_i,y_i) (xxxi,yi) 迭代执行,对于第 t t t 次迭代:
-
h ( x i ) = s i g n ( w T x i ) = ∑ j = 0 d s i g n ( w j x i j ) h(\pmb x_i) = sign(\pmb w^T \pmb x_i)=\sum_{j=0}^{d}sign(w_j\pmb x_{ij}) h(xxxi)=sign(wwwTxxxi)=∑j=0dsign(wjxxxij) ;
-
判断 h ( x i ) h(\pmb x_i) h(xxxi) ,如果 h ( x i ) ≠ y i h(x_i) \neq y_i h(xi)=yi,则 w t + 1 = w t + y i x i \pmb w_{t+1} = \pmb w_t + y_i\pmb x_i wwwt+1=wwwt+yixxxi 修正 w \pmb w www 。然后重新迭代看所有样本点。
最终所有点都能够正确分类为止。
2. pocket PLA
线性可分是PLA收敛的必要条件,线性可分的充要条件就是存在一个 w f \pmb w_f wwwf 能够使得对于所有 x \pmb x xxx 都能分类正确。
PLA的迭代过程实际上就是让 w \pmb w www 不断向 w f \pmb w_f wwwf 靠拢的过程,从直觉上来讲,这两个向量的内积会不断增大。
当迭代次数达到
T
T
T 次时,
w
f
T
w
T
=
w
f
T
(
w
t
+
y
i
x
i
)
=
w
f
T
w
t
+
y
i
w
f
T
x
i
≥
w
f
T
w
t
+
min
i
y
i
w
f
T
x
i
>
w
f
T
w
t
+
0
\pmb w_f^T \pmb w_T = \pmb w_f^T(\pmb w_t+y_i\pmb x_i)\\ =\pmb w_f^T\pmb w_t+y_i \pmb w_f^T \pmb x_i\\ \ge \pmb w_f^T\pmb w_t + \min_{i}y_i \pmb w_f^T \pmb x_i \\ \gt \pmb w_f^T\pmb w_t + 0
wwwfTwwwT=wwwfT(wwwt+yixxxi)=wwwfTwwwt+yiwwwfTxxxi≥wwwfTwwwt+iminyiwwwfTxxxi>wwwfTwwwt+0
将它从现在的迭代式变为通项式
w
f
T
w
T
=
w
f
T
(
w
t
+
y
i
x
i
)
=
w
f
T
w
t
+
y
i
w
f
T
x
i
≥
w
f
T
w
0
+
T
∗
min
i
y
i
w
f
T
x
i
≥
T
∗
min
y
i
w
f
T
x
i
\pmb w_f^T \pmb w_T = \pmb w_f^T(\pmb w_t+y_i\pmb x_i) \\ = \pmb w_f^T\pmb w_t+y_i \pmb w_f^T \pmb x_i\\ \ge \pmb w_f^T\pmb w_0 + T*\min_{i} y_i \pmb w_f^T \pmb x_i \\ \ge T*\min y_i\pmb w_f^T \pmb x_i
wwwfTwwwT=wwwfT(wwwt+yixxxi)=wwwfTwwwt+yiwwwfTxxxi≥wwwfTwww0+T∗iminyiwwwfTxxxi≥T∗minyiwwwfTxxxi
同时,对于
w
T
\pmb w_T
wwwT 有
∣
∣
w
T
∣
∣
2
=
∣
∣
w
t
+
y
i
x
i
∣
∣
2
=
∣
∣
w
t
∣
∣
2
+
2
y
i
w
t
T
x
i
+
∣
∣
y
i
x
i
∣
∣
2
≤
∣
∣
w
t
∣
∣
2
+
0
+
∣
∣
y
i
x
i
∣
∣
2
≤
∣
∣
w
t
∣
∣
2
+
max
i
∣
∣
x
i
∣
∣
2
||\pmb w_T ||^2 = ||\pmb w_t + y_i \pmb x_i||^2 \\ =||\pmb w_t||^2+2y_i\pmb w_t^T \pmb x_i+||y_i \pmb x_i||^2 \\ \le ||\pmb w_t||^2 + 0 + ||y_i \pmb x_i||^2 \\ \le ||\pmb w_t||^2 + \max_i|| \pmb x_i||^2
∣∣wwwT∣∣2=∣∣wwwt+yixxxi∣∣2=∣∣wwwt∣∣2+2yiwwwtTxxxi+∣∣yixxxi∣∣2≤∣∣wwwt∣∣2+0+∣∣yixxxi∣∣2≤∣∣wwwt∣∣2+imax∣∣xxxi∣∣2
因为所有引起
w
\pmb w
www 的
x
\pmb x
xxx 都是分类错误的点,所以
2
y
i
w
t
T
x
i
≤
0
2y_i\pmb w_t^T \pmb x_i \le 0
2yiwwwtTxxxi≤0 成立。再将右边放大到最大值的情况后得到。
将它从现在的迭代式变为通项式
∣
∣
w
T
∣
∣
2
=
∣
∣
w
t
+
y
i
x
i
∣
∣
2
≤
∣
∣
w
t
∣
∣
2
+
max
i
∣
∣
y
i
x
i
∣
∣
2
≤
∣
∣
w
0
∣
∣
2
+
T
∗
max
i
∣
∣
y
i
x
i
∣
∣
2
≤
T
∗
max
i
∣
∣
x
i
∣
∣
2
||\pmb w_T ||^2 = ||\pmb w_t + y_i \pmb x_i||^2 \\ \le ||\pmb w_t||^2+ \max_i||y_i \pmb x_i||^2 \\ \le ||\pmb w_0||^2+ T*\max_i||y_i \pmb x_i||^2 \\ \le T*\max_i|| \pmb x_i||^2
∣∣wwwT∣∣2=∣∣wwwt+yixxxi∣∣2≤∣∣wwwt∣∣2+imax∣∣yixxxi∣∣2≤∣∣www0∣∣2+T∗imax∣∣yixxxi∣∣2≤T∗imax∣∣xxxi∣∣2
推导迭代次数的极限
我们将
w
f
\pmb w_f
wwwf 和
w
T
\pmb w_T
wwwT 做标准化后,得到的内积结果就是单纯的
cos
\cos
cos 值,这个值慢慢变大并趋近于1则说明迭代的
w
\pmb w
www 越来越接近目标。
w
f
T
w
T
∣
∣
w
f
∣
∣
⋅
∣
∣
w
T
∣
∣
≥
T
⋅
c
o
n
s
t
a
n
t
\frac{\pmb w_f^T \pmb w_T}{||\pmb w_f|| \cdot ||\pmb w_T||} \ge \sqrt T \cdot constant
∣∣wwwf∣∣⋅∣∣wwwT∣∣wwwfTwwwT≥T⋅constant
由前面的通项式可以得到
1
∣
∣
w
T
∣
∣
2
≥
1
T
∗
max
i
∣
∣
x
i
∣
∣
2
1
∣
∣
w
T
∣
∣
≥
1
T
∗
max
i
∣
∣
x
i
∣
∣
\frac{1}{||\pmb w_T||^2} \ge \frac{1}{T*\max_i||\pmb x_i||^2}\\ \frac{1}{||\pmb w_T||} \ge \frac{1}{\sqrt T*\max_i||\pmb x_i||}
∣∣wwwT∣∣21≥T∗maxi∣∣xxxi∣∣21∣∣wwwT∣∣1≥T∗maxi∣∣xxxi∣∣1
于是有
1
≥
w
f
T
w
T
∣
∣
w
f
∣
∣
⋅
∣
∣
w
T
∣
∣
≥
T
∗
min
y
i
w
f
T
x
i
∣
∣
w
f
∣
∣
∗
T
∗
max
i
∣
∣
x
i
∣
∣
≥
T
∗
min
y
i
w
f
T
x
i
∣
∣
w
f
∣
∣
∗
max
i
∣
∣
x
i
∣
∣
1 \ge\frac{\pmb w_f^T \pmb w_T}{||\pmb w_f|| \cdot ||\pmb w_T||} \ge \frac{T*\min y_i\pmb w_f^T \pmb x_i}{||\pmb w_f|| * \sqrt T*\max_i||\pmb x_i||}\\ \ge \frac{\sqrt T* \min y_i\pmb w_f^T \pmb x_i}{||\pmb w_f||*\max_i||\pmb x_i||}
1≥∣∣wwwf∣∣⋅∣∣wwwT∣∣wwwfTwwwT≥∣∣wwwf∣∣∗T∗maxi∣∣xxxi∣∣T∗minyiwwwfTxxxi≥∣∣wwwf∣∣∗maxi∣∣xxxi∣∣T∗minyiwwwfTxxxi
可以计算出迭代次数
T
T
T 的极限满足
T
≤
∣
∣
w
f
∣
∣
∗
max
i
∣
∣
x
i
∣
∣
min
y
i
w
f
T
x
i
\sqrt T \le \frac{||\pmb w_f||*\max_i||\pmb x_i||}{\min y_i\pmb w_f^T \pmb x_i}
T≤minyiwwwfTxxxi∣∣wwwf∣∣∗maxi∣∣xxxi∣∣
如果
ρ
=
min
y
i
w
f
T
∣
∣
w
f
∣
∣
x
i
R
2
=
max
i
∣
∣
x
i
∣
∣
2
\rho = \min y_i\frac{\pmb w_f^T}{||\pmb w_f||}\pmb x_i \\ R^2 = \max_i ||\pmb x_i||^2
ρ=minyi∣∣wwwf∣∣wwwfTxxxiR2=imax∣∣xxxi∣∣2
就可以得出迭代极限
T
≤
∣
∣
w
f
∣
∣
2
∗
max
i
∣
∣
x
i
∣
∣
2
(
min
y
i
w
f
T
x
i
)
2
=
R
2
ρ
2
T \le \frac{||\pmb w_f||^2*\max_i||\pmb x_i||^2}{(\min y_i\pmb w_f^T \pmb x_i)^2} \\ = \frac{R^2}{\rho^2}
T≤(minyiwwwfTxxxi)2∣∣wwwf∣∣2∗maxi∣∣xxxi∣∣2=ρ2R2
这是在线性可分的情况下,但我们预先并不知道数据集是不是线性可分的。 所以我们在一种不知道PLA不会不停,多久会停的情况下。
在实际情况中(考虑噪声)我们期待得到的是一个能够使错误分类点达到最小的 w g \pmb w_g wwwg 作为对目标的近似。但从茫茫人海的假设空间 H H H 中要找到这么一个精确的 w g \pmb w_g wwwg 是一个NP-hard问题;所以我们采用一些方法来近似这个 w g \pmb w_g wwwg 。pocket-PLA就是一种,我们只保留从当前看最好的那个 w \pmb w www 。
算法描述
和PLA类似,迭代对每个点都有:
-
如果在该点犯错误,则更新 w t + 1 = w t + y i x i \pmb w_{t+1} = \pmb w_t+y_i \pmb x_i wwwt+1=wwwt+yixxxi
-
然后再和当前的 w t \pmb w_t wwwt 在所有样本点的效果上进行对比,即比较各自的
∑ i = 1 M [ s i g n ( h ( x i ) ) ≠ y i ] M 为 误 分 类 点 的 数 量 \sum_{i=1}^{M}[sign(h(\pmb x_i)) \neq y_i] \quad M为误分类点的数量 i=1∑M[sign(h(xxxi))=yi]M为误分类点的数量
取能够让上式较小的那个(就是犯错误少的那个)作为 w t + 1 \pmb w_{t+1} wwwt+1 ,也就是说,如果 w t \pmb w_t wwwt 犯的错误反而少的话,就保留它而不更新。
通过这个算法,能够得到一个还不错的perceptron。
不难发现,如果最终发现数据集确实线性可分,相比于直接使用PLA,pocket-PLA由于每碰到一个错误分类点都要重新遍历一遍数据集以对比分类效果,耗时就要长一些;所以对于线性可分的数据集来说,pocket-PLA要比PLA慢一些。