《人工神经网络》第8章 CMAC模型
(仅是个人学习摘抄)
CMAC(Cerebellar Model Articulation Controller)被称为“小脑模型控制器”,但其网络模型与习惯上的人工神经网络有所不同,它进行单元的权值调节,但是不具备人工神经网络的层次连接结构,也不具备动力学的行为,只是一种非线性的映射。CMAC 是以一种控制器模型被提出来的。
8.1 CMAC 模型
CMAC 是一个多维连续系统的自适应学习网络,可以认为是对外界函数的多维查询系统。结构如图所示:
图中,S 为 n 维输入矢量空间;A 为联想记忆空间(单元);P 是输出响应矢量。
输入空间 S 中的每一矢量 S(...,Si,...,Sj,...)被量化后,成为 A 的地址变量。考虑 A 中被激活的单元为 A*,A* 属于 A(A* 是 A 的一个子集),则 A* 的模 |A*| 表示了 A* 空间的长度。
将输入矢量空间 S 作为 A 空间的地址矢量,则 P 就是相应地址中的内容。这就构成了如下映射关系:
f:S→A
g:A→P
f 是固定的,g 依赖于 P 中的内容变化。这个变化可称为权值调节或训练。
由上述分析,可以看出:在 S 中,若 Si 和 Sj 相互之间有一定的联系和影响,那么上述的联想推理特征正是所期望的;反之,若 Si 和 Sj 之间是独立不相干的,其映射后产生的 Ai* 和 Aj* 的交集对两个输入所期望的输出发生“学习干扰”,而对此是不希望发生的。一般可通过两个方面的作用来克服这一对矛盾:
8.2 CMAC 映射算法
将映射 S→A 分解为两个子映射:
S→M
S→A
(1)一维情况:在一维情况下,子空间 M 与 A 是一样的,即 M = A。有 |m*| = |A*|
由 a b c d 往下是 e,以 e 为起始,向后循环,依次直至最后。
从上述算法可以看出,映射空间在满足 S→A 映射前提下,A 的大小由 S 确定。假定 S = {S1,S2,...,Sn},每一分量取值的数目为 R,那么 A 所需要的空间就为 Rn。若 R 和 n 较大,则在实际应用中不能满足。因此,必须要进行空间压缩,但又不能影响 CMAC 的特性。这里采用 Hash-Coding(散列编码)的编码技术来压缩空间。
Hash-Coding 是计算技术中常见的一种编码方法,有时也被称为“杂凑编码”。它是将大空间的分散数据或是稀疏矩阵中的元素经编码存贮在一个较小的空间中的方法。
Hash-Coding 有许多编码方法,如乘法、除法等。在上面的例子中,空间 A 是以 a,b,c,d,...等表示,可将这些符号的 ASCII 码取出并相加,其和再除以集合 A 的长度,其余数就可作为散列值,这就形成了杂凑编码。
用 Hash-Coding 方法对 A 编码获得的散列空间用符号 Ap 表示。Ap 可任意选择,以与实际可实现的物理空间大小相对应。这种 A→Ap 映射实现了从多到少映射的要求,如下所示:
但是 Hash-Coding 编码实现 A→Ap 映射后,必然会出现所谓的“映射冲突”(collision)。在实际应用中,“映射冲突”可以完全忽略。
8.3 CMAC 的输出计算
将记忆空间 A 或 Ap 中的每个单元的内容作为要输出的数据,这些数据也可考虑为一种权值 W。对于输入 S,在与其地址相对应空间 Ap* 或 A* 中有相应的权值。这就形成了相应的输入——输出模式。
上述算法是一种有教师的训练过程,系统的训练与输出都是同时进行的,也就是在 CMAC 模型运行的整个过程中,CMAC 一直处在学习训练的状态下。CMAC 是以系统的输出作为训练指标的。因此,CMAC 是一个实时运行模型。
与其他神经网络一样,CMAC 也可以离线训练,其训练指标是:
8.4 CMAC 控制器模型
CMAC 网络控制器结构如图所示,其输入是来自目标识别器的输出,而控制器的输出是送到目标识别器的教师信号,也就是选择某一个库中的目标物体与识别目标相匹配。
CMAC 网络控制器的工作原理:目标识别器将某一学习周期的学习结果送入 CMAC 训练模块中,训练后的一个结果存贮在 CMAC 的记忆存贮器中。然后,CMAC 函数发生器根据动态数据库的数据从他的记忆模式中产生一个相应的模式作为输出。这个输出分为两路分别输送到目标识别器和 CMAC 训练器中。训练器将比较输入和输出信号的差异,以误差平方和(EMS)作为网络训练的收敛准则。学习训练一直到该误差满足要求。因为这种学习过程是和目标识别器同步进行的,它将逐步逼近其学习识别的目标,因此,算法的收敛性一定会保证。这类算法的主要特征是对每个输入提前给出所希望的输出,学习过程就是改变网络的权值,使系统实际输出与希望输出误差尽可能小。在 CMAC 中引入了最小均方差算法 LMS(Least Mean Square)。
8.4.1 改进的 CMAC 实时动态算法
网络输入为多维矢量 S(常为系统变量),输出为该矢量的大量线性函数表达。网络由一组记忆单元 A 分布存贮与 S 有关的信息,而输入空间 S 中的每一矢量 S(..,Si,...,Sj,...)变成了这些记忆单元的地址变量。换句话说,输入状态空间 S 中的每一点 S(..,Si,...,Sj,...)被映射到 N 维记忆空间 A 中的 |A*| 记忆单元中。A* 的空间大小为 M,即 |A*| = M,M<N。对于 Si 和 Sj,一旦它们在 S 中互相靠近,则它们各自的映射空间 Ai* 和 Aj* 在 A 中相覆盖。这种构造原理使得网络输出 f(S) 体现出系统变量之间的相互作用和联想推理特性。f(S) 是 A 中相应各单元的信息之和。信息的变化根据控制量的输入变化,通过权重 w 的调节来实现。
CMAC 通过改变 A* 中每一单元的权重值而进行训练,即将式(8.6)改写为:
输入空间 S 在实际中都比较大,记忆空间 A 也会非常大,所以必须将 A 映射到一个较小的空间 Ap 中。Hash-Coding 过程不可避免会产生“映射冲突”。该“映射冲突”被视为一个不良作用,一般都尽量通过改变网络参数使它最小。然而,输入空间中向邻近的输入可激发一些相同的神经元,使输入空间中相近的输入矢量可产生相似的输出,以形成 CMAC 的归纳能力。
作为学习控制器,CMAC 的训练是一个误差校正迭代过程。对于方程(8.10)中的权重重修正量 Δwi,可由下式确定: