自组织特征映射(SOFM)学习根据输入向量在输入空间中的分组方式对输入向量进行分类。与竞争层不同的是,自组织映射中的相邻神经元学习识别输入空间的相邻部分。因此,自组织映射学习分布(就像竞争层一样)和拓扑训练它们的输入向量。
SOFM层中的神经元按照拓扑函数排列在物理位置上。这个函数gridtop
,hextop
,或randtop
可以将神经元排列成网格、六边形或随机拓扑。神经元之间的距离用距离函数从它们的位置计算。有四个距离函数,经销
,boxdist
,linkdist
,mandist
.链接距离是最常见的。这些拓扑结构和距离函数在拓扑(gridtop, hextop, randtop)和距离函数(dist, linkdist, mandist, boxdist).
本文采用自组织特征映射网络识别获胜神经元我*使用与竞争层相同的程序。然而,不是只更新获胜的神经元,而是更新某一区域内的所有神经元N我*(d),使用Kohonen规则更新获胜神经元。具体来说,就是所有这些神经元我∊N我*(d)调整如下:
或
在这里,社区N我*(d)包含了半径内所有神经元的指数d获胜神经元我*.
因此,当一个向量p给出了获胜神经元的权值和它的近邻也向它靠拢p.因此,经过多次演示,邻近的神经元已经学习到彼此相似的向量。
另一个版本的SOFM培训,叫做批处理算法,在任何权值更新之前,将整个数据集呈现给网络。然后算法确定每个输入向量的获胜神经元。然后每个权值向量移动到它是赢家的所有输入向量的平均位置,或者它在赢家的附近。
为了说明社区的概念,请看下图。左边的图显示了半径的二维邻域d= 1周围神经元13。右边的图显示了半径的邻域d= 2。
这些社区可以写成N13(1) ={8,12,13,14,18}和
N13(2) ={3、7、8、9、11、12、13、14、15、17、18、19日,23日}。
SOFM中的神经元不必按二维模式排列。您可以使用一维排列,或三维或更多的维度。对于一维SOFM,一个神经元在半径为1的范围内只有两个邻居(如果神经元在线的末端,则只有一个邻居)。你也可以用不同的方式来定义距离,例如,使用神经元和邻域的矩形和六边形排列。网络的性能对邻域的精确形状并不敏感。
gridtop
,hextop
,randtop
)您可以使用这些函数为原始神经元位置指定不同的拓扑gridtop
,hextop
,randtop
.
的gridtop
拓扑学从类似于上图的矩形网格中的神经元开始。例如,假设你想要一个由6个神经元组成的2 × 3数组。你可以用
Pos = gridtop([2,3]) Pos = 0 1 0 1 0 0 1 1 2 2 2
这里神经元1的位置是(0,0),神经元2的位置是(1,0),神经元3的位置是(0,1),等等。
注意,你要的是gridtop
如果把尺寸反过来,你会得到一个稍微不同的排列:
Pos = gridtop([3,2]) Pos = 0 1 2 0 0 1 1 1 1
你可以在一个gridtop
拓扑与以下代码:
Pos = gridtop([8 10]);plotsom (pos)
如图所示gridtop
拓扑确实位于网格上。
的hextop
功能产生了一组类似的神经元,但它们是六边形的。一个2乘3的模式hextop
神经元的产生方式如下:
Pos = hextop([2,3]) Pos = 0 1.0000 0.5000 1.5000 0 1.0000 00 0.8660 0.8660 1.7321 1.7321
请注意,hextop
SOM网络的默认模式是用selforgmap
.
你可以创造并绘制一组8 × 10的神经元hextop
拓扑与以下代码:
Pos = hextop([8 10]);plotsom (pos)
注意神经元六边形排列的位置。
最后,randtop
功能产生n维随机模式的神经元。下面的代码产生了一个随机的神经元模式。
Pos = randtop([2,3]) Pos = 0 0.7620 0.6268 1.4218 0.0663 0.7862 0.0925 0 0.4984 0.6007 1.1222 1.4228
你可以创造并绘制一组8 × 10的神经元randtop
拓扑与以下代码:
Pos = randtop([8 10]);plotsom (pos)
例如,请参阅这些拓扑函数的帮助。
经销
,linkdist
,mandist
,boxdist
)在这个工具箱中,有四种计算方法从一个特定的神经元到它的邻居的距离。每种计算方法都有一个特殊的函数实现。
的经销
函数计算到a的欧几里得距离首页神经元到其他神经元。假设你有三个神经元:
Pos2 = [0 1 2;0 1 2 = 0 1 2 2
你求出每个神经元之间的距离
D2 = ref (pos2, 1) = 1
因此,神经元1到自身的距离为0,神经元1到神经元2的距离为1.4142,以此类推。
下图显示了一个二维的家庭神经元(gridtop
)神经元层。的家神经元周围有直径不断增大的邻域。直径为1的邻域包括主神经元及其近邻。直径2的邻域包括直径1的神经元及其近邻。
至于经销
函数时,s神经元层映射的所有邻域用年代——- - - - - -年代矩阵的距离。上面所示的特殊距离(1在邻近区域,2在邻近区域,等等)是由这个函数生成的boxdist
.假设你有6个神经元gridtop
配置。
Pos = gridtop([2,3]) Pos = 0 1 0 1 0 0 1 1 2 2 2
D = boxdist(pos) D = 0 1 1 1 2 2 1 0 1 1 2 2 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 0
神经元1到神经元2,3,4的距离仅为1,因为它们在邻近区域。神经元1到5和6的距离都是2。3和4到所有其他神经元的距离都是1。
的链接距离从一个神经元到另一个神经元所需要的连接或步骤的数量。因此,如果你计算与同一组神经元的距离linkdist
,你会得到
Dlink = 0 1 1 2 2 3 1 0 2 1 3 2 1 2 0 1 1 2 2 1 1 0 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 3 1 2 2 1 1 1 0
D =总和(abs (x - y))
因此,如果你有
W1 = [1 2;3 4;5 . 1 = 1 2 3 4 5
和
[1;1] = 1
然后是距离
Z1 = mandist(W1,P1)
计算的距离mandist
确实要遵循上面给出的数学表达式。
这个SOFM的架构如下所示。
这个架构就像一个竞争网络,除了这里没有使用偏见。竞争传递函数的输出元素为1一个1我对应于我*,获胜神经元。所有其他输出元素一个1都是0。
然而,如上所述,靠近获胜神经元的神经元会随着获胜神经元一起更新。你可以从不同的神经元拓扑中选择。类似地,您可以从各种距离表达式中选择,以计算获胜神经元附近的神经元。
selforgmap
)您可以使用该功能创建新的SOM网络selforgmap
.这个函数定义了两个学习阶段使用的变量:
这些值用于训练和适应。
考虑下面的例子。
假设你想要创建一个有两个元素的输入向量的网络,你想要在一个2 × 3的六边形网络中有6个神经元。获取此网络的代码为:
Net = selforgmap([2 3]);
设训练的向量为:
P =[。1.3.1.2 1.1 1.8 1.7 .1 .3 1.2 1.1 1.8 1.7;...0.2 0.1 0.3 0.3 0.3 0.2 1.8 1.8 1.9 1.9 1.7 1.8];
你可以配置网络来输入数据并绘制所有这些:
网=配置(净,P);plotsompos(净,P)
绿点是训练向量。的初始化selforgmap
将初始权值分散到输入空间。注意,它们最初与训练向量有一定的距离。
在模拟网络时,计算每个神经元的权值向量与输入向量之间的负距离(negdist
)以获得加权输入。加权输入也是净输入(netsum
).净投入竞争(专业
),因此只有净输入为正的神经元才输出1。
learnsomb
)默认学习批处理模式下出现自组织特征映射(trainbu
).自组织映射的权值学习函数为learnsomb
.
首先,网络识别每个输入向量的获胜神经元。然后每个权值向量移动到它是赢家的所有输入向量的平均位置或它在赢家附近的位置。在训练过程中,定义邻域大小的距离经过两个阶段而改变。
这个阶段持续给定的步骤数。邻域距离从给定的初始距离开始,减小到调谐邻域距离(1.0)。随着邻域距离在这一阶段的减小,网络的神经元通常会在其物理排序的相同拓扑结构的输入空间中对自己进行排序。
这个阶段持续到训练或适应的剩余阶段。邻域大小减小到1以下,所以只有获胜的神经元对每个样本进行学习。
现在来看看这些网络中常用的一些特定值。
学习是根据learnsomb
学习参数,此处显示其默认值。
学习参数 |
默认值 |
目的 |
---|---|---|
|
|
初始邻域大小 |
|
|
排序阶段步骤 |
附近的大小NS
通过两个阶段进行更改:排序阶段和调优阶段。
排序阶段持续的步骤为LP.steps
.在此阶段,算法进行调整ND
从最初的邻域大小LP.init_neighborhood
到1。在这个阶段,神经元权重在输入空间中与相关神经元位置保持一致。
在调优阶段,ND
小于1。在此阶段,权重将相对均匀地分布在输入空间中,同时保持其在排序阶段发现的拓扑顺序。
因此,神经元的权值向量一开始都向输入空间中出现输入向量的区域迈进了一大步。然后,当邻域大小减小到1时,映射倾向于根据输入向量对自己进行拓扑排序。一旦邻域大小为1,网络应该是相当有序的。继续训练,以便给神经元时间均匀地分布在输入向量上。
与竞争层一样,如果输入向量以偶概率出现在输入空间的某一段,自组织映射的神经元将按照它们之间近似相等的距离排列自己。如果输入向量以不同的频率出现在整个输入空间,特征映射层倾向于将神经元分配到与输入向量频率成比例的区域。
因此,特征图在学习对其输入进行分类的同时,也学习了其输入的拓扑结构和分布。
你可以用1000个时代来训练网络
net.trainParam.epochs = 1000;网=火车(净,P);plotsompos(净,P)
你可以看到神经元已经开始向不同的训练组移动。额外的训练需要让神经元更接近不同的组。
如前所述,自组织映射与传统竞争学习的不同之处在于,哪些神经元更新了它们的权值。特征图不再只更新赢家,而是更新赢家及其邻居的权值。结果表明,相邻神经元往往具有相似的权值向量,并对相似的输入向量做出响应。
下面简要介绍两个例子。您也可以尝试类似的示例一维自组织映射和二维自组织映射.
考虑100个二元单元输入向量均匀分布在0°和90°之间。
角= 0:0.5 *π/ 99:0.5 *π;
这是数据图。
P =[罪(角度);因为(角度)];
自组织映射定义为一个包含10个神经元的一维层。这个地图将在上面所示的输入向量上进行训练。最初这些神经元位于图的中心。
当然,因为所有的权向量都是从输入向量空间的中间开始的,你现在看到的只是一个圆。
当训练开始时,权值向量一起向输入向量移动。它们也会随着邻域大小的减小而有序。最后,该层调整其权值,使每个神经元对输入空间中被输入向量占据的区域作出强烈响应。相邻神经元权值向量的布置也反映了输入向量的拓扑结构。
注意,自组织映射是用随机顺序的输入向量训练的,因此从相同的初始向量开始并不能保证相同的训练结果。
这个例子展示了如何训练一个二维的自组织映射。
首先,使用以下代码创建一些随机输入数据:
P =兰德(1000);
这是1000个输入向量的图。
一个由30个神经元组成的5乘6的二维映射被用来对这些输入向量进行分类。二维地图由5个神经元乘以6个神经元组成,距离根据曼哈顿距离邻域函数计算mandist
.
然后,地图被训练为5000个演示周期,每20个周期显示一次。
这是40个周期后的自组织地图。
权值向量,用圆圈表示,几乎是随机放置的。然而,即使在仅仅40个呈现周期后,相邻的神经元,由线连接,权值向量紧密相连。
这是120个周期后的地图。
经过120个循环后,地图开始按照输入空间的拓扑结构进行自我组织,这就约束了输入向量。
下面的图,经过500个循环后,显示了在输入空间中更均匀分布的地图。
最后,在5000个循环之后,映射相当均匀地分布在输入空间中。此外,神经元的间距非常均匀,反映了该问题中输入向量的均匀分布。
这样,一个二维自组织映射就学会了它的输入空间的拓扑结构。
值得注意的是,尽管自组织映射不需要花费很长时间来组织自己以使邻近的神经元识别相似的输入,但它可能需要很长时间来根据输入向量的分布来最终安排自己。
的批处理训练算法通常比增量训练算法快得多,是SOFM训练的默认算法。你可以用下面的命令在一个简单的数据集上试验这个算法:
X = simplecluster_dataset net = selforgmap([6 6]);网=火车(净,x);
这个命令序列创建并训练一个由36个神经元组成的6乘6的二维图。在训练过程中,出现如下图。
您可以从该窗口访问一些有用的可视化信息。如果您点击SOM的仓位,如图所示,其中显示了数据点的位置和权重向量。从图中可以看出,批处理算法仅经过200次迭代,映射就很好地分布在输入空间中。
当输入空间是高维的时候,你不能同时看到所有的权值。在本例中,单击SOM邻居的距离.下图表示相邻神经元之间的距离。
此图使用了以下颜色编码:
蓝色的六边形代表神经元。
红线连接邻近的神经元。
包含红线的区域的颜色表示神经元之间的距离。
颜色越深表示距离越大。
较浅的颜色代表较小的距离。
左上方区域出现了一组明亮的部分,被一些较暗的部分所包围。这种分组表示网络已将数据聚集成两组。这两组可以在之前的体重位图中看到。图的右下区域包含一小组紧密聚集的数据点。在这个区域中,相应的权值越靠越近,这可以通过邻居距离图中较浅的颜色来表示。当这个小区域的权重连接到大区域时,距离就会更大,正如邻居距离图中的深色带所示。邻居距离图的右下方区域的分段比左上方的分段颜色深。这种颜色差异表明该区域的数据点相距较远。这个距离在重量位置图中得到了确认。
另一个有用的数字可以告诉你每个神经元有多少数据点。点击SOM样打看下图。最好是数据在神经元中均匀分布。在这个例子中,数据更多地集中在左上方的神经元中,但总体上分布相当均匀。
您还可以使用重量平面图形来形象化重量本身。点击SOM飞机重量在训练窗口中获取下一个图形。输入向量的每个元素都有一个权平面(在本例中为2)。它们是连接每个输入到每个神经元的权重的可视化。(浅色和深色分别代表较大和较小的重量。)如果两个输入的连接模式非常相似,那么可以假设输入是高度相关的。在这种情况下,输入1的连接与输入2的连接非常不同。
您还可以从命令行生成前面的所有数字。试试这些绘图命令:plotsomhits
,plotsomnc
,plotsomnd
,plotsomplanes
,plotsompos
,plotsomtop
.