模式识别中的感知器
在Fisher线性判别分析中,我们把线性分类器的设计分为两步:一是确定最优的投影方向 w ⃗ \mathbf{\vec{w}} w,二是在这个投影方向上确定分类阈值。那么有没有一种方法可以省去求解最优的投影方向步骤,直接取得完整的线性判别函 g ( x ⃗ ) = w ⃗ T x ⃗ + w 0 g(\vec{x})=\mathbf{\vec{w}}^T\vec{x}+w_0 g(x)=wTx+w0呢?这一小节我们就学习这样一种方法——感知器。
我们要得到的判别函数是
g
(
x
⃗
)
=
w
⃗
T
x
⃗
+
w
0
g(\vec{x})=\mathbf{\vec{w}}^T\vec{x}+w_0
g(x)=wTx+w0,这个
w
0
w_0
w0可以用线性代数的方法加入到
w
⃗
T
x
⃗
\mathbf{\vec{w}}^T\vec{x}
wTx中去。我们将向量
x
⃗
\vec{x}
x增加一维,取常数1,即:
y
⃗
=
[
1
,
x
1
,
.
.
.
,
x
d
]
T
\vec{y}=[1,x_1,...,x_d]^T
y=[1,x1,...,xd]T
我们称
y
⃗
\vec{y}
y为增广的样本向量。那么
w
⃗
\mathbf{\vec{w}}
w这一项变为增广的权向量:
a
⃗
=
[
w
0
,
w
1
,
.
.
.
,
w
d
]
T
\vec{a}=[w_0,w_1,...,w_d]^T
a=[w0,w1,...,wd]T
由此,线性判别函数由
g
(
x
⃗
)
=
w
⃗
T
x
⃗
+
w
0
g(\vec{x})=\mathbf{\vec{w}}^T\vec{x}+w_0
g(x)=wTx+w0
变为
g
(
y
⃗
)
=
a
⃗
T
y
⃗
g(\vec{y})=\vec{a}^T\vec{y}
g(y)=aTy
书中定义了一个新的变量
y
⃗
′
\vec{y}'
y′,使得下式成立:
y
′
⃗
=
{
y
i
⃗
,
若
y
i
⃗
∈
w
1
−
y
i
′
⃗
,
若
y
i
⃗
∈
w
2
\vec{y'}=\left\{\begin{matrix}\vec{y_i},&若\vec{y_i}\in w_1\\-\vec{y_i'},&若\vec{y_i}\in w_2 \end{matrix}\right.
y′={yi,−yi′,若yi∈w1若yi∈w2
则样本可分性条件就是存在权向量
a
⃗
\vec{a}
a,使
a
⃗
T
y
i
′
⃗
>
0
,
i
=
1
,
2
,
.
.
.
,
N
\vec{a}^T\vec{y_i'}>0,~~i=1,2,...,N
aTyi′>0, i=1,2,...,N
这样定义的
y
i
′
⃗
\vec{y_i'}
yi′称作规范化增广样本向量。为了讨论方便,我们将
y
′
⃗
\vec{y'}
y′仍然记为
y
⃗
\vec{y}
y。式(6)到底有什么用呢?可以理解为,如果每一个样本
y
⃗
\vec{y}
y都可以归类到正确的类别,那么对于每一个样本,
a
⃗
T
y
i
′
⃗
>
0
\vec{a}^T\vec{y_i'}>0
aTyi′>0都会成立。参照下面这张图会有利于理解:
现在我们讨论线性可分的情况(如上面左图所式)。
如果一个权向量
a
⃗
\vec{a}
a满足
a
⃗
T
y
i
′
⃗
>
0
\vec{a}^T\vec{y_i'}>0
aTyi′>0,对所有
y
i
′
⃗
\vec{y_i'}
yi′都成立,那么称这个
a
⃗
\vec{a}
a为一个解向量。所有解向量组成的区域称作解区间。我们知道,我们要求解的这个向量
a
⃗
\vec{a}
a是使所有
a
⃗
T
y
i
′
⃗
>
0
\vec{a}^T\vec{y_i'}>0
aTyi′>0都成立。那么增广的样本向量位于超平面
a
⃗
T
y
i
′
⃗
=
0
\vec{a}^T\vec{y_i'}=0
aTyi′=0的正侧,即如下图所示:
权向量
a
⃗
\vec{a}
a能唯一确定一个超平面
a
⃗
T
y
i
′
⃗
=
0
\vec{a}^T\vec{y_i'}=0
aTyi′=0,那么求解这个区间,就是需要使所有样本都落在向量
a
⃗
\vec{a}
a确定的超平面的正侧。下图给出了,蓝色直角线确定了以样本
y
1
⃗
\vec{y_1}
y1确定的一个解向量边界线;黄色直角线确定了以样本
y
2
⃗
\vec{y_2}
y2确定的一个解向量边界线。由此可得出全部的解向量空间。
很显然,灰色阴影部分就是向量
a
⃗
\vec{a}
a的所有解空间。但是有一个问题就是在黄线和蓝线上的样本是分类正确的还是分类错误的呢?考虑到噪声、数值计算误差等因素,靠近区间中间的向量应该更可靠。所以,我们用余量这个概念将解区间缩小,不取靠近边缘的解。形式化表示就是,引入余量
b
>
0
b>0
b>0,满足
a
⃗
T
y
i
⃗
>
b
\vec{a}^T\vec{y_i}>b
aTyi>b
下面这张图描述了这个过错。需要注意的是,新的解空间由深黄线和深蓝线围成,注意这里的线不是向量了!只有当解向量指向阴影空间内才是符合要求的权向量
a
⃗
\vec{a}
a。如果想知道为什么浅蓝和深蓝线之间的距离是
b
∣
∣
y
2
⃗
∣
∣
\frac{b}{||\vec{y_2}||}
∣∣y2∣∣b,可以再去复习一下线性判别函数的基本概念。
下面我们开始去寻找这个解向量。
如果样本
y
k
⃗
\vec{y_k}
yk被错误分类,则
a
⃗
T
y
i
⃗
≤
0
\vec{a}^T\vec{y_i}\le0
aTyi≤0。我们可以用对所有错分样本的求和来表示对错分样本的惩罚
J
P
(
a
⃗
)
=
∑
a
⃗
T
y
k
⃗
≤
0
(
−
a
⃗
T
y
k
⃗
)
J_P(\vec{a})=\sum_{\vec{a}^T\vec{y_k}\le0}(-\vec{a}^T\vec{y_k})
JP(a)=aTyk≤0∑(−aTyk)
上式是感知器准则函数。
显然,对于线性可分的情况。当且仅当 J P ( a ∗ ⃗ ) = m i n J P ( a ⃗ ) = 0 J_P(\vec{a^*})=minJ_P(\vec{a})=0 JP(a∗)=minJP(a)=0时 a ∗ ⃗ \vec{a^*} a∗是解向量。
感知器准则函数式的最小化可以用梯度下降法迭代求解:
a
⃗
(
t
+
1
)
=
a
⃗
(
t
)
−
ρ
t
∇
J
P
(
a
⃗
)
\vec{a}(t+1)=\vec{a}(t)-\rho_t\nabla J_P(\vec{a})
a(t+1)=a(t)−ρt∇JP(a)
这个式子的含义是:下一时刻的权向量是把当前时刻的权向量向目标函数的副梯度方向调整一个修正量步长
ρ
t
\rho_t
ρt。
式子中
∇
J
P
(
a
⃗
)
=
∂
J
P
(
a
⃗
)
∂
a
⃗
=
∑
a
⃗
T
y
k
⃗
≤
0
(
−
y
k
⃗
)
\nabla J_P(\vec{a})=\frac{\partial J_P(\vec{a})}{\partial \vec{a}}=\sum_{\vec{a}^T\vec{y_k}\le0}(-\vec{y_k})
∇JP(a)=∂a∂JP(a)=aTyk≤0∑(−yk)
那么,式(9)就可以写为:
a
⃗
(
t
+
1
)
=
a
⃗
(
t
)
−
ρ
t
∑
a
⃗
T
y
k
⃗
≤
0
(
−
y
k
⃗
)
\vec{a}(t+1)=\vec{a}(t)-\rho_t\sum_{\vec{a}^T\vec{y_k}\le0}(-\vec{y_k})
a(t+1)=a(t)−ρtaTyk≤0∑(−yk)
这个式子是向所有在权向量为
a
⃗
(
t
)
\vec{a}(t)
a(t)时不能正确分类的样本
y
k
⃗
\vec{y_k}
yk求向量和方向上修正。有点绕是不是,我画了下面这张图会不会好理解一点呢?刚开始,
y
1
⃗
\vec{y_1}
y1和
y
2
⃗
\vec{y_2}
y2都不能被正确分类,在它们的和方向上进行修正,为一次迭代的结果。
由经验得到,式(11)这种由所有未正确分类样本一起修正的方法效率并不高。书本给出了一个固定步长的梯度下降法效率相对高一些。与式(11)不同的是,这种方法是逐一向未正确分类的样本方向上进行修正迭代权向量 a ⃗ \vec{a} a,直到所有样本都满足 a ⃗ T y i ⃗ > 0 \vec{a}^T\vec{y_i}>0 aTyi>0即可。