3.5 感知器算法

3.5.1 概述

  • 一旦判别函数的形式确定下来,不管它是线性的还是非线性的,剩下的问题就是如何确定它的系数

  • 在模式识别中,系数确定的一个主要方法就是通过对已知样本的训练和学习来得到

  • 感知器算法就是通过训练样本模式的迭代和学习,产生线性(或广义线性)可分的模式判别函数

采用感知器算法(Perception Approach)能通过对训练模式样本集的“学习”得到判别函数的系数。

这里采用的算法不需要对各类别中模式的统计性质做任何假设,因此称为确定性的方法

3.5.2 感知器的训练算法

已知两个训练模式集分别属于ω1\omega_1类和ω2\omega_2类,权向量的初始值为w(1)\boldsymbol{w}(1),可任意取值。则在用全部训练模式集进行迭代训练时,第k次的训练步骤为:

  • xkω1x_k\in\omega_1wT(k)xk0\boldsymbol{w}^T(k)x_k\leq0xkω2x_k\in\omega_2wT(k)xk>0\boldsymbol{w}^T(k)x_k>0,则说明分类器对第k个模式做出了错误分类,此时应该校正权向量,使得

w(k+1)=w(k)Cxkw(k+1)=w(k)-Cx_k

​ 其中C为校正增量

  • 否则,则说明分类正确,因此权向量不变:

w(k+1)=w(k)w(k+1)=w(k)

若对xω2x\in\omega_2的模式样本乘以-1,则有:

wT(k)xk0,w(k+1)=w(k)+Cxk\text{若}\boldsymbol{w}^T(k)x_k\leq0,\text{则}w(k+1)=w(k)+Cx_k

因此,感知器算法可以统一写成:

