第08讲 自组织竞争人工神经网络在实际的神经网络中,比如人的视网膜中,存在着一种“侧抑制”现象,即一个神经细胞兴奋后,通过它的分支会对周围其他神经细胞产生抑制。这种侧抑制使神经细胞之间出现竞争,虽然开始阶段各个神经细胞都处于程度不同的兴奋状态,由于侧抑制的作用,各细胞之间相互竞争的最终结果是:兴奋作用最强的神经细胞所产生的抑制作用战胜了它周围所有其他细胞的抑制作用而“赢”了,其周围的其他神经细胞则全“输”了。
自组织竞争人工神经网络正是基于上述生物结构和现象形成的。它能够对输入模式进行自组织训练和判断,并将其最终分为不同的类型。与BP网络相比,这种自组织自适应的学习能力进一步拓宽了人工神经网络在模式识别、分类方面的应用,另一方面,竞争学习网络的核心——竞争层,又是许多种其他神经网络模型的重要组成部分,例如科荷伦(Kohonen)网络(又称特性图)、反传网络以及自适应共振理论网络等中均包含竞争层。
8.1几种联想学习规则格劳斯贝格(S.Grossberg)提出了两种类型的神经元模型:内星与外星,用以来解释人类及动物的学习现象。一个内星可以被训练来识别一个矢量;而外星可以被训练来产生矢量。
由r个输入构成的格劳斯贝格内星模型如图8.1所示。

图8.1 格劳斯贝格内星模型图由r个输出节点构成的格劳斯贝格外星模型如图8.2所示。
从图8.1和图8.2中可以清楚地看出,内星是通过联接权矢量W接受一组输入信号P;而外星则是通过联接权矢量向外输出一组信号A。它们之所以被称为内星和外星,主要是因为其网络的结构像星形,且内星的信号流向星的内部;而外星的信号流向星的外部。下面分别详细讨论两种神经元模型的学习规则及其功效。

图8.2 格劳斯贝格外星模型图
8.1.1内星学习规则实现内星输入/输出转换的激活函数是硬限制函数。可以通过内星及其学习规则来训练某一神经元节点只响应特定的输入矢量P,它是借助于调节网络权矢量W近似于输入矢量P来实现的。
在图8.1所示的单内星中对权值修正的格劳斯贝格内星学习规则为:
 (8.1)
由(8.1)式可见,内星神经元联接强度的变化Δw1j是与输出成正比的。如果内星输出a被某一外部方式而维护高值时,那么通过不断反复地学习,权值将能够逐渐趋近于输入矢量pj的值,并趋使Δw1j逐渐减少,直至最终达到w1j=pj,从而使内星权矢量学习了输入矢量P,达到了用内星来识别一个矢量的目的。另一方面,如果内星输出保持为低值时,网络权矢量被学习的可能性较小,甚至不能被学习。
现在来考虑当不同的输入矢量p1和p2分别出现在同一内星时的情况。首先,为了训练的需要,必须将每一输入矢量都进行单位归一化处理,即对每一个输入矢量pq(q=1,2),用去乘以每一个输入元素,因此所得的用来进行网络训练的新输入矢量具有单位1的模值。
当第一个矢量p1输入给内星后,网络经过训练,最终达到W=(p1)T。此后,给内星输入另一个输入矢量p2,此时内星的加权输入和为新矢量p2与已学习过矢量p1的点积,即:
 (8.2)
