自组织映射网络(SOM)介绍
1981年芬兰赫尔辛基大学的T.Kohonen教授提出一种自组织特征映射网(self-organizing feature map,简称SOM),又称Kohonen网,Kohonen认为,一个神经网络接受外界输入模式时,将会分为不同的对应区域,各区域对输入模式具有不同的响应特征,而且这个过程是自动完成的。
自组织映射网络(Self-organizing Mapping)是一种常用的聚类方法。使用非监督式学习来产生训练样本的输入空间的一个低维(通常是二维)离散化的表示的人工神经网络(ANN)。
不同于一般神经网络基于损失函数的反向传递来训练,它运用竞争学习(competitive learning)策略,依靠神经元之间互相竞争逐步优化网络。其中输出神经元之间竞争激活,结果是在任意时间只有一个神经元被激活。这个激活的神经元被称为胜者神经元(winner-takes-all neuron)。这种竞争可以通过在神经元之间具有横向抑制连接(负反馈路径)来实现。其结果是神经元被迫对自身进行重新组合。使用近邻关系函数(neighborhood function)来维持输入空间的拓扑结构。
特点归纳:
神经网络,竞争学习策略
无监督学习,不需要额外标签
非常适合高维数据的可视化,能够维持输入空间的拓扑结构
具有很高的泛化能力,甚至能识别之前从没遇过的输入样本
SOM的主要目标是将任意维度的输入信号模式转换为一维或二维离散映射,并以拓扑有序的方式自适应地执行这种变换。拓扑映射中输出层神经元的空间位置对应于输入空间的特定域或特征。
在网络结构上,它一般是由输入层和竞争层构成的两层网络;两层之间各神经元实现双向连接,而且网络没有隐含层。输入层各神经元通过权向量将外界信息汇集到输出层的各神经元。输入层的形式与前馈神经网络相同,节点数与样本维数相等。输出层(竞争层),神经元的排列有多种形式,如一维线阵、二维平面阵和三维栅格阵,常见的是前两种类型。
其中,二维平面有2种平面结构:
Rectangular
Hexagonal
输入层:输入层神经元的数量是由输入向量的维度决定的,一个神经元对应一个特征。假设一个输入样本为X=[x1,x2,x3,…,xn],是一个n维向量,则输入层神经元个数为n个。
竞争层:通常输出层的神经元以矩阵方式排列在二维空间中,每个神经元都有一个权值向量,权值向量维度与输入层样本维度相同。假设输出层有m个神经元,则有m个权值向量。竞争层SOM神经元的数量决定了最终模型的粒度与规模;这对最终模型的准确性与泛化能力影响很大。
竞争学习的步骤是:
(1)向量归一化
(2)寻找获胜神经元
(3)网络输出与权值调整
步骤(3)完成后回到步骤1继续训练,直到学习率衰减到0。学习率处于(0,1],一般随着学习的进展而减小,即调整的程度越来越小,神经元(权重)趋于聚类中心。
SOM网络的运行分训练和工作两个阶段。在训练阶段,网络随机输入训练集中的样本,对某个特定的输入模式,输出层会有某个节点产生最大响应而获胜,而在训练开始阶段,输出层哪个位置的节点将对哪类输入模式产生最大响应是不确定的。当输入模式的类别改变时,二维平面的获胜节点也会改变。获胜节点周围的节点因侧向相互兴奋作用也产生较大影响,于是获胜节点及其优胜邻域内的所有节点所连接的权向量均向输入方向作不同程度的调整,调整力度依邻域内各节点距离获胜节点的远近而逐渐减小。网络通过自组织方式,用大量训练样本调整网络权值,最后使输出层各节点成为对特定模式类敏感的神经元,相应的权向量成为各输入模式的中心向量。并且当两个模式类的特征接近时,代表这两类的节点在位置上也接近。从而在输出层形成能反应样本模式类分布情况的有序特征图。
算法步骤
初始化:初始化竞争层m的数目与m个元素的权值向量
输入比较:样本输入网络,通过比较样本与m个权值向量的相似性,记相似性最大的竞争层节点为获胜者,即计算Xk与全部输出节点间的权值向量W的距离,选择有最小距离的节点Nj*为竞争获胜节点
调整权值:更新获胜者节点的权值
循环迭代:重复2,3
一个自组织映射训练的例子。蓝色斑点是训练数据的分布,而小白色斑点是从该分布中抽取得到的当前训练数据。首先(左图)SOM节点被任意地定位在数据空间中。选择最接近训练数据的节点作为获胜节点(用黄色突出显示)。它被移向训练数据,包括(在较小的范围内)其网格上的相邻节点。经过多次迭代后,网格趋于接近数据分布(右图)。
优点:
对输入模式的自动聚类;
网络结构简单,具有很好的生物神经元作用;
容错性;
具有特征映射的能力;
具有可视化的优点;
网络具有自稳定性;
具有自联想性
缺点:
聚类数目和初始网络结构固定,需要用户预先制定聚类数目和初始的权值矩阵;
可能会出现一些始终不能获胜的”死神经元“,和一些因为经常获胜被过度利用的神经元,不能充分利用所有神经元信息而影响聚类质量;
要想往SOM网络中加入新的类别必须先完整的重新学习之后方可进行;
数据的输入顺序会影响甚至决定了输出的结果,数据量少时尤为明显;
连接权值初始值、计算策略,参数选择不当时会导致网络收敛时间过长,甚至不能收敛。
SOM网络不具有生物神经网络的稳定性,即对新学习模式的记忆将影响网络原有的模式记忆。
github中的实现:
参考资料
https://zh.wikipedia.org/wiki/%E8%87%AA%E7%BB%84%E7%BB%87%E6%98%A0%E5%B0%84
https://zhuanlan.zhihu.com/p/73534694
https://zhuanlan.zhihu.com/p/73930638
https://github.com/KeKe-Li/tutorial
https://www.jiqizhixin.com/graph/technologies/0c42e0db-e4b0-401a-bf1f-fd0d10fc0ff0
https://www.jianshu.com/p/244d6a533c00
https://www.cnblogs.com/surfzjy/p/7944454.html
https://blog.csdn.net/xbinworld/article/details/50818803