竞争网络-算法原理与自实现
SOM神经网络
SOM-批量训练算法
作者 : 老饼 日期 : 2022-06-09 04:42:13 更新 : 2022-06-29 01:26:14
本站原创文章,转载请说明来自《老饼讲解-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:本部分笔者光从代码也没解读得很清楚,自行看代码推算。






四、w的批量样本训练


  批量样本加权更新方法  



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  







联系老饼