本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com
整体流程如下:
1、生成拓扑结构,并由拓扑结构算得矩阵距离
2、初始化聚类点中心
3、训练m次:
-----用收缩法计算本次邻域范围dn
-----抽取部分样本,计算每个输出节点权重的kohonen加权更新量
-----对w进行更新
4、输出训练好的w(聚类中心点的位置)
共分为两步,
(1) 生成目标拓扑结构
(2) 生成拓扑点之间的距离矩阵
例 子
以生成一个3x5的六边形拓扑结构为例,
先生成3x5的六边形拓扑结构(包括拓扑点的位置和连线),
再生成拓扑点间的距离矩阵。
在matlab中可以使用hextop生成六边形拓扑结构,并由linkdist函数得到距离矩阵,如下
pos = hextop([3,5]);
d = linkdist(pos);
拓扑点与聚类中心点是一一对应的,因此,拓扑点之间的距离矩阵,就是聚类中心点的距离矩阵。
使用PCA方法对聚类中心点,即权重w进行初始化。
主要思路为:
(1) 找出样本点X的主成份方向。
(2) 将拓扑点按主成份方向展开后的位置作为w的初始位置。
PASS:本部分笔者光从代码也没解读得很清楚,自行看代码推算。
批量样本加权更新方法
1、单个样本对单个节点的更新量
按kohonen规则,第i个样本对第j个输出节点的权重更新量为:
其中,
如果输出节点j是样本xi的竞争胜出节点,则
如果输出节点j是样本xi的竞争胜出节点的邻域节点,则
2、多个样本的对单个节点的加权更新量
根据单样本更新公式,
可知
n个样本对第j个输出节点的权重更新量的加权和为:
其中,
如果用LR j表示各个样本对第j个输出节点权重的加权学习率向量,即
则对第j个输出节点的权重更新量可以简记为:
3、多个样本对所有节点的加权更新量
对所有节点即有,
其中LR为加权学习率矩阵
补充说明:
(1) 注意的是,如果j节点的lrs为0,即没有任何样本对j节点权重进行更新,那么
(2) 由于使用的是加权和,分子分母可以约去lr ,所以实际不必设置lr.
批量更新完整流程
1、 随机选择样本
随机选择大部分样本(只适当屏蔽掉一小部分样本)进行训练,假设本次选择的样本为n个。
2、计算本轮领域范围
邻域范围采用收缩算法,随迭代次数从d0线性递减到1,第t次迭代时,dn如下:
其中,d0为待定参数
该式的意思是,在0-T步,dn以线性收缩方式 从d0收缩到1,之后保持为1.
即刚开始时,d0距离以内的都会被更新,到最后只更新相邻的聚类点。
3、计算加权学习率矩阵LR
(1) 初始化LR为m*n的全0矩阵,m为隐节点个数,n为本次训练样本个数。
(2) 如果第i个节点是第j个样本的最近节点,则
如果是第j个样本的最近节点的领域节点,则
(3)将每个节点的LR进行归一化,即对LR的每一行进行归一化
4、计算权重w的更新量
5、屏蔽不需要更新的节点
对于本轮不需要更新的节点在中对应的值置0.
(不需要更新的节点,即为0对应的节点)。
6、 更新权重矩阵
End