w(k+1)={w(k)wT(k)xk>0w(k)+CxkwT(k)xk0w(k+1) = \begin{cases} w(k) & \boldsymbol{w}^T(k)x_k > 0 \\ w(k) + Cx_k & \boldsymbol{w}^T(k)x_k\leq0 \end{cases}

感知器算法本质上是一种赏罚过程

  • 对正确分类的“赏”本质是“不罚”

  • 对错误分类的“罚”,本质是给权向量加上一个正比于xkx_k的分量

将属于ω2\omega_2的训练样本乘以-1,并写作增广向量的形式,则有:

x1=(0,0,1)Tx2=(0,1,1)Tx3=(1,0,1)Tx4=(1,1,1)T\begin{align} x_1&=(0,0,1)^T \nonumber \\ x_2&=(0,1,1)^T\nonumber \\ x_3&=(-1,0,-1)^T\nonumber \\ x_4&=(-1,-1,-1)^T\nonumber \end{align}

接下来开始迭代

第一轮,取C=1,w(1)=(0,0,0)TC=1,w(1)=(0,0,0)^T

wT(1)x1=(0,0,0)(0,0,1)T=00\boldsymbol{w}^T(1)x_1=(0,0,0)(0,0,1)^T=0\not\gt 0,因此w(2)=w(1)+x1=(0,0,1)T\boldsymbol{w}(2)=\boldsymbol{w}(1) + x_1 = (0,0,1)^T

wT(2)x2=(0,0,1)(0,1,1)T=1>0\boldsymbol{w}^T(2)x_2=(0,0,1)(0,1,1)^T=1\gt 0,因此w(3)=w(2)=(0,0,1)T\boldsymbol{w}(3)=\boldsymbol{w}(2)= (0,0,1)^T

wT(3)x3=(0,0,1)(1,0,1)T=10\boldsymbol{w}^T(3)x_3=(0,0,1)(-1,0,-1)^T=-1\not\gt 0,因此w(4)=w(3)+x3=(1,0,0)T\boldsymbol{w}(4)=\boldsymbol{w}(3) + x_3 = (-1,0,0)^T

wT(4)x4=(1,0,0)(1,1,1)T=1>0\boldsymbol{w}^T(4)x_4=(-1,0,0)(-1,-1,-1)^T=1\gt 0,因此w(5)=w(4)=(1,0,0)T\boldsymbol{w}(5)=\boldsymbol{w}(4) = (-1,0,0)^T

由于上一轮迭代中还存在不大于0的情况,因此继续第二轮迭代:

wT(5)x1=(1,0,0)(0,0,1)T=00\boldsymbol{w}^T(5)x_1=(-1,0,0)(0,0,1)^T=0\not\gt 0,因此w(6)=w(5)+x1=(1,0,1)T\boldsymbol{w}(6)=\boldsymbol{w}(5) + x_1 = (-1,0,1)^T

wT(6)x2=(1,0,1)(0,1,1)T=1>0\boldsymbol{w}^T(6)x_2=(-1,0,1)(0,1,1)^T=1\gt 0,因此w(7)=w(6)=(1,0,1)T\boldsymbol{w}(7)=\boldsymbol{w}(6) = (-1,0,1)^T

wT(7)x3=(1,0,1)(1,0,1)T=00\boldsymbol{w}^T(7)x_3=(-1,0,1)(-1,0,-1)^T=0\not\gt 0,因此w(8)=w(7)+x3=(2,0,0)T\boldsymbol{w}(8)=\boldsymbol{w}(7) + x_3 = (-2,0,0)^T

wT(8)x4=(2,0,0)(1,1,1)T=2>0\boldsymbol{w}^T(8)x_4=(-2,0,0)(-1,-1,-1)^T=2\gt 0,因此w(9)=w(8)=(2,0,0)T\boldsymbol{w}(9)=\boldsymbol{w}(8) = (-2,0,0)^T

仍然不是全满足,继续第四轮迭代:

wT(9)x1=(2,0,0)(0,0,1)T=00\boldsymbol{w}^T(9)x_1=(-2,0,0)(0,0,1)^T=0\not\gt 0,因此w(10)=w(9)+x1=(2,0,1)T\boldsymbol{w}(10)=\boldsymbol{w}(9) + x_1 = (-2,0,1)^T

wT(10)x2=(2,0,1)(0,1,1)T=1>0\boldsymbol{w}^T(10)x_2=(-2,0,1)(0,1,1)^T=1\gt 0,因此w(11)=w(10)=(2,0,1)T\boldsymbol{w}(11)=\boldsymbol{w}(10) = (-2,0,1)^T

wT(11)x3=(2,0,1)(1,0,1)T=1>0\boldsymbol{w}^T(11)x_3=(-2,0,1)(-1,0,-1)^T=1\gt 0,因此w(12)=w(11)=(2,0,1)T\boldsymbol{w}(12)=\boldsymbol{w}(11) = (-2,0,1)^T

wT(12)x4=(2,0,1)(1,1,1)T=1>0\boldsymbol{w}^T(12)x_4=(-2,0,1)(-1,-1,-1)^T=1\gt 0,因此w(13)=w(12)=(2,0,1)T\boldsymbol{w}(13)=\boldsymbol{w}(12) = (-2,0,1)^T

仍然有一个不满足,继续第四轮迭代:

wT(13)x1=(2,0,1)(0,0,1)T=1>0\boldsymbol{w}^T(13)x_1=(-2,0,1)(0,0,1)^T=1\gt 0,因此w(14)=w(13)=(2,0,1)T\boldsymbol{w}(14)=\boldsymbol{w}(13) = (-2,0,1)^T

wT(14)x2=1>0\boldsymbol{w}^T(14)x_2=1\gt 0,因此w(15)=w(14)=(2,0,1)T\boldsymbol{w}(15)=\boldsymbol{w}(14) = (-2,0,1)^T

wT(15)x3=1>0\boldsymbol{w}^T(15)x_3=1\gt 0,因此w(16)=w(15)=(2,0,1)T\boldsymbol{w}(16)=\boldsymbol{w}(15) = (-2,0,1)^T

wT(16)x2=1>0\boldsymbol{w}^T(16)x_2=1\gt 0,因此解向量为(2,0,1)T(-2,0,1)^T,对应的判别函数即为:

d(x)=2x1+1d(x) = -2x_1+1

感知器算法的收敛性

只要模式类别是线性可分的,就可以在有限的迭代步数里求出权向量

3.5.3 使用感知器算法的多模式分类

采用3.2.2章节中第三种情况,对M类模式存在M个判别函数{di,i=1,2,,M}\{d_i, i = 1,2,\dots,M\},若xω1x\in\omega_1,则di>dj,jid_i\gt d_j,\forall j\neq i。由此将感知器算法推广到多类模式:

设M种模式类别ω1,ω2,,ωM\omega_1,\omega_2,\dots,\omega_M,若在训练过程的第k次迭代时,一个属于ωi\omega_i类的模式样本x送入分类器,则应先算出M个判别函数:

dj(k)=ωj(k)x,  j=1,2,,Md_j(k)=\omega_j(k)x,\ \ j=1,2,\dots,M

di(k)>dj(k), j=1,2,,M, jid_i(k)\gt d_j(k),\ j=1,2,\dots,M,\ \forall j\neq i的条件成立,则权向量不变,即:

wj(k+1)=wj(k)w_j(k+1) = w_j(k)

若其中第一个权向量使得dj(k)d1(k)d_j(k)\leq d_1(k),则相应的权向量应作调整,即:

{wi(k+1)=wi(k)+Cxwl(k+1)=wl(k)Cxwj(k+1)=wj(k)j=1,2,,M,ji,jl\begin{cases} w_i(k+1) = w_i(k)+C_x \\ w_l(k+1) = w_l(k)-C_x \\ w_j(k+1) = w_j(k) & j=1,2,\dots,M,j\neq i,j\neq l \end{cases}

其中C是一个正常数,权向量的初值可视情况任意选择。

例:给出三类模式的训练样本

ω1:{(0,0)T},ω1:{(1,1)T},ω1:{(1,1)T}\omega_1:\{(0,0)^T\},\\ \omega_1:\{(1,1)^T\},\\ \omega_1:\{(-1,1)^T\}

将模式样本写成增广形式:

x1=(0,0,1)Tx2=(1,1,1)Tx3=(1,1,1)Tx_1 = (0,0,1)^T \\ x_2 = (1,1,1)^T \\ x_3 = (-1,1,1)^T

取初始值w1(1)=w2(1)=w3(1)=(0,0,0)Tw_1(1)=w_2(1)=w_3(1)=(0,0,0)^T,C=1

第一轮迭代,以x1x_1为训练样本

d1(1)=w1T(1)x1=(0,0,0)(0,0,1)T=0d2(1)=w2T(1)x1=(0,0,0)(0,0,1)T=0d3(1)=w3T(1)x1=(0,0,0)(0,0,1)T=0d_1(1)=w_1^T(1)x_1=(0,0,0)(0,0,1)^T=0 \\ d_2(1)=w_2^T(1)x_1=(0,0,0)(0,0,1)^T=0 \\ d_3(1)=w_3^T(1)x_1=(0,0,0)(0,0,1)^T=0

由于d1(1)d2(1),d1(1)d3(1)d_1(1)\not\gt d_2(1),d_1(1)\not\gt d_3(1),因此:

w1(2)=w1(1)+x1=(0,0,1)Tw2(2)=w2(1)x1=(0,0,1)Tw3(2)=w3(1)x1=(0,0,1)Tw_1(2) = w_1(1) + x_1=(0,0,1)^T \\ w_2(2) = w_2(1) - x_1=(0,0,-1)^T \\ w_3(2) = w_3(1) - x_1=(0,0,-1)^T

第二轮迭代,以x2x_2为训练样本

d1(2)=w1T(2)x2=(0,0,1)(1,1,1)T=1d2(2)=w2T(2)x2=(0,0,1)(1,1,1)T=1d3(2)=w3T(2)x2=(0,0,1)(1,1,1)T=1d_1(2)=w_1^T(2)x_2=(0,0,1)(1,1,1)^T=1 \\ d_2(2)=w_2^T(2)x_2=(0,0,-1)(1,1,1)^T=-1 \\ d_3(2)=w_3^T(2)x_2=(0,0,-1)(1,1,1)^T=-1

由于d2(2)d1(2),d2(2)d3(2)d_2(2)\not\gt d_1(2),d_2(2)\not\gt d_3(2),因此:

w1(3)=w1(2)x2=(1,1,0)Tw2(3)=w2(2)+x2=(1,1,0)Tw3(3)=w3(2)x2=(1,1,2)Tw_1(3) = w_1(2) - x_2=(-1,-1,0)^T \\ w_2(3) = w_2(2) + x_2=(1,1,0)^T \\ w_3(3) = w_3(2) - x_2=(-1,-1,-2)^T

第三轮迭代,以x3x_3为训练样本

d1(3)=w1T(3)x3=(1,1,0)(1,1,1)T=0d2(3)=w2T(3)x3=(1,1,0)(1,1,1)T=0d3(3)=w3T(3)x3=(1,1,2)(1,1,1)T=2d_1(3)=w_1^T(3)x_3=(-1,-1,0)(-1,1,1)^T=0 \\ d_2(3)=w_2^T(3)x_3=(1,1,0)(-1,1,1)^T=0 \\ d_3(3)=w_3^T(3)x_3=(-1,-1,-2)(-1,1,1)^T=-2

由于d3(3)d1(3),d3(3)d2(3)d_3(3)\not\gt d_1(3),d_3(3)\not\gt d_2(3),因此:

w1(4)=w1(3)x3=(0,2,1)Tw2(4)=w2(3)x3=(2,0,1)Tw3(4)=w3(3)+x3=(2,0,1)Tw_1(4) = w_1(3) - x_3=(0,-2,-1)^T \\ w_2(4) = w_2(3) - x_3=(2,0,-1)^T \\ w_3(4) = w_3(3) + x_3=(-2,0,-1)^T

第四轮迭代,以x1x_1为训练样本

d1(4)=w1T(4)x1=1d2(4)=w2T(4)x1=1d3(4)=w3T(4)x1=1d_1(4)=w_1^T(4)x_1=-1 \\ d_2(4)=w_2^T(4)x_1=-1 \\ d_3(4)=w_3^T(4)x_1=-1

由于d1(4)d2(4),d1(4)d3(4)d_1(4)\not\gt d_2(4),d_1(4)\not\gt d_3(4),因此:

w1(5)=w1(4)+x1=(0,2,0)Tw2(5)=w2(4)x1=(2,0,2)Tw3(5)=w3(4)x1=(2,0,2)Tw_1(5) = w_1(4) + x_1=(0,-2,0)^T \\ w_2(5) = w_2(4) - x_1=(2,0,-2)^T \\ w_3(5) = w_3(4) - x_1=(-2,0,-2)^T

第五轮迭代,以x2x_2为训练样本

d1(5)=w1T(5)x2=2d2(5)=w2T(5)x2=0d3(5)=w3T(5)x2=4d_1(5)=w_1^T(5)x_2=-2 \\ d_2(5)=w_2^T(5)x_2=0 \\ d_3(5)=w_3^T(5)x_2=-4

由于d2(5)>d1(5),d2(5)>d3(5)d_2(5)\gt d_1(5),d_2(5)\gt d_3(5),因此:

w1(6)=w1(5)w2(6)=w2(5)w3(6)=w3(5)w_1(6) = w_1(5) \\ w_2(6) = w_2(5) \\ w_3(6) = w_3(5)

第六轮迭代,以x3x_3为训练样本

d1(6)=w1T(6)x3=2d2(6)=w2T(6)x3=4d3(6)=w3T(6)x3=0d_1(6)=w_1^T(6)x_3=-2 \\ d_2(6)=w_2^T(6)x_3=-4 \\ d_3(6)=w_3^T(6)x_3=0

由于d3(6)>d1(6),d3(6)>d2(6)d_3(6)\gt d_1(6),d_3(6)\gt d_2(6),因此:

w1(7)=w1(6)w2(7)=w2(6)w3(7)=w3(6)w_1(7) = w_1(6) \\ w_2(7) = w_2(6) \\ w_3(7) = w_3(6)

第七轮迭代,以x1x_1为训练样本

d1(7)=w1T(7)x1=0d2(7)=w2T(7)x1=2d3(7)=w3T(7)x1=2d_1(7)=w_1^T(7)x_1=0 \\ d_2(7)=w_2^T(7)x_1=-2 \\ d_3(7)=w_3^T(7)x_1=-2

由于d1(7)>d2(7),d1(7)>d3(7)d_1(7)\gt d_2(7),d_1(7)\gt d_3(7),因此权向量不变

综上,可得最后的权向量:

w1=(0,2,0)Tw2=(2,0,2)Tw3=(2,0,2)Tw_1=(0,-2,0)^T \\ w_2=(2,0,-2)^T \\ w_3=(-2,0,-2)^T

因此判别函数为:

d1(x)=2x2d2(x)=2x12d3(x)=2x12d_1(x) = -2x_2 \\ d_2(x) = 2x_1-2 \\ d_3(x) = -2x_1-2

这里的分类算法都是通过模式样本来确定判别函数的系数,但一个分类器的判断性能最终要受并未用于训练的那些未知样本来检验。

要使一个分类器设计完善,必须采用有代表性的训练数据,它能够合理反映模式数据的整体。

一般来说,合适的样本数目可如下估计:

若k是模式的维数,令C=2(k+1),则通常选用的训练样本数目约为C的10~20倍。

最后更新于