第六章 神经网络在模式识别中的应用 模式识别模拟的是人类一部分智能—识别、判断能力,而人类的智能活动都是在大脑的神经系统中完成的,如果我们能够模拟人类大脑的工作机理来实现识别系统,应该能够取得好的效果。人工神经网络的研究证实在这方面所进行的探索。 6.1 人工神经网络的基础知识 一、人工神经网络的发展历史 1943年,心理学家McCulloch和数学家Pitts提出了形式神经元的数学模型; 1949年,心理学家Hebb提出了神经元学习的准则; 20世纪50年代末,Rosenblatt提出了感知器模型,引起了神经元研究的广泛兴趣; 1969年,Minsky等人指出了感知器的局限性,神经网络的研究热潮下降; 1982年,Hopfield提出了一种神经网络的动力学模型,可以用于联想记忆和优化计算; 1986年,Rumelhart等人提出了多层感知器模型,克服了感知器模型的局限性,使得人工神经网络的研究再度受到重视。 二、生物神经元  一个典型的神经元(或称神经细胞)可以看作有三部分组成:细胞体,树突和轴突。 树突是神经元的生物信号输入端,与其它的神经元相连;轴突是神经元的信号输出端,连接到其它神经元的树突上;神经元有两种状态:兴奋和抑制,平时神经元都处于抑制状态,轴突没有输入,当神经元的树突输入信号大到一定程度,超过某个阈值时,神经元有抑制状态转为兴奋状态,同时轴突向其它神经元发出信号。 三、人工神经元 人工神经元是仿照生物神经元提出的,神经元可以有个输入:,每个输入端与神经元之间有一定的联接权值:,神经元总的输入为对每个输入的加权求和,同时减去阈值:  神经元的输出是对的映射:  称为输出函数,可以有很多形式。当为阈值函数时,神经元就可以看作是一个线性分类器。  当取为Sigmoid函数时,神经元完成的是连续的线性映射:  [0,1]  [-1,1]  一个神经元的结构可以简化为下图的形式:  其中输入矢量为增广矢量,最后一维,用代替阈值。 6.2 前馈神经网络 在前馈网络中,每个神经元只接受前一级的输入,并输出到下一级,没有反馈。 一、感知器 感知器实际上是一个两层前馈网络,第一层为输入层,只是将输入的特征值传输给下一层;第二层为计算单元。下图表示的就是一个两输入,四输出的感知器。  感知器的学习算法同前面介绍的类似,只不过现在的输出可能不止是0和1。设某一个训练样本的理想输出为,而实际输出为,则权值可按如下公式进行修改:  其中为步长。 单个神经元可以实现两类问题的线性分类,多个感知器则可以实现多类别问题的线性分类。例如上图中的网络就可以实现四类问题的分类,训练时,第1类的训练样本理想输出为(1,0,0,0),第2类的理想输出为(0,1,0,0),第3类为(0,0,1,0),第4类为(0,0,0,1)。也就是每个神经元输出为1代表某一类别。这样的网络实际上是由拒绝区域的分类,当待识样本输入后,输出全部为0或由不止一个输出为1,则应该拒识。 如果对于四个类别问题,用两个计算单元进行编码输出时,则可以做到无拒识。也就是说第1类训练样本的理想输出为(0,0),第2类为(0,1),第3类为(1,0),第4类为(1,1)。 二、多层感知器  多层感知器可以解决感知器的局限性问题,实现输入和输出之间的非线性映射。上图表示的是两个输入,两个输出,四个隐元的三层感知器。其中第1层称为输入层,第2层称为隐层,第3层称为输出层。在多层感知器网络中,隐层的个数可以不止一个。隐层元的输出函数应该是Sigmoid函数。 多层感知器的训练算法相对于感知器算法要复杂得多,一般称为BP算法(Back-Propogation),或称为反向传播算法,多层感知器网络也称为BP网络。下面简单介绍一下BP算法的主要思想。 在感知器算法中我们实际上是在利用理想输出与实际输出之间的误差作为增量来修正权值,然而在多层感知器中,我们只能计算出输出层的误差,中间层的误差无法得到。BP算法的主要思想是从后先前反向逐层传播输出层的误差,以间接计算隐层的误差。算法可以分为两个阶段:第一阶段是一个正向过程,输入信息从输入层经隐层逐层计算个单元的输出值;第二阶段是一个反向传播过程,输出层的误差逐层向前传播,算出隐层个单元的误差,并用误差修正权值。 BP算法的严格推导比较复杂,下面直接给出具体算法: 选定所有神经元权系数的初始值; 重复下述过程直到收敛为止; 从前向后计算各层神经元的实际输出: , 对输出层计算增量:  从前向后计算隐层神经元的增量:  修正个神经元的权值:  多层感知器网络的识别过程就相当于一个正向过程,输入信息从输入层经隐层逐层计算个单元的输出值,直到计算出输出层的输出为止。 例6.1 BP网络学习XOR问题 例6.2 BP网络进行函数拟合 BP算法的缺点是对初始值的依赖性比较强,容易收敛到局部最小点;算法的收敛速度较慢。 6.3 自组织特征映射网络 生物神经学的研究发现,人的大脑皮层中神经网络的功能是分区的,每个区域完成各自的功能。记忆也是一样,一个特定区域记忆一类特殊的事务,另一个区域记忆另外一些事务。同时在记忆的过程中,相近的神经元之间共同兴奋,而对较远的神经元则存在着侧向抑制的现象,抑制其兴奋。 一、网络结构 Kohonen依据这样的思想提出了一种神经网络,一般称为自组织特征映射网络(Self-Organizing Feature Map, SOM或SOFM),也被称为Kohonen网络。SOM网络是一个两层网络,包括输入层和竞争层,输入层的神经元个数等于特征的维数,竞争层包含个神经元,组成一个方阵。输入层和竞争层之间是全互连的,竞争层的神经元之间训练时存在着侧向抑制,识别时没有任何连接。  二、网络的识别过程 当SOM网络训练好之后,我们希望用网络中的某个区域对应某一类模式,当输入一个待识模式时,计算输入特征矢量与网络中每个神经元权值之间的距离,以距离最小者作为胜元,也就是兴奋程度最大的神经元,然后根据这个胜元所在的区域确定待识模式的类别。 输入特征与神经元权值之间距离的计算可以采用多种形式,常用的有欧氏距离和矢量点积。采用欧氏距离时以最小值确定胜元,采用矢量点积时则以最大值确定胜元。令输入特征矢量为,第个神经元的权值为,则有: 欧氏距离:; 矢量点积:。 三、网络的学习过程 SOM网络的学习也是一个迭代的算法,在第次迭代中要有一个以胜元为中心的邻域,在这个邻域内的神经元权值得到增强,邻域之外的神经元受到抑制或不增强。邻域的形状可以选择方形、圆形或多边形。 SOM网络最大的特点是可以对没有类别标签的样本进行学习,也就是可以进行聚类分析,因为经过多次迭代学习之后,相近的样本激活的胜元在空间中分布的区域相近,我们可以将这个区域确定为一个类别。下面给出网络训练算法(采用欧氏距离): 初始化,随机赋值所有竞争层神经元的权值,并且将每个神经元的权值矢量归一化单位长度,也就是,确定初始的邻域,以及学习次数和初始学习速率; 输入训练样本归一化:; 计算训练样本与每一个神经元之间的距离,并确定胜元:   调整连接权值:  对连接权值进行归一化:; 重复2~5的过程,全部训练样本训练一遍; 进行下一次迭代,,更新和,应该越来越小,最后变为0,的区域也应该越来越小,最后只包含一个胜元。 重复2~7的过程,直到为止。 例6.3 样本聚类