因为输入矢量的模已被单位化为1,所以内星的加权输入和等于输入矢量p1和p2之间夹角的余弦。
根据不同的情况,内星的加权输入和可分为如下几种情况:
1) p2等于p1,即有θ12=0,此时,内星加权输入和为1;
2) p2不等于p1,随着p2向着p1离开方向的移动,内星加权输入和将逐渐减少直到p2与p1垂直,即θ12=90°时,内星加权输入和为0;
3)当p2=-p1,即θ12=180°时,内星加权输入和达到最小值-1。
由此可见,对于一个已训练过的内星网络,当输入端再次出现该学习过的输入矢量时,内星产生1的加权输入和;而与学习过的矢量不相同的输入出现时,所产生的加权输入和总是小于1。如果将内星的加权输入和送入到一个具有略大于-1偏差的二值型激活函数时,对于一个已学习过或接近于已学习过的矢量输入时,同样能够使内星的输出为1,而其他情况下的输出均为0。所以在求内星加权输入和公式中的权值W与输入矢量P的点积,反映了输入矢量与网络权矢量之间的相似度,当相似度接近l时,表明输入矢量P与权矢量相似,并通过进一步学习,能够使权矢量对其输入矢量具有更大的相似度,当多个相似输入矢量输入内星,最终的训练结果是使网络的权矢量趋向于相似输入矢量的平均值。
内星网络中的相似度是由偏差b来控制,由设计者在训练前选定,典型的相似度值为b=-0.95,这意味着输入矢量与权矢量之间的夹角小于18°48’。若选b=-0.9时,则其夹角扩大为25°48’。
一层具有s个神经元的内星,可以用相似的方式进行训练,权值修正公式为:
 (8.3)
MATLAB神经网络工具箱中内星学习规则的执行是用函数learnis.m来完成上述权矢量的修正过程:
dW=1earnis(W,P,A,lr);
W=W十dW;
一层s个内星神经元可以作为一个r到1的解码器。另外,内星通常被嵌在具有外星或其他元件构成的大规模网络中以达到某种特殊的目的。
下面给出有关训练内星网络例子。
[例8.1]设计内星网络进行以下矢量的分类辨识:

与感知器分类功能不同,内星是根据期望输出值,在本例题中是通过迫使网络在第一个输入矢量出现时,输出为1,同时迫使网络在第二个输入矢量出现时,输出为0,而使网络的权矢量逼近期望输出为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;
注意权矢量在此是进行了零初始化,这里的学习速率的选择也具有任意性,当输入矢量较少时,学习速率可以选择较大以加快学习收敛速度。另外,因为所给例题中所给输入矢量已是归一化后的值,所以不用再作处理。下面是设计训练内星网络的程序:
for epoch=1:max-epoch
for q=1:Q
A=T(:,q);
dW=1earnis(W,P(:,q),A,lr);
W=W十dW;
end
end
经过10次循环以及480次计算后,得到的权矢量为:
W=[0.1826 0.3651 0.5477 0.7303]
而当lr=0.3时,其结果为:
W=[0.1805 0.3609 0.5414 0.7219]
由此可见,学习速率较低时,在相同循环次数下,其学习精度较低。但当输入矢量较多时,较大的学习速度可能产生波动,所以要根据具体情况来确定参数值。
在此例题中,因为只有一个输入矢量被置为l,所以实际上,所设置的偏差B=-0.95没有起到作用。内星网络常用在竞争网络以及后面所要介绍的自适应共振理论ART网络中。在那里,其网络的期望输出是通过竞争网络的竞争而得到的。在ART网络中,竞争获胜节点的有效性是通过所给的相似度B值来决定的。
8.1.2外星学习规则外星网络的激活函数是线性函数,它被用来学习回忆一个矢量,其网络输入P也可以是另一个神经元模型的输出。外星被训练来在一层s个线性神经元的输出端产生一个特别的矢量A。所采用的方法与内星识别矢量时的方法极其相似。
对于一个外星,其学习规则为:
 (8.4)
与内星不同,外星联接强度的变化Δw是与输入矢量P成正比的。这意味着当输入矢量被保持高值,比如接近1时,每个权值wij将趋于输出ai值,若pj=1,则外星使权值产生输出矢量。
当输入矢量pj为0时,网络权值得不到任何学习与修正。
当有r个外星相并联,每个外星与s个线性神经元相连组成一层外星时,每当某个外星的输入节点被置为1时,与其相连的权值到矢量wij就会被训练成对应的线性神经元的输出矢量A,其权值修正方式为:
 (8.5)
