自组织映射(Self-Organizing Maps, SOM)神经网络是由芬兰Helsink大学的T. Kohonen教授于1980年提出的。因此SOM神经网络也称为Kohonen聚类网络(Kohonen clustering networks, KCN)。
Kohonen的SOM神经网络在对外部信息输入形成拓扑映射结构的过程中,具有和人脑信息映射相类似的两个特点:其一,拓扑映射结构不是通过神经元的移动重新组织实现的,而是由各个神经元在不同兴奋状态下构成一个整体所形成的拓扑结构;其二,这种拓扑映射结构的形成具有自织特点。因此,和反向传播网络(BP网络)等一类有监督学习的方法相比较,SOM神经网络算法更接近于人脑的认知过程。
SOM神经网络是一种前馈式无监督的学习网络,它由两层即输入层和输出层组成。其结构如图1-1所示。
图1-1 SOM神经网络的结构
图中I1、I2为输入层神经元。输入层又称为匹配层,计算输入模式向量与权向量之间的距离,即匹配程度。输入层神经元的个数即为输入数据的维数。K为输出层神经元。输出层又称为竞争层,各神经元以匹配程度为依据进行竞争,确定匹配程度大(距离小)的神经元获胜。输出层的神经元个数即为聚类数。获胜的神经元及其邻域内的神经元权向量朝与模式向量更靠近的方向更新,其它神经元的权值向量保持不变。经过多次反复的这种竞争与更新,最终神经元就会学会模式向量,并以权向量的形式保存下来,从而实现对模式向量的聚类、识别与拓扑不变形映射等。这一过程就是自组织学习(映射)。可见SOM神经网络的学习映射包括两部分:最佳匹配神经元的选择和权向量的更新。
SOM神经网络的学习算法描述如下:
(1)确定聚类类别数,即类别向量的维数,模,及误差阈值,是大于0的小常数。
(2)初始化权向量,学习率,邻域大小,设定最大迭代次数,令迭代计数器。
(3)计算输入模式向量与全部输出神经元权向量的距离。
(4)选择具有最小距离的神经元,若获胜:。
(5)更新获胜神经元及其邻域内神经元权向量:。
(6)更新的学习率及邻域大小。
(7)计算。
(8)若则停止,否则转至(3)进行下一次迭代。
使用SOM神经网络进行图像分割首先要做的就是构建SOM网络。之前已经提到过输入层神经元个数代表了输入数据的维数。由于本程序要做的是对彩色图像进行分割,彩色图像实际上是一序列像素值的集合,因此网络的输入就是各个像素的值。而由于彩色图像每个像素的值包含R、G、B三个分量,即输入数据的维数为3,因此我们设定输入层有三个神经元节点。对于输出层,由于其神经元个数代表了聚类数,而针对不同的图像、不同的分类要求聚类数必然不同,所以在本程序中提供了由用户输入聚类数从而设定输出层神经元个数的功能,由此大大地增强了程序的通用性和灵活性。
在网络的神经元节点确定之后,SOM神经网络的结构便也随之建立起来了。接下来要做的便是初始化网络的权值向量。权值向量的初始化可采用赋随机值的方法。由于输入是R、G、B分量的值,而对每个分量其值介于0到255之间(包括0和255),因此我们将权值也赋为0到255之间的随机数。
使用SOM神经网络进行图像分割首先要做的就是构建SOM网络。之前已经提到过输入层神经元个数代表了输入数据的维数。由于本程序要做的是对彩色图像进行分割,彩色图像实际上是一序列像素值的集合,因此网络的输入就是各个像素的值。而由于彩色图像每个像素的值包含R、G、B三个分量,即输入数据的维数为3,因此我们设定输入层有三个神经元节点。对于输出层,由于其神经元个数代表了聚类数,而针对不同的图像、不同的分类要求聚类数必然不同,所以在本程序中提供了由用户输入聚类数从而设定输出层神经元个数的功能,由此大大地增强了程序的通用性和灵活性。
在网络的神经元节点确定之后,SOM神经网络的结构便也随之建立起来了。接下来要做的便是初始化网络的权值向量。权值向量的初始化可采用赋随机值的方法。由于输入是R、G、B分量的值,而对每个分量其值介于0到255之间(包括0和255),因此我们将权值也赋为0到255之间的随机数。
在SOM神经网络构建完成之后,便要使用样本数据对网络进行训练。对网络进行训练的过程即SOM神经网络自组织学习(映射)的过程。
按照SOM神经网络学习算法的描述,在对神经网络进行训练之前需要先设定如下几个参数:最大迭代次数MaxIterations,学习率a,误差阈值threshold,以及邻域大小Nc。本例中,笔者设定了最大迭代次数MaxIterations=5000。学习率a= 1 / (t + 1.1),其中t为迭代计数器,初始值为0。误差阈值threshold=0.00001。邻域大小Nc=0,即仅对获胜神经元自身更新其权值。
除了确定网络的相关参数之外,还需要选择合适的训练样本。训练样本可以是待分割图像的一个子集。对于这种训练样本,其必须涵盖待分割图像的所有主要类别的色彩信息,以保证在分割图像时不会漏掉重要的类别信息,而导致错误分类。选择待分割图像的子集作为训练样本可以减少训练网络的时间开销。而对于尺寸不是很大(像素个数较少)的待分割图像,也可以直接采用待分割的图像作为训练样本来训练神经网络。
在上述因素都确定之后,便可开始网络的训练过程。按照SOM神经网络学习算法的描述,训练过程主要完成三件事:一、计算输入模式向量与全部输出神经元权向量的距离;二、选择具有最小距离的神经元作为获胜神经元;三、更新获胜神经元及其邻域范围内神经元的权值向量(由于本程序中将邻域大小设为了0,因此仅对获胜神经元本身作权向量的更新)。其中在计算距离时,采用了欧氏距离计算公式,即。公式中n为向量的维数。
当网络使用某一训练样本数据训练完成之后,神经网络便学会了相应的模式,并以权值向量的形式保存了下来。这时,便可以使用该神经网络作为分类器对具有相似模式的数据进行分类。分类的过程与网络训练的过程相似,依然是计算输出,寻找获胜神经元节点,只是这时不再对权向量进行更新,仅仅找到获胜的神经元即完成任务。由于本程序的分类目标是对彩色图像进行分割,所以为了给出直观的分割效果显示,我们还需根据输入像素分类结果的不同而为其赋特定的色彩值以显示分割后的图像。
SOM神经网络由于其启发式学习机制而存在以下几个明显缺陷:
(1)网络的学习过程不是对某一目标函数的优化过程,而是一个启发式强制收敛过程。因此,它只能保证在足够多的迭代次数后权值修正很小,而不能保证权值最优。
(2)网络权值的最终结果依赖于样本的输入顺序。
(3)不同的初始条件常常导致不同的结果,处理不同的数据集合,需要采用不同的网络学习参数(如学习率、修正邻域大小等)。
转载于:https://www.cnblogs.com/statestreet/archive/2012/04/01/2429180.html
相关资源:神经网络的43个源程序及数据