第5章CMAC小脑神经网络前面几章介绍的BP神经网络、Hopfield神经网络和BAM神经网络分别属于前馈和反馈神经网络,这主要是从网络的结构来划分的。如果从神经网络的函数逼近功能这个角度来分,神经网络可以分为全局逼近网络和局部逼近网络。若神经网络的一个或多个可调参数(权值和阈值)在输入空间的每一点对任何一个输出都有影响,则称该神经网络为全局逼近网络,前面介绍的多层前馈BP网络是全局逼近网络的典型例子。对于每个输入输出数据对,网络的每一个连接权均需进行调整,从而导致全局逼近网络学习速度变慢,对于有实时性要求的应用来说常常是不可容忍的。如果对网络输入空间的某个局部区域只有少数几个连接权影响网络输出,则称网络为局部逼近网络。对于每个输入输出数据对,只有少量的连接权需要进行调整,从而使局部逼近网络具有学习速度快的优点,这一点对于有实时性要求的应用来说至关重要。目前常用的局部逼近神经网络有CMAC网络、径向基函数RBF网络和B样条网络等,其结构原理相似,本书主要介绍CMAC神经网络和RBF神经网络。1975年J.S.Albus提出一种模拟小脑功能的神经网络模型,称为CerebellarModelArticulationController[1-2],简称CMAC。CMAC网络是仿照小脑控制肢体运动的原理而建立的神经网络模型。小脑指挥运动时具有不假思索地作出条件反射迅速响应的特点,这种条件反射式响应是一种迅速联想。CMAC网络有3个特点:作为一种具有联想功能的神经网络,它的联想具有局部推广(或称泛化)能力,因此相似的输入将产生相似的输出,反之则产生独立的输出。对于网络的每一个输出,只有很少的神经元所对应的权值对其有影响,哪些神经元对输出有影响则由输入决定。CMAC的每个神经元的输入输出是一种线性关系,但其总体上可看做一种表达非线性映射的表格系统。由于CMAC网络的学习只在线性映射部分,因此可采用简单的δ算法,其收敛速度比BP算法快得多,且不存在局部极小问题。CMAC最初主要用来求解机械手的关节运动,后来被进一步应用于机械人控制、模式识别、信号处理以及自适应控制等领域[3-4]。5.1CMAC结构及工作原理[5]5.1.1CMAC结构简单的CMAC结构如图5-1所示,图中X表示p维输入状态空间,A为具有n个单元的存储区(又称为相联空间或概念记忆空间)。设CMAC网络的输入向量用p维输入状态空间X中的点Tipiiixxxx),,,(21表示,对应的输出向量用),,,(21ipiiixxxFy表示,图中3,2,1i,输入空间的一个点iX将同时激活A中的LN个元素(图5-1中LN=4),使其同时为1,而其他大多数元素为0,网络的输出iy即为A中4个被激活单元的对应权值累加和。LN称为泛化参数,反应网络泛化能力大小,也可将其看做信号检测单元的感受野大小。对CMAC来说,其工作过程一般包括两个方面:①结果输出计算及误差生成阶段;②权值调整阶段。1XX2X3XCA1a2a3a4a1w2w3w4w1iaia1ia2ia3ia4ia1iwiw1iw2iw3iw4iw…)(11Xfy)(22Xfy)(33Xfy图5-1CMAC网络的结构5.1.2CMAC工作原理1.CMAC的结果输出计算及误差产生阶段一般来说,实际应用时输入向量的各分量来自不同的传感器,其值多为模拟量,而A中每个元素只取0或1两种值。为使X空间的点映射为A空间的离散点,必须先将模拟量iX量化,使其成为输入状态空间的离散点。设输入向量X的每一个分量可量化为q个等级,则p个分量可组合为输入状态空间pq种可能的状态iX,pqi,,2,1。其中每一个状态iX都要映射为A空间存储区的一个集合iA,iA的LN个元素均为1。从图5-1可以看出,在X空间接近的样本2X和3X在A中的映射2A和3A出现了交集32AA,即它们对应的4个权值中有两个是相同的,因此有权值累加和计算的两个输出也较接近,从函数映射的角度看,这一特点可起到泛化的作用。显然,对相距很远的样本1X和3X,映射到A中的31AA为空集,这种泛化不起作用,因此是一种局部泛化。输入样本在输入空间距离越近,映射到A存储区后对应交集中的元素就越接近LN,其对应的输入样本在A中产生的交集起到了将相近样本聚类的作用。为使对于X空间的每一个状态在A空间均存在惟一的映射,应使A存储区中单元的个数至少等于X空间的状态个数,即pqn。设将三维输入的每个分量量化为10个等级,则1000n。对于许多实际系统,pq往往要比这个数字大得多,但由于大多数学习问题不会包含所有可能的输入值,实际上不需要pq个存储单元来存放学习的权值。A相当于一种虚拟的内存地址,每个虚拟地址和输入状态空间的一个样本点相对应。通过哈希编码(Hash-coding)可将具有pq个存储单元的地址空间A映射到一个小得多的物理地址连接iA中。对于每个输入,A中只有LN个单元为1,而其余的均为0,因此A是一个稀疏矩阵。哈希编码是压缩稀疏矩阵的常用技术,具体方法是通过一个产生随机数的程序来实现的。以A的地址作为随机数产生的程序的变量,产生的随机数作为iA的地址。由于产生的随机数限制在一个较小的整数范围内,因此iA远比A小得多。显然,从A到iA的压缩是一种多对少的随机映射。在iA中,对每一个样本有LN个随机地址与之对应,LN个地址存放的权值通过学习得到,其累加和即作为CMAC的输出。其表达式为:mixawyLNjjji,,1)(1(5-1)其中,jw为第j个存储单元的权值,若)(xaj激活,则其值为1,否则为0,只有LN个存储单元对输出有影响。相近的输入激活的存储单元有交叠,产生相近的输出,不相近的输入将产生不相近的输出。对应的误差表达式为:mixawyELNjjjsi,,2,1)(1(5-2)2.CMAC的权值调整阶段CMAC算法中结果输出阶段从CMAC存储单元产生一实际输出,学习过程根据期望输出与实际输出的误差大小来更新CMAC存储单元中的权值。在常规CMAC算法中误差被平均分配到所有被激活的存储单元。设s为某一状态,)(twj是经过第t次迭代后存储在第j个存储单元中的权值。常规CMAC更新)(twj算法为:LNjjjsjLjjtwxayaNtwtw1))1()(()1()((5-3)sy为状态s的期望输出,LNjjjtwxa1)1()(为状态s的实际输出,为学习常数。5.2CMAC改进学习算法在CMAC神经网络应用中,一般来说其实时性要求都较高。如非线性动态系统的在线辨识,不仅要求精度高,而且要求快速学习。但是,常规的CMAC仍然需要多个周期才能达到一定的收敛精度,也就是说,常规CMAC虽然其收敛速度快于BP网络,但作为在线学习来说,仍难满足其快速性的要求。为此,近些年来,一些学者提出了许多相关算法,大多是在常规CMAC算法上进行改进。下面介绍几种重要的改进算法。5.2.1模糊CMAC神经网络算法为提高CMAC学习的实时性和准确性。NieJ.和GengZ.J.等人将模糊自组织竞争算法引入CMAC中,来改造常规的CMAC神经网络,提出了一种模糊CMAC算法[6-7,10],作如下定义:定义5-1设CMAC中某个输入x激活的LN个的存储单元可看作中心为jz,LNj,,2,1,宽度为2的一个邻域j,称j为联想域。对常规CMAC来说,若jja,则1ja,否则为0。联想域有交叠,使网络有局部泛化能力。定义5-2设输入nRx,联想域j(LNj,,2,1)的中心为jz,半径为,将每个存储单元用一与输入同维的向量ja表示,则联想度为:其他0xaxaajjfj(5-4)基于联想度的概念,可获得一模糊化的联想向量TfNffjLaaxa),,()(1,进而得到FCMAC的输出:LNjLfjjiNjmixawy1,,2,1,,,2,1)((5-5)若令LfjNja,,1,1,其他情况0ia,则)(xafj退化为二进制向量)(xaj,可见常规CMAC为FCMAC的特殊情况。对网络权值(存储的数据)学习调整,文献[8,9]采用以下算法:LNjfjfjNjjfjsjjNjaatwayktwtwLL,,2,1/))1()(()1()(11(5-6)其他)1()2(04.1)1()1(7.0)2()1()1(05.1)(ttetettetett(5-7)由于联想度的引入,也省去了CMAC的离散、量化、编码、hashing映射等复杂运算。对于联想域大小的确定,采用自组织竞争算法来实现,从而完成输入空间的自组织分割,使网络的学习速度和精度得到较大的提高。5.2.2基于信度分配的平衡学习CMAC神经网络算法在常规CMAC及模糊CMAC学习算法的权值学习调整中,误差被平均分配给每个被激活的存储单元,而未考虑各个被激活存储单元对误差的贡献率,也即在经过t次学习后,对调整次数不同的激活存储单元其权值的可信度仍被看成完全相同的。这种权值更新算法完全违背了信度分配的概念,这样的权值学习算法,必然使那些权值不该调整或应该较少调整的存储单元(其权值可信度高)需反复学习调整;而对误差贡献较大的存储单元(其权值可信度低),本应该使其权值得到较大调整,但实际上权值学习调整量减少。为了达到预定的逼近精度,网络必须多次反复学习,从而使CMAC的学习效率降低,学习时间延长。为了提高CMAC学习速度,文献[11]在分析常规CMAC权值调整规则的基础上,考虑到已学习知识的可信度,提出一种基于信度分配的CA-CMAC(CreditassignmentCMAC)算法。同时引入CMAC存储单元地址函数,来解决信度的定义问题。文献[12]在此基础上进一步考虑到网络权值调整时,新知识“学习”与旧知识“遗忘”的平衡问题,提出一种基于“平衡学习”的CMAC神经网络学习算法。下面以二维CMAC为例进行介绍。1.常规CMAC神经网络的分级量化方法CMAC的基本思想就是将学习的数据(知识)存储在交叠的存储单元(记忆空间)中,其输出为相应激活单元数据的累加和。以二维CMAC为例,定义输入矢量为变量1x和2x。二维CMAC结构如图5-2所示。在本例中,每个变量分成7个等分区域,每个状态变量有3级,每级由构成。对第1级,变量1x被划为3块AB和C,变量2x被划为a,b和c。则Aa,Ab,Ac,Ba,Bb,Bc,Ca,Cb和Cc为存储数据的地址或单元(hypercubes);与此相似,对第2级,有存储单元Dd,De,Df,Ed,Ee,Ef,Fd,Fe和Ff;对第3级,有存储单元Gg,Gh,Gi,Hg,Hh,Hi,Ig,Ih和Ii。必须注意,只有同级的不同变量的分块组合才能形成存储单元。像组合Ad,Db等是不存在的。此处的二维CMAC中,用27个存储单元来存储49个状态的数据。CMAC的基本思想如图5-3所示。在CMAC算法实现过程中有两个阶段:结果输出阶段和权值学习阶段。在结果输出阶段,CMAC将所有被输入状态激活的存储单元的权值(存储数据)相加。Njjjsway1(5-8)存储单元数为N,设m为状态变量的级数(图5-2中状态变量级数m=3),n为总状态数。sy为状态s(s=1,…,n)的实际输出值。jw为第j个存储单元的权值,ja是第j个存储单元是否被状态s激活的指示。由于每个状态仅被m个存储单元包含,只有这些存储单元被激活,其ja为1,而其他存储单元ja全为0。如图5-2中,存储单元Bb,Ee和Hh被状态)3,3(s激活,所以仅有这3个ja为1,而其他存储单元ja全为0。x2实际输出值状态s(3,3)BbHhEex101234560123456ABCDEFGHIabcdefghiw1w2w3wn…学习空间S存储单元指示存储权值期望值误差+-1A2A3AnA…S图5-2二维CMAC结构图5-3CMAC的基本原理CMAC算法中结果输出阶段从C