其中:
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]的反定义。
该网络的每个目标矢量强迫为网络的输出,而输入只有0或1。网络训练的结果是使其权矩阵趋于所对应的输入为1时的目标矢量。
同样网络被零权值初始化:
[R,Q]=size(P);
[S,Q]=size(T);
W=zeros(S,R);
max_epoch=10;
1r=0.3;
下面根据外星学习规则进行训练
for epoch=1:max_epoch
for q=1:Q
A=T(:,q);
dW=learnos(W,P(:,q),A,lr);
W=W十dW;
end
end
一旦训练完成,当外星工作时,对设置于输入为1的矢量,将能够回忆起被记忆在网络中的第一个目标矢量的近似值:
》Ptest=[1];
》A=pureline(W*Ptest)
A=
0.1774
0.3548
0.5322
0.7097
由此可见,此外星已被学习来回忆起了第一个矢量。事实上,它被学习来回亿出在[例8.1]中学习识别出的那个矢量。即上述外星的权值非常接近于[例8.1]中已被识别的矢量。
内星与外星之间的对称性是非常有用的。对一组输入和目标来训练一个内星层与将其输入与目标相对换,来训练一个外星层的结果是相同的,即它们之间的权矩阵的结果是相互转置的。这一事实,被后来应用到了ARTl网络中。
8.1.3科荷伦学习规则科荷伦学习规则是由内星规则发展而来的。对于其值为0或1的内星输出,当只对输出为1的内星权矩阵进行修正,即学习规则只应用于输出为1的内星上,将内星学习规则中的ai取值1,则可导出科荷伦规则为:
 (6.6)
科荷伦学习规则实际上是内星学习规则的一个特例,但它比采用内星规则进行网络设计要节省更多的学习,因而常常用来替代内星学习规则。
在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网络结构竞争网络由单层神经元网络组成,其输入节点与输出节点之间为全互联结。因为网络在学习中的竞争特性也表现在输出层上,所以在竞争网络中把输出层又称为竞争层,而与输入节点相连的权值及其输入合称为输入层。实际上,在竞争网络中,输入层和竞争层的加权输入和共用同一个激活函数,如图8.3所示。
竞争网络的激活函数为二值型{0,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。

图8.3竞争网络结构图下面来具体分析竞争网络的输出情况。
设网络的输入矢量为:P=[ p1 p2 … pr]T;
对应网络的输出矢量为:A=[a1 a2 … as]T。
由于竞争网络中含有两种权值,所以其激活函数的加权输入和也分为两部分:来自输入节点的加权输入和N与来自竞争层内互相抑制的加权输入和G。具体地说,对于第i个神经元有:
1)来自输入节点的加权输入和为:

2)来自竞争层内互相抑制的加权输入和为:

这里D表示竞争层中含有神经元节点的某个区域,如果D表示的是整个竞争层,竞争后只能有一个神经元兴奋而获胜;如果竞争层被分成若干个区域,则竞争后每个区域可产生一个获胜者。
由于gi与网络的输出值ak有关,而输出值又是由网络竞争后的结果所决定的,所以gi的值也是由竞争结果确定的。为了方便起见,下面以D为整个网络输出节点的情况来分析竞争层内互相抑制的加权输入和gi的可能结果。
a)如果在竞争后,第i个节点“赢”了,则有:

而其他所有节点的输出均为零,即:

此时

b)如果在竞争后,第i个节点“输”了,而“赢”的节点为l,则有:

此时

所以对整个网络的加权输入总和有下式成立:
sl=nl+wll 对于“赢”的节点l
si=ni-|wii| 对于所有”输“的节点i=1,2…s,i≠l
由此可以看出,经过竞争后只有获胜的那个节点的加权输入总和为最大。竞争网络的输出为:

因为在权值的修正过程中只修正输入层中的权值wij,竞争层内的权值wik是固定不变的,它们对改善竞争的结果只起到了加强或削弱作用,即对获胜节点增加一个正值,使其更易获胜,对输出的节点增加一个负值,使其更不易获胜,而对改变节点竞争结果起决定性作用的还是输入层的加权和ni,所以在判断竞争网络节点胜负的结果时,可直接采用ni,即:

