第 08讲 自组织竞争人工神经网络
zoujiang@public.wh.hb.cn
邹江在实际的神经网络中,比如人的视网膜中,存在着一种“侧抑制”现象,即一个神经细胞兴奋后,通过它的分支会对周围其他神经细胞产生抑制。
自组织竞争人工神经网络正是基于上述生物结构和现象形成的。它能够对输入模式进行自组织训练和判断,并将其最终分为不同的类型。
与 BP网络相比,这种自组织自适应的学习能力进一步拓宽了人工神经网络在模式识别、分类方面的应用,另一方面,竞争学习网络的核心 —
— 竞争层,又是许多种其他神经网络模型的重要组成部分。
8,1几种联想学习规则格劳斯贝格 (S,Grossberg)提出了两种类型的神经元模型:内星与外星,用以来解释人类及动物的学习现象。
内星可以被训练来识别矢量;
外星可以被训练来产生矢量。
图 8.1 格劳斯贝格内星模型图内星是通过联接权矢量 W接受一组输入信号 P
图 8,2 格劳斯贝格外星模型图外星则是通过联接权矢量向外输出一组信号 A。
它们之所以被称为内星和外星,主要是因为其网络的结构像星形,且内星的信号流向星的内部;而外星的信号流向星的外部。
8,1,1内星学习规则实现内星输入/输出转换的激活函数是硬限制函数。
可以通过内星及其学习规则来训练某一神经元节点只响应特定的输入矢量 P,它是借助于调节网络权矢量 W近似于输入矢量 P来实现的。
单内星中对权值修正的格劳斯贝格内星学习规则为:
(8,1)
由 (8,1)式可见,内星神经元联接强度的变化 Δw1j是与输出成正比的。如果内星输出 a被某一外部方式而维护高值时,那么通过不断反复地学习,权值将能够逐渐趋近于输入矢量 pj的值,并趋使 Δw1j逐渐减少,直至最终达到 w1j= pj,从而使内星权矢量学习了输入矢量 P,达到了用内星来识别一个矢量的目的。另一方面,如果内星输出保持为低值时,网络权矢量被学习的可能性较小,
甚至不能被学习。
现在来考虑当不同的输入矢量 p1和 p2分别出现在同一内星时的情况。
首先,为了训练的需要,必须将每一输入矢量都进行单位归一化处理。
当第一个矢量 p1输入给内星后,网络经过训练,最终达到
W= (p1)T。 此后,给内星输入另一个输入矢量 p2,此时内星的加权输入和为新矢量 p2与已学习过矢量 p1的点积,
即:
因为输入矢量的模已被单位化为 1,所以内星的加权输入和等于输入矢量 p1和 p2之间夹角的余弦。
根据不同的情况,内星的加权输入和可分为如下几种情况:
1) p2等于 p1,即有 θ12= 0,此时,内星加权输入和为 1;
2) p2不等于 p1,内星加权输入和为 0;
3)当 p2= -p1,即 θ12= 180° 时,内星加权输入和达到最小值 -1。
由此可见,对于一个已训练过的内星网络,当输入端再次出现该学习过的输入矢量时,内星产生 1的加权输入和;而与学习过的矢量不相同的输入出现时,所产生的加权输入和总是小于 1。
当多个相似输入矢量输入内星,最终的训练结果是使网络的权矢量趋向于相似输入矢量的平均值。
内星网络中的相似度是由偏差 b来控制,由设计者在训练前选定,典型的相似度值为 b= -0.95,
这意味着输入矢量与权矢量之间的夹角小于
18° 48’。若选 b= -0.9时,则其夹角扩大为
25° 48’。
一层具有 s个神经元的内星,可以用相似的方式进行训练,权值修正公式为:
MATLAB神经网络工具箱中内星学习规则的执行是用函数 learnis.m来完成上述权矢量的修正过程:
dW= 1earnis(W,P,A,lr);
W=W十 dW;
[例 8.1] 设计内星网络进行以下矢量的分类辨识:
我们首先对网络进行初始化处理:
[R,Q]= size(P);
[S,Q]= size(T);
W= zeros(S,R);
B= -0.95* ones(S,1);
max-epoch= 10;
lr= 0.7;
so81.m
8,1,2外星学习规则外星网络的激活函数是线性函数,它被用来学习回忆一个矢量,其网络输入 P也可以是另一个神经元模型的输出。
外星被训练来在一层 s个线性神经元的输出端产生一个特别的矢量 A。
对于一个外星,其学习规则为:
与内星不同,外星联接强度的变化 Δw是与输入矢量 P成正比的。这意味着当输入矢量被保持高值,比如接近 1
时,每个权值 wij将趋于输出 ai值,若 pj= 1,则外星使权值产生输出矢量。
当输入矢量 pj为 0时,网络权值得不到任何学习与修正。
当有 r个外星相并联,每个外星与 s个线性神经元相连组成一层外星时,其权值修正方式为:
其中:
W= s× r权值列矢量;
lr= 学习速率;
A= s× q外星输出;
P= r× q外星输入。
MATLAB工具箱中实现外星学习与设计的函数为
learnos.m,其调用过程如下:
dW= learnos(W,A,P,lr);
W= W十 dW;
[例 8,2]下面有两元素的输入矢量以及与它们相关的四元素目标矢量,试设计一个外星网络实现有效的矢量的获得,外星没有偏差。
P= [1 0];
T= [0.1826 0.6325;
0.3651 0.3162;
0.5477 0.3162;
0.7303 0.6325];
8,1,3科荷伦学习规则科荷伦学习规则是由内星规则发展而来的。
科荷伦规则为:
科荷伦学习规则实际上是内星学习规则的一个特例,但它比采用内星规则进行网络设计要节省更多的学习,因而常常用来替代内星学习规则。
在 MATLAB工具箱中,在调用科荷伦学习规则函数
learnk.m时,一般通过先寻找输出为 1的行矢量 i,然后仅对与 i相连的权矩阵进行修正。使用方法如下:
i= find(A==1);
dW= learnk(W,P,i,1r);
W= W十 dW;
一般情况下科荷伦学习规则比内星学习规则能够提高训练速度 1到 2个数量级。
8,2自组织竞争网络
8,2,1网络结构竞争网络由单层神经元网络组成,其输入节点与输出节点之间为全互联结。
因为网络在学习中的竞争特性也表现在输出层上,所以在竞争网络中把输出层又称为竞争层,而与输入节点相连的权值及其输入合称为输入层。
从网络的结构图中可以看出,自组织竞争网络的权值有两类:
一类是输入节点 j到 i的权值 wij(i= 1,2…,s; j= 1,
2…,r),这些权值是通过训练可以被调整的;
另一类是竞争层中互相抑制的权值 wik(k= 1,2…,
s)。 这类权值是固定不变的,且它满足一定的分布关系。
它们是一种对称权值,即有 wik= wki,同时相同神经元之间的权值起加强的作用,即满足 w11=
w11= … = wkk> 0,而不同神经元之间的权值相互抑制,对于 k≠i有 wij< 0。
设网络的输入矢量为,P= [p1 p2 … pr]T;
对应网络的输出矢量为,A= [a1 a2 … as]T。
由于竞争网络中含有两种权值,所以其激活函数的加权输入和也分为两部分:来自输入节点的加权输入和 N与来自竞争层内互相抑制的加权输入和 G。 对于第 i个神经元有:
1)来自输入节点的加权输入和为:
2)来自竞争层内互相抑制的加权输入和为:
a)如果在竞争后,第 i个节点“赢”了,则有:
而其他所有节点的输出均为零,即:
此时
b)如果在竞争后,第 i个节点“输”了,而“赢”的节点为 l,则有:
此时所以对整个网络的加权输入总和有下式成立:
sl=nl+wll 对于,赢,的节点 l
si=ni-|wii| 对于所有,输,的节点 i= 1,2… s,i≠l
由此可以看出,经过竞争后只有获胜的那个节点的加权输入总和为最大 。 竞争网络的输出为:
在判断竞争网络节点胜负的结果时,可直接采用 ni,即:
取偏差 B为零是判定竞争网络获胜节点时的典型情况,偶而也采用下式进行竞争结果的判定:
通过上面分析,可以将竞争网络的工作原理总结如下:竞争网络的激活函数使加权输入和为最大的节点赢得输出为 1,而其他神经元的输出皆为 0。
这个竞争过程可用 MATLAB描述如下:
n= W*P;
[S,Q]= size(n);
x= n+b*ones(1,Q);
y= max(x);
for q= 1,Q
% 找出最大加权输入和 y(q)所在的行;
s= find(x(:,q)= y(q));
% 令元素 a(z,q)= 1,其他值为零;
a(z(1),q)= 1;
end
这个竞争过程的程序已被包含在竞争激活函数
compet.m之中,
A= compet(W*P,B);
8,2,2竞争学习规则竞争网络在经过竞争而求得获胜节点后,则对与获胜节点相连的权值进行调整,调整权值的目的是为了使权值与其输入矢量之间的差别越来越小,从而使训练后的竞争网络的权值能够代表对应输入矢量的特征,
把相似的输入矢量分成了同一类,并由输出来指示所代表的类别。
竞争网络修正权值的公式为:
式中 lr为学习速率,且 0< lr< 1,一般的取值范围为
0.01-0.3; pj为经过归一化处理后的输入。
用 MATLAB工具箱来实现上述公式的过程可以用内星学习规则:
A= compet(W*P);
dW= learnis(P,A,lr,W);
W= W十 dW;
更省时地是采用科荷伦学习规则如下:
A= compet(W*P);
i= find(A==1);
dW= learnis(P,i,lr,W);
W= W十 dW;
不论采用哪种学习方法,层中每个最接近输入矢量的神经元,通过每次权值调整而使权值矢量逐渐趋于这些输入矢量。从而竞争网络通过学习而识别了在网络输入端所出现的矢量,并将其分为某一类。
8,2,3竞争网络的训练过程竞争网络的学习和训练过程,实际上是对输入矢量的划分聚类过程,使得获胜节点与输入矢量之间的权矢量代表获胜输入矢量。
这样,当达到最大循环的值后,网络已重复多次训练了 P中的所有矢量,训练结束后,对于用于训练的模式 P,其网络输出矢量中,其值为 1的代表一种类型,
而每类的典型模式值由该输出节点与输入节点相连的权矢量表示。
竞争网络的输入层节点 r是由已知输入矢量决定的,但竞争层的神经元数 s是由设计者确定的,一般情况下,
可以根据输入矢量的维数及其估计,再适当地增加些数目来确定。
另外还要事先确定的参数有:学习速率和最大循环次数。竞争网络的训练是在达到最大循环次数后停止,
这个数一般可取输入矢量数组的 15— 20倍,即使每组输入矢量能够在网络重复出现 15~20次。
竞争网络的权值要进行随机归一化的初始化处理,这个过程在 MATLAB中用函数 randnr.m实现:
w= randnr(S,R);
然后网络则可以进入竞争以及权值的调整阶段。
网络的训练全过程完全由计算机去做,工具箱中的竞争网络训练函数为 trainc.m,它的用法如下:
竞争网络比较适合用于具有大批相似数组的分类问题。
竞争学习网络的局限性:
竞争网络适用于当具有典型聚类特性的大量数据的辨识,但当遇到大量的具有概率分布的输入矢量时,竞争网络就无能为力了,这时可以采用科荷伦网络来解决。
8,3科荷伦自组织映射网络神经细胞模型中还存在着一种细胞聚类的功能柱。
它是由多个细胞聚合而成的,在接受外界刺激后,它们会自动形成。一个功能柱中的细胞完成同一种功能。
当外界输入不同的样本到科荷伦自组织映射网络中,一开始时输入样本引起输出兴奋的位置各不相同,但通过网络自组织后会形成一些输出群,它们分别代表了输入样本的分布,反映了输入样本的图形分布特征,所以科荷伦网络常常被称为特性图。
科荷伦网络使输入样本通过竞争学习后,功能相同的输入靠得比较近,不同的分得比较开,以此将一些无规则的输入自动排开,在联接权的调整过程中,使权的分布与输入样本的概率密度分布相似。所以科荷伦网络可以作为一种样本特征检测器,在样本排序、样本分类以及样本检测方面有广泛地应用。
一般可以这样说,科荷伦网络的权矢量收敛到所代表的输入矢量的平均值,它反映了输入数据的统计特性。
当随机样本输入到科荷伦网络时,如果样本足够多,那么在权值分布上可近似于输入随机样本的概率密度分布,在输出神经元上也反映了这种分布,即概率大的样本集中在输出空间的某一个区域或各个不同的区域。
8,3,1科荷伦网络拓扑结构科荷伦网络结构也是两层:输入层和竞争层。与基本竞争网络不同之处是其竞争层可以由一维或二维网络矩阵方式组成,且权值修正的策略也不同。
1)一维网络结构与基本竞争学习网络相同;
2)二维网络结构:
图 8.6 二维科荷伦网络结构图图 8.7 二维神经元层示意图科荷伦网络的激活函数为二值型函数。一般情况下 b值固定,其学习方法与普通的竞争学习算法相同。在竞争层,每个神经元都有自己的邻域。一个直径为 1的邻域包括主神经元及它的直接周围神经元所组成的区域;
直径为 2的邻域包括直径 1的神经元以及它们的邻域。
图 8,8二维网络邻域形状在 MATLAB工具箱中有一个求获胜神经元的邻域的函数:
在二维竞争层中,邻域函数为 neighb2d.m。
函数 neighb2d.m的用法如下:
Np=[x y];
in= neighb2d(i,Np,N);
对于一维竞争层,其中的邻层函数为叫 neighb1d.m,
确定竞争层大小的参数就是神经元数 S,即
Np=[S];
in= neighb1d(i,Np,N);
8,3,2网络的训练过程训练设计步骤 (适用于输入矢量 P具有某种概率分布的数组 ):
(1)初始化
1) 由输入矢量确定网络结构,[R,Q]= size(P);
2) 设置网络竞争层神经元节点:一维 S或二维的宽 X和高
Y,S= X*Y;
3) 将输入模式 P作归一化处理,P= normc(P);
4) 归一随机化处理初始权值,W= rands(S,R)*0.1; 并设置:
5) 最大循环次数 (此数根据输入数据的数目而乘一个倍数所得 ),max_cycle
6) 基本学习速率 lr,一般取 0.01~0.3,视具体情况而定;
7)最大邻层数 max_neighb:
一维 max_neighb= S-1;
二维 max_neighb= max([X Y])-1;
(2)循环训练
for cycle=1:max_cycle
1)学习速率是线性下降的:
x= cycle/max_cycle;
LR= (1— x)*lr;
这 使 得 学 习 速 率 随 着 循 环 次 数 的 增 加,从
lr*(max_cycle-1)/max_cycle逐渐降至 0;
2)邻层数也是递减的:
n=max([ceil(max_neighb*(1-x*4)) 1]);
3)计算输入矢量加权和,并通过竞争求出获胜节点
A= compet(W*P);
4)根据获胜节点求出相邻层 (以二维为例 ),并进行权值修正:
i=find(A== 1);
in=neighb2d(i,[X,Y],n);
dW= learn(W,P,in,LR)
W= W+dw;
(3)输出或显示结果。
MATLAB工具箱中用于训练设计科荷伦网络权矢量的函数为 trainfm.m,它能执行上述的训练步骤的全过程。
最大邻域数应设置为层的最大直径数减去 l。 例如,对一维特性图 max_neighb应为 S-1; 对二维特性图,其层神经元宽为 X高为 Y时,max_neighb应当等于两者中的较大值减去 1。
函数 trainfm.m的训练开始于学习速度 lr和最大邻域
max_neighb,然后,其学习速率线性地递减,以致于最后的训练周期里的学习速率为 0。邻域数也是线性地减少,但在达到四分之一训练周期后,其值保持为最大值
1直到最终训练结束。
给定一个特性图的权矩阵 W,它的邻域函数 F(作为一个字符串 ),以及竞争层大小 Np,可以用函数 plotmap.m画出特性图。
8,4对传网络对传网络 (Counter Propagation Network,简称 CPN)是美国学者 Hechi-Nielson在 1987年首次提出的。
从结构上看,CPN是一种层次结构的网络,实际上,CPN
是把两种著名的网络算法:科荷伦自组织映射理论与格劳斯贝格外星算法组合起来而形成的网络。
8,4,1网络结构
CPN网络为两层结构:第一层为科荷伦层,采用无指导的训练方法对输入数据进行自组织竞争的分类或压缩,
第二层称为格劳斯贝格层 。
第一层的激活函数为二值型硬函数,而第二层为线性激活函数 。
1)对于科荷伦层的输出有:
2)对于格劳斯贝格层,具有目标矢量 G,此时,从前层输出的 K为它的输入,输出为:
CPN的网络结构如图 8.9所示:
8,4,2学习法则
1)在科荷伦层,通过竞争对获胜节点采用科荷伦规则调整与其相连的权矢量:
2)在格劳斯贝格层,对与在科荷伦层输出为 1的输入相连的权值进行如下的调整:
8,4,3训练过程
1)初始化:
归一化处理输入,目标矢量 P和 G;
对权矢量 W1和 W2进行归一化随机取值;
选取最大循环次数,学习速率 lr1和 lr2。
2)科荷伦层的无指导训练过程:
重复对输入的样本进行竞争计算,对获胜的科荷伦层获胜节点按科荷伦法对与其连接的权矢量进行修正;
3)格劳斯贝格层有指导的训练过程:
寻找层输入为 1的节点,并对与该节点相连的权矢量进行修正;
4)检查最大循环的数是否达到,是,则停止训练,否,则转入 2)。
经过充分训练后的 CPN可使其科荷伦层的权矢量收敛到相似输入矢量的平均值,而使格劳斯贝格层权向量收敛到目标矢量的平均值。
当 CPN训练后工作时,只要对网络输入一矢量 X,则在科荷伦层经过竞争后产生获胜节点,并在格劳斯贝格层使获胜节点所产生的信息向前传送,在输出端得到输出矢量 Y,这种由矢量 X得到矢量 Y的过程有时也称为异联想,更广泛地说,它实现了一种计算过程。
当训练 CPN使其格劳斯贝格层的目标矢量 G等于科荷伦层的输入矢量 P时,则可实现数据压缩。具体做法是:首先是训练 CPN使其 G=P,然后,将输入数据输入 CPN,
在科荷伦层输出得到 0,1数据,这些数据为输入的压缩码。解码时,将在科荷伦层压缩的 0,1码送入格劳斯贝格层,在其输出端对应得到解压缩的矢量。