本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
本文讲解SOM神经网络批量训练的算法流程
本算法来源于matlab2014b ,使用的是单样本训练方法(matlab中的learnsomb文件)
通过本流程可以了解matlab的SOM神经网络的算法流程
本节展示SOM神经网络的批量样本训练算法流程
输入说明
X :用于聚类的样本
dim:SOM隐节点拓扑结构的维度
相关训练参数
:初始邻域距离
:收缩步数阈值
SOM神经网络-训练算法流程(批量训练)
SOM神经网络的训练算法流程如下
一、初始化
1、初始化W
将W的每一行都初始化为样本中心,如下
2、计算距离矩阵D
根据参数dim生成拓扑结构,并由拓扑结构算得矩阵距离D
具体细节见下文的细节讲解
3、初始化训练次数t
二、循环训练N次
1. 随机选择n个样本进行训练
2. 更新学习率和领域范围
3. 计算本次竞争胜出的神经元及其邻域神经元的编号
假设本次竞争胜出的神经元编号为k
满足下式的就是邻域神经元的编号
4. 计算加权学习率矩阵LR
(1) 初始化LR为全0矩阵
LR为m*n矩阵,m为隐节点个数,n为本次训练样本个数
(2) 确定LR的学习率
如果第i个节点是第j个样本的胜出节点,则
如果第i个节点是第j个样本的邻域节点,则
(3) 将每个节点的LR进行归一化
即对LR的每一行进行归一化
5. 计算权重W的更新量
(1) 按公式计算W的更新量
(2) 特殊处理
对于本轮不需要更新的节点在中对应的值置0
不需要更新的节点,即为0对应的节点
6. 更新权重矩阵
7. 更新迭代步数 t
三、输出
输出训练好的网络权重
👉W:网络输入层到隐层的权重(即各个聚类点的位置)
补充:关于距离矩阵D的计算逻辑
共分为两步,
(1) 生成目标拓扑结构
(2) 生成拓扑点之间的距离矩阵
例子说明
以生成一个3x5的六边形拓扑结构为例
先生成3x5的六边形拓扑结构(包括拓扑点的位置和连线),
再生成拓扑点间的距离矩阵
在matlab中可以使用hextop生成六边形拓扑结构,并由linkdist函数得到距离矩阵,如下
pos = hextop([3,5]);
d = linkdist(pos);
End