取偏差B为零是判定竞争网络获胜节点时的典型情况,偶而也采用下式进行竞争结果的判定:

典型的b值取-0.95。加上b值意味着取b=-|wil|这一最坏的情况。
通过上面分析,可以将竞争网络的工作原理总结如下:竞争网络的激活函数使加权输入和为最大的节点赢得输出为1,而其他神经元的输出皆为0。这个竞争过程可用MATLAB描述如下:
n=W*P;
[S,Q]=size(n);
x=n+b*ones(1,Q);
y=max(x);
for q=1:Q
s=find(x(:,q)=y(q));%找出最大加权输入和y(q)所在的行;
a(z(1),q)=1; %令元素a(z,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竞争网络的训练过程弄懂网络的训练过程是为了更好地设计出网络。
因为只有与获胜节点相连的权值才能得到修正,通过其学习法则使修正后的权值更加接近其获胜输入矢量。结果是,获胜的节点对将来再次出现的相似矢量(能被偏差公所包容,或在偏差范围以内的),更加容易赢得该节点的胜利。而对于一个不同的矢量出现时,就更加不易取胜,但可能使其他某个节点获胜,归为另一类矢量群中。随着输入矢量的重复出现而不断地调整与胜者相连的权矢量,以使其更加接近于某一类输入矢量。最终,如果有足够的神经元节点,每一组输入矢量都能使莱一节点的输出为1而聚为该类。通过重复训练,自组织竞争网络将所有输入矢量进行了分类。
所以竞争网络的学习和训练过程,实际上是对输入矢量的划分聚类过程,使得获胜节点与输入矢量之间的权矢量代表获胜输入矢量。
这样,当达到最大循环的值后,网络已重复多次训练了P中的所有矢量,训练结束后,对于用于训练的模式P,其网络输出矢量中,其值为1的代表一种类型,而每类的典型模式值由该输出节点与输入节点相连的权矢量表示。
竞争网络的输入层节点r是由已知输入矢量决定的,但竞争层的神经元数s是由设计者确定的,它们代表输入矢量可能被划为的种类数,其值若被选得过少,则会出现有些输入矢量无法被分类的不良结果,但若被选得太大,竞争后可能有许多节点都被空闲,而且在网络竞争过程中还占用了大量的设计量和时间,在一定程度上造成了一定的浪费,所以一般情况下,可以根据输入矢量的维数及其估计,再适当地增加些数目来确定。
另外还要事先确定的参数有:学习速率和最大循环次数。竞争网络的训练是在达到最大循环次数后停止,这个数一般可取输入矢量数组的15—20倍,即使每组输入矢量能够在网络重复出现15~20次。
竞争网络的权值要进行随机归一化的初始化处理,这个过程在MATLAB中用函数randnr.m实现:
w=randnr(S,R);
然后网络则可以进入竞争以及权值的调整阶段。
网络的训练全过程完全由计算机去做,工具箱中的竞争网络训练函数为trainc.m,调用时所需要的参数为:初始权矩阵W,输入矩阵P和具有三个训练参数的行矢量:显示循环的频率disp_freq,最大的训练次数max_cycle以及学习速率lr,它的用法如下:

竞争网络比较适合用于具有大批相似数组的分类问题。
竞争学习网络的局限性:
竞争网络适用于当具有典型荣类特性的大量数据的辨识,但当遇到大量的具有概率分布的输入矢量时,竞争网络就无能为力了,这时可以采用科荷伦网络来解决。
8.3科荷伦自组织映射网络神经细胞模型中还存在着一种细胞聚类的功能住。它是由多个细胞聚合而成的,在接受外界刺激后,它们会自动形成。一个功能柱中的细胞完成同一种功能。
生物细胞中的这些现象在科荷伦网络模型中有所反映。当外界输入不同的样本到科荷伦自组织映射网络中,一开始时输入样本引起输出兴奋的位置各不相同,但通过网络自组织后会形成一些输出群,它们分别代表了输入样本的分布,反映了输入样本的图形分布特征,所以科荷伦网络常常被称为特性图。
科荷伦网络使输入样本通过竞争学习后,功能相同的输入靠得比较近,不同的分得比较开,以此将一些无规则的输入自动排开,在联接权的调整过程中,使权的分布与输入样本的概率密度分布相似。所以科荷伦网络可以作为一种样本特征检测器,在样本排序、样本分类以及样本检测方面有广泛地应用。
一般可以这样说,科荷伦网络的权矢量收敛到所代表的输入矢量的平均值,它反映了输入数据的统计特性。再扩大一点,如果说一般的竞争学习网络能够训练识别出输入矢量的点特征,那么科荷伦网络能够表现出输入矢量在线上或平面上的分布特征。
当随机样本输入到科荷伦网络时,如果样本足够多,那么在权值分布上可近似于输入随机样本的概率密度分布,在输出神经元上也反映了这种分布,即概率大的样本集中在输出空间的某一个区域,如果输入的样本有几种分布类型,则它们各自会根据其概率分布集中到输出空间的各个不同的区域。每一个区域代表同一类的样本,这个区域可逐步缩少,使区域的划分越来越明显。在这种情况下,不论输入样本是多少维的,都可投影到低维的数据空间的某个区域上。这种形式也称为数据压缩。同时,如果高维空间中比较相近的样本,则在低维空间中的投影也比较相近,这样就可以从中取出样本空间中较多的信息。遗憾的是,网络在高维映射到低维时会出畸变,且压缩比越大,畸变越大;另外网络要求的输入节点数很大,因而科荷伦网络比其他人工神经网络(如网络BP网络)的规模要大。
8.3.1科荷伦网络拓扑结构科荷伦网络结构也是两层:输入层和竞争层。与基本竞争网络不同之处是其竞争层可以由一维或二维网络矩阵方式组成,且权值修正的策略也不同。
1)一维网络结构与基本竞争学习网络相同;
2)二维网络结构,如图8.6所示,网络上层有输出节点s个,按二维形式排成一个节点矩阵,输入节点处于下方,有r个矢量,即r个节点,所有输入节点到所有输出节点之间都有权值连接,而且在二维平面上的输出节点相互间也可能是局部连接的。

