竞争网络-算法原理与自实现
SOM神经网络
SOM-单样本训练算法
作者 : 老饼 日期 : 2022-06-09 04:41:52 更新 : 2022-06-29 01:25:51
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com



本算法来源于旧版matlab2009b ,使用的是单样本训练方法(matlab中的learnsom文件),

该算法相对简单、原汁原叶、易理解,是理解批量更新算法的基础。



  相关文章  


基础原理参见文章《SOM基本原理》
代码实现参见《SOM-代码重写(单样本训练)》




  01.  主流程  


整体流程如下:


1、生成拓扑结构,并由拓扑结构算得矩阵距离                  
2、初始化聚类点中心                                                       
3、单样本训练w,训练n次:                                              
-----用收缩法计算本次学习率lr                                       
-----用收缩法计算本次邻域范围dn                                  
-----计算本次竞争胜出神经元编号及邻域神经元              
-----使用kohonen规则对竞争胜出神经元的权重wk更新  
-----使用kohonen规则对邻域神经元的权重进行弱更新   
4、输出训练好的w(聚类中心点的位置)                      






  02.  初始化聚类点的距离矩阵  


共分为两步,

(1) 生成目标拓扑结构              

(2) 生成拓扑点之间的距离矩阵


  例 子  


以生成一个3x5的六边形拓扑结构为例,
先生成3x5的六边形拓扑结构(包括拓扑点的位置和连线),
再生成拓扑点间的距离矩阵。


在matlab中可以使用hextop生成六边形拓扑结构,并由linkdist函数得到距离矩阵,如下
pos = hextop([3,5]);
d   = linkdist(pos);

拓扑点与聚类中心点是一一对应的,因此,拓扑点之间的距离矩阵,就是聚类中心点的距离矩阵。






  03.  初始化聚类中心点的位置  


初始化聚类中心点的位置,也就是初始化输入层到输出层的权重矩阵w.


不妨把所有聚类点初始化到样本数据的中心点,
即对所有的(w的第i行,即第i个聚类点的位置)都有:

   
  




  04.  w的单样本训练  


w的训练采用单样本训练,即训练n次,每次把样本逐个依次训练w.

每次单样本训练流程如下:


  单样本训练主流程  



(1) 计算本次竞争胜出神经元

先算出样本所属的聚类点k, 即网络的输出(竞争胜出的输出神经元)的编号。

(2) 对胜出神经元进行kohonen更新

对聚类点k的位置作如下更新:

(3) 对胜出神经元的邻域聚类点进行弱更新

对聚类点k的邻域聚类点(   )的位置作如下更新:
 

式中的学习率 lr 和邻域的范围dn采用收缩算法确定。



  学习率与邻域范围的收缩  

(1) 学习率


学习率lr采用收缩算法,随迭代次数递减:

其中, lr0 ,lr1 ,T 是待设参数。
该式的意思是,在0-T步,lr先以线性收缩方式从lr0收缩到lr1, 之后以负一次幂的速度收缩。


(2) 邻域范围


邻域范围也采用收缩算法,随迭代次数从最大距离递减到1

其中,dmax为聚类点间的最大距离。
该式的意思是,在0-T步,dn以线性收缩方式 从dmax收缩到1,之后保持为1.即刚开始时,所有聚类点都会被更新,到最后只更新相邻的聚类点。







 End 









联系小饼