本文主要介绍了两块内容:(1)感知机模型;(2)一种感知机优化算法。
感知机(Perceptron)模型介绍
公
式
1
:
h
(
x
)
=
s
i
g
n
(
(
∑
i
=
1
n
w
i
x
i
)
−
t
h
r
e
s
h
o
l
d
)
公式1:h(x)=sign((\sum_{i=1}^{n}w_ix_i)-threshold)
公式1:h(x)=sign((i=1∑nwixi)−threshold)
其中
(
x
1
,
x
2
,
.
.
.
,
x
n
)
(x_1,x_2,...,x_n)
(x1,x2,...,xn)代表
n
n
n维特征,
(
w
1
,
w
2
,
.
.
.
,
w
n
,
t
h
r
e
s
h
o
l
d
)
(w_1,w_2,...,w_n, threshold)
(w1,w2,...,wn,threshold)代表感知机模型的参数。
为了简化计算,我们将阈值
t
h
r
e
s
h
o
l
d
threshold
threshold当做
w
0
w_0
w0 ,引入一个
x
0
=
−
1
x_0=-1
x0=−1的特征与
w
0
w_0
w0相乘,这样
h
(
x
)
h(x)
h(x)公式就可做如下变换:
公
式
2
:
h
(
x
)
=
s
i
g
n
(
(
∑
i
=
1
n
w
i
x
i
)
−
t
h
r
e
s
h
o
l
d
)
=
s
i
g
n
(
∑
i
=
0
n
w
i
x
i
)
=
s
i
g
n
(
w
⊤
x
)
公式2:h(x)=sign((\sum_{i=1}^{n}w_ix_i)-threshold) =sign(\sum_{i=0}^{n}w_ix_i)=sign(\boldsymbol w^\top\boldsymbol x)
公式2:h(x)=sign((i=1∑nwixi)−threshold)=sign(i=0∑nwixi)=sign(w⊤x)
几何解释
( ∑ i = 1 n w i x i ) − t h r e s h o l d = 0 (\sum_{i=1}^{n}w_ix_i)-threshold=0 (∑i=1nwixi)−threshold=0是一个超平面,其中 ( w 1 , w 2 , . . . , w n ) (w_1,w_2,...,w_n) (w1,w2,...,wn)是该超平面的法向量, − t h r e s h o l d -threshold −threshold是超平面的截距。
优化算法(Perceptron Learning Algorithm, PLA)
理想情况下,我们的目标是找到一个超平面将空间中的正负类完全分开。
我们采取的优化策略思想为逐点修正。首先在平面上随意取一条直线,看看哪些点分类错误。然后开始对第一个错误点就行修正,即变换直线的位置,使这个错误点变成分类正确的点。接着,再对第二个、第三个等所有的错误分类点就行直线纠正,直到所有的点都完全分类正确了,就得到了最好的直线。
具体更新法则如下图:
这个更新法则其实可以这么理解:
假设超平面为:
w
⊤
x
+
b
=
0
\boldsymbol w^\top \boldsymbol x+b=0
w⊤x+b=0
首先空间中任意一个
x
r
x_r
xr点到超平面s的距离:
∣
w
⊤
x
r
+
b
∣
/
∣
∣
w
∣
∣
|\boldsymbol w^\top \boldsymbol x_r+b|/||\boldsymbol w||
∣w⊤xr+b∣/∣∣w∣∣
误分类点
x
i
x_i
xi到s的距离:
−
y
i
∗
(
w
⊤
x
i
+
b
)
/
∣
∣
w
∣
∣
-y_i*(\boldsymbol w^\top \boldsymbol x_i+b)/||\boldsymbol w||
−yi∗(w⊤xi+b)/∣∣w∣∣
那么感知机的损失函数为:
L
(
w
,
b
)
=
−
∑
y
i
(
w
⊤
x
i
+
b
)
/
∣
∣
w
∣
∣
L(w, b) = -\sum y_i(\boldsymbol w^\top \boldsymbol x_i+b)/||\boldsymbol w||
L(w,b)=−∑yi(w⊤xi+b)/∣∣w∣∣,其中
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)是误分类点。
不考虑系数
∣
∣
w
∣
∣
||\boldsymbol w||
∣∣w∣∣可得到损失函数:
L
(
w
,
b
)
=
−
∑
y
i
(
w
⊤
x
i
+
b
)
L(w, b) = -\sum y_i(\boldsymbol w^\top \boldsymbol x_i+b)
L(w,b)=−∑yi(w⊤xi+b),其中
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)是误分类点。
(为什么可以忽略系数
∣
∣
w
∣
∣
||\boldsymbol w||
∣∣w∣∣:因为感知机只要正确分类,loss即可为0,加不加
∣
∣
w
∣
∣
||\boldsymbol w||
∣∣w∣∣对最终结果没有影响)
利用梯度下降法更新参数:
首先求损失函数对
w
\boldsymbol w
w和
b
b
b的梯度:
∂
L
(
w
,
b
)
/
∂
w
=
−
∑
y
i
x
i
\partial L(\boldsymbol w,b)/ \partial \boldsymbol w= -\sum y_ix_i
∂L(w,b)/∂w=−∑yixi
∂
L
(
w
,
b
)
/
∂
b
=
−
∑
y
i
\partial L(\boldsymbol w,b)/ \partial b= -\sum y_i
∂L(w,b)/∂b=−∑yi
更新
w
\boldsymbol w
w和
b
b
b值
w
=
w
+
η
∑
y
i
x
i
w = w + η\sum y_ix_i
w=w+η∑yixi
b
=
b
+
η
∑
y
i
b = b + η\sum y_i
b=b+η∑yi
这个与上述更新法则已经很接近了
那么实际的更新法则比上面讲的要笨一点,它没有统揽全局的本事,是通过一个一个看错误数据来优化参数的。
1)选取初始参数
w
0
w_0
w0,
b
0
b_0
b0;
2)从误分类点中随机选取一组:
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi);
3)更新
w
=
w
+
η
y
i
x
i
w = w + ηy_ix_i
w=w+ηyixi,
b
=
b
+
η
y
i
b = b + ηy_i
b=b+ηyi;
4)再挑选误分类点,再更新,直到没有误分类点。
非线性可分情况
首先初始化权重,并计算出错分点的个数。
然后对错误点进行修正,更新参数,更新方法与线性可分情况下的一致,并计算更新参数后模型的错分点个数,与之前错分点个数比较,取错分点个数较小的参数。
之后,再经过n次迭代,不断比较当前错分点个数与之前最少的错分点个数,选择错分点较小的参数值保存。
直到迭代次数完成后,选取错分点个数最少的参数。
理想情况感知机收敛证明
以上可以得出随着T变大,
w
f
\boldsymbol w_f
wf与模型参数向量内积更大;并且
w
f
\boldsymbol w_f
wf与模型参数向量夹角更小;说明模型参数向量与
w
f
\boldsymbol w_f
wf越来越接近。
而且,PLA最终会停下来(因为T有上界),实现对线性可分的数据集完全分类。