图8.6 二维科荷伦网络结构图

图8.7 二维神经元层示意图科荷伦网络的激活函数为二值型函数。一般情况下b值固定,其学习方法与普通的竞争学习算法相同。在竞争层,每个神经元都有自己的邻域,图8.7为一个在二维层中的主神经元。主神经元具有在其周围增加直径的邻域。一个直径为1的邻域包括主神经元及它的直接周围神经元所组成的区域;直径为2的邻域包括直径1的神经元以及它们的邻域。图中主神经元的位置是通过从左上端第一列开始顺序从左到右,从上到下找到的。如图中的10×10神经元层,其主神经元位于46。
特性图的激活函数也是二值型函数,同竞争网络一样可以取偏置b为零或固定为一常数。竞争层的竞争结果,不仅使加权输入和为最大值者获胜而输出为1,同时也使获胜节点周围的邻域也同时输出为1。另外,在权值调整的方式上,特性图网络不仅调整与获胜节点相连的权值,而且对获胜节点邻域节点的权值也进行调整,即使其周围Dk的区域内神经元在不同程度上也得到兴奋,在Dk以外的神经元都被抑制,这个Dk区域可以是以获胜节点为中心的正方形,也可以为六角形,如图8.8所示。对于一维输出,Dk则为以k为中心的下上邻点。

