其它神经网络

【原理】SOM神经网络-训练原理

作者 : 老饼 发表日期 : 2023-03-01 02:39:56 更新日期 : 2023-03-17 21:49:43
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



SOM神经网络是用于聚类的一种神经网络

本文讲解SOM神经网络是如何训练的

通过本文,可以掌握SOM神经网络的训练细节及其训练原理





  01.  SOM神经网络-训练概览  



本节描述SOM神经网络的训练究竟是训练什么,需要哪些步骤



     训练目标    


 SOM神经网络的数学表达式如下
 
从SOM神经网络数学表达式可知,
训练一个SOM神经网络,就是确定其W
 实则就是每个聚类中心点的位置  




     训练所需设置及主要流程     


训练所需设置
对于训练一个SOM神经网络
必须先设定两样东西,
    👉 1. 隐节点个数       :也就是聚类中心点的个数  
   👉 2. 隐节点拓扑结构 :用于训练时进行邻域更新 
 然后根据隐节点个数初始化W并对其进行训练
 
 训练的主要步骤
训练的主要步骤为
 1、初始化W                                                                        
2、计算距离矩阵                                                                

 根据隐节点拓扑结构计算节点之间的距离矩阵        
 3、训练W                                                                           
 由于SOM需要更新邻近节点,所以依赖上面的距离矩阵
 4、输出训练好的W                                                             
 下文围绕上述步骤,展开细说各部分的细节 






  02. W的初始化与距离矩阵的预计算  



本节讲解W是如何初始化的,和距离矩阵怎么计算



     如何初始化W     


初始化输入层到输出层的权重矩阵w
也就是初始化聚类中心点的位置
不妨把所有聚类点初始化到样本数据的中心
 即有
    
 为w的第i行,即第i个聚类点的位置




     如何计算聚类点之间的距离矩阵     


共分为两步,
👉1. 生成目标拓扑结构              
👉2. 生成拓扑点之间的距离矩阵
  例子说明
 
以生成一个3x5的六边形拓扑结构为例
先生成3x5的六边形拓扑结构(包括拓扑点的位置和连线)
再生成拓扑点间的距离矩阵,如下
  
拓扑点与聚类中心点是一一对应的,
因此,拓扑点之间的距离矩阵,就是聚类中心点的距离矩阵
✍️关于距离矩阵计算的编程实现
 上述计算在编程上如果要自行实现,逻辑会有些复杂较绕
但matlab自带函数可以轻易实现
在matlab中可以使用hextop生成六边形拓扑结构,
并由linkdist函数得到距离矩阵,如下

      pos = hextop([3,5]);         
     d     = linkdist(pos);          







     03.  W的训练     




  单样本训练主流程  


w的训练采用单样本训练,
即训练n次,每次把样本逐个依次训练w 
单样本训练流程
每次单样本训练流程如下:
(1) 计算本次竞争胜出神经元                                                      
 即网络的输出(竞争胜出的输出神经元)的编号k         
 
 本质就是样本所属的聚类点                               
(2) 对胜出神经元进行kohonen更新                                           
 对聚类点k的位置作如下更新:                       
                         
(3) 对胜出神经元的邻域聚类点进行弱更新                                 
 
 对聚类点k的邻域聚类点()的位置作如下更新: 
  
  
式中的学习率 lr 和邻域的范围dn采用收缩算法确定




      学习率与邻域范围的收缩      


SOM的学习率更新方法
 
学习率lr采用收缩算法,随迭代次数递减
学习率的更新公式如下:
 
 
 其中, 是待设参数
 
该式的意思是
在0-T步,先以线性收缩方式从收缩到
之后以负一次幂的速度收缩
 
  邻域范围的更新方式
 
邻域范围也采用收缩算法,随迭代次数从最大距离递减到1
邻域范围的更新公式如下:
 
 
 其中,为聚类点间的最大距离
 
该式的意思是,
在0-T步,d以线性收缩方式 从收缩到1,之后保持为1
即刚开始时,所有聚类点都会被更新,到最后只更新相邻的聚类点









 End 







联系老饼