本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
SOM神经网络是用于聚类的一种神经网络
本文讲解SOM神经网络是如何训练的
通过本文,可以掌握SOM神经网络的训练细节及其训练原理
本节描述SOM神经网络的训练究竟是训练什么,需要哪些步骤
训练目标
SOM神经网络的数学表达式如下
从SOM神经网络数学表达式可知,
训练一个SOM神经网络,就是确定其W
实则就是每个聚类中心点的位置
训练所需设置及主要流程
训练所需设置
对于训练一个SOM神经网络
必须先设定两样东西,
👉 1. 隐节点个数 :也就是聚类中心点的个数
👉 2. 隐节点拓扑结构 :用于训练时进行邻域更新
然后根据隐节点个数初始化W并对其进行训练
训练的主要步骤
训练的主要步骤为
1、初始化W
2、计算距离矩阵
根据隐节点拓扑结构计算节点之间的距离矩阵
3、训练W
由于SOM需要更新邻近节点,所以依赖上面的距离矩阵
4、输出训练好的W
下文围绕上述步骤,展开细说各部分的细节
本节讲解W是如何初始化的,和距离矩阵怎么计算
如何初始化W
初始化输入层到输出层的权重矩阵w
也就是初始化聚类中心点的位置
不妨把所有聚类点初始化到样本数据的中心
即有
为w的第i行,即第i个聚类点的位置
如何计算聚类点之间的距离矩阵
共分为两步,
👉1. 生成目标拓扑结构
👉2. 生成拓扑点之间的距离矩阵
例子说明
以生成一个3x5的六边形拓扑结构为例
先生成3x5的六边形拓扑结构(包括拓扑点的位置和连线)
再生成拓扑点间的距离矩阵,如下
拓扑点与聚类中心点是一一对应的,
因此,拓扑点之间的距离矩阵,就是聚类中心点的距离矩阵
✍️关于距离矩阵计算的编程实现
上述计算在编程上如果要自行实现,逻辑会有些复杂较绕
但matlab自带函数可以轻易实现
在matlab中可以使用hextop生成六边形拓扑结构,
并由linkdist函数得到距离矩阵,如下
pos = hextop([3,5]);
d = linkdist(pos);
单样本训练主流程
w的训练采用单样本训练,
即训练n次,每次把样本逐个依次训练w
单样本训练流程
每次单样本训练流程如下:
(1) 计算本次竞争胜出神经元
即网络的输出(竞争胜出的输出神经元)的编号k
本质就是样本所属的聚类点
(2) 对胜出神经元进行kohonen更新
对聚类点k的位置作如下更新:
(3) 对胜出神经元的邻域聚类点进行弱更新
对聚类点k的邻域聚类点()的位置作如下更新:
式中的学习率 lr 和邻域的范围dn采用收缩算法确定
学习率与邻域范围的收缩
SOM的学习率更新方法
学习率lr采用收缩算法,随迭代次数递减
学习率的更新公式如下:
其中, 是待设参数
该式的意思是
在0-T步,先以线性收缩方式从收缩到,
之后以负一次幂的速度收缩
邻域范围的更新方式
邻域范围也采用收缩算法,随迭代次数从最大距离递减到1
邻域范围的更新公式如下:
其中,为聚类点间的最大距离
该式的意思是,
在0-T步,d以线性收缩方式 从收缩到1,之后保持为1
即刚开始时,所有聚类点都会被更新,到最后只更新相邻的聚类点
End