图8.8二维网络邻域形状在MATLAB工具箱中有一个求获胜神经元的邻域的函数;它所需要的参数为:获胜神经元位置i,竞争层的大小和邻域的直径N(如果Np被省去,意味着直径为1),邻域函数返回一个行矢量,包括Np直径邻域中的所有神经元,其中包括主神经元本身在内。
在二维竞争层中,邻域函数为neighb2d.m,竞争层的大小是其宽度x和高度y,层中神经元总数S应当是x与y的乘积。函数neighb2d.m的用法如下:
Np=[x y];
in=neighb2d(i,Np,N);
对于一维竞争层,其中的邻层函数为叫neighb1d.m,确定竞争层大小的参数就是神经元数S,即
Np=[S];
in=neighb1d(i,Np,N);
除了正方形以外,我们可以用函数neighb2d.m产生一个具有任意形状的邻层。此时,对新邻域函数的唯一限制是变量列表必须与上述两个函数相同。不过,邻层函数的行矢量可以包含任何常数。
8.3.2网络的训练过程科荷伦网络在训练开始时和普通的竞争网络一样,其输入节点竞争的胜利者代表某类模式。然后定义获胜节点的邻域节点,即以获胜节点为中心的某一半径内的所有节点,并对与其相似的权矩阵进行调整。随着训练的继续进行,获胜节点k的半径将逐渐变小,直到最后只包含获胜节点k本身。也就是说,在训练的初始阶段,不但对获胜的节点作权值的调整,而且对其周围较大范围内的几何邻接节点也作相应的调整,而随着训练过程的进行,与获胜输出节点相连的权矩阵就越来越接近其所代表的模式类,此时,需要对获胜节点进行较细致的权矩阵调整。同时,只对其几何邻接较接近的节点进行相应的调整.这样,在训练结束后,几何上相近的输出节点所连接的权矢量既有联系(即类似性),又相互有区别,保证了对于菜一类输入模式、获胜节点能作出最大的响应。而相邻节点作出较少响应。几何上相邻的节点代表特征上相似的模式类别。
特性图的初始权值一般被设置得很小,例如初始化一个特性图用R个输入和S个神经元的过程可为:

由上可知,特性图不同于常规竞争学习网络那样修正其权值,除了修正获胜权值外,特性图还修正它的邻域权值。结果是邻域的神经元也逐渐趋于相似的权矢量,并对相似的输入矢量作出响应。
训练设计步骤(适用于输入矢量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,它能执行上述的训练步骤的全过程,仅需要给它输入4个训练参数;显示频率disp_freq,最大训练周期max_cycle,学习速率lr以及最大邻域数max_neighb:

最大邻域数应设置为层的最大直径数减去l。例如,对一维特性图max_neighb应为S-1;对二维特性图,其层神经元宽为X高为Y时,max_neighb应当等于两者中的较大值减去1。不论哪个神经元被选为主神经元,最大邻域数总是包括了层中的所有神经元。
函数trainfm.m的训练开始于学习速度lr和最大邻域max_neighb,然后,其学习速率线性地递减,以致于最后的训练周期里的学习速率为0。邻域数也是线性地减少,但在达到四分之一训练周期后,其值保持为最大值1直到最终训练结束。
这种安排允许输出神经元在初始阶段的活动范围较大,并使其全体都趋于输入矢量出现的区域。然后,随着邻层的减少至1,图形趋于所出现的输入矢量的自身。一旦邻域大小为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.9 对传网络结构图
8.4.2学习法则
1)在科荷伦层,通过竞争对获胜节点采用科荷伦规则调整与其相连的权矢量:

2)在格劳斯贝格层,对与在科荷伦层输出为1的输入相连的权值进行如下的调整:

这又是外星规则的变形。以此来迫使权矢量逼近与输入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码送入格劳斯贝格层,在其输出端对应得到解压缩的矢量。
实际上从格劳斯贝格层输出端得到的仅是同类矢量的平均值,并不是精确的原始矢量,它只反映了输入矢量的统计特性。若采用BP网络则能够得到更精确的信息,所以对于某些要求精确映射的问题,使用CPN不太合适,不过CPN先把输入矢量聚类,然后再用格劳斯贝格层进行监督式训练,这种处理方式在不少场合下是适用的,并且节省了大量的时间,它的最突出的优点是将监督式和无监督式的训练方法有机的结合起来了,从而提高了训练速度。