老饼讲解-神经网络 机器学习 神经网络 深度学习
SOM神经网络

【原理】SOM神经网络-算法原理(批量训练)

作者 : 老饼 发表日期 : 2022-06-09 04:42:13 更新日期 : 2023-03-17 17:41:28
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



本文讲解SOM神经网络批量训练的算法原理

通过本文,可以掌握SOM神经网络的批量样本训练的原理

本文仅作理论基础,具体的流程细节和代码请直接参考以下文章

《SOM神经网络-详细算法流程(批量训练)》 

《SOM神经网络-代码重写(批量训练)》    




  01. SOM神经网络批量训练算法简介 



本节先简单介绍SOM神经网络批量算法的整体流程和学习内容概览



     SOM神经网络-批量训练算法简介    


在matlab的新版本(2009b以上)中,
som神经网络训练时使用的函数是learnsomb(批量训练算法)
它每次用多个样本同时更新SOM神经网络的权重
 整体流程如下:
1、初始化聚类点中心(使用PCA方法)                                
2、生成拓扑结构,并由拓扑结构算得矩阵距离                 
3、训练m次:                                                                   
        (1)用收缩法计算本次邻域范围d                      
             (2)抽取部分样本,计算每个输出节点权重的kohonen加权更新量 
               (3)对w进行更新                                            

4、输出训练好的w(聚类中心点的位置)                       
 
 它相对learnsom主要有以下两点差异
1. 初始化时使用PCA方法进行初始化
2. 训练时使用批量样本训练             
下面我们仍然按顺序对每部分进行讲解







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



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



     PCA初始化SOM权重    


PCA方法初始化SOM的权重W(即聚类中心点)的主要思路如下:
(1) 找出样本点X的主成份方向                                             
(2) 将拓扑点按主成份方向展开后的位置作为w的初始位置    
 PASS:本部分笔者光从代码也没解读得很清楚,自行看代码推算





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


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

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







    03. W的批量样本训练   



本节讲解SOM神经网络批量训练时W的更新方法



  批量样本加权更新公式  


批量样本加权更新是指用多个样本一次性批量更新W
 更新公式如下
 
其中
 
 其中LR为加权学习率矩阵 
LR的计算方式如下
 
(1) 初始化LR为全0矩阵                                                               
 LR为m*n矩阵,m为隐节点个数,n为本次训练样本个数      
(2) 确定LR的学习率                                                                    
 如果第i个节点是第j个样本的胜出节点,则   
如果第i个节点是第j个样本的邻域节点,则

(3) 将每个节点的LR进行归一化                                                   
 即对LR的每一行进行归一化      
       
      ✍️补充:关于领域范围
 上述所说的领域范围与单样本更新时一致,
仍然采用收缩算法,随迭代次数从最大距离递减到1

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




  批量样本加权更新公式推导  


单个样本对单个节点的更新量
 按kohonen规则,
第i个样本对第j个隐节点权重的更新量为

   
 
 
其中,
如果隐节点是样本的竞争胜出节点,则                            
如果隐节点是样本的竞争胜出节点的邻域节点,则 
 
 
多个样本的对单个节点的加权更新量
 
根据单样本更新公式可知
n个样本对第个输出节点的权重更新量的加权和为:
  
 
其中,
如果用表示各个样本对第个隐节点权重的加权学习率向量


则对第个隐节点的权重更新量可以简记为以下矩阵形式:


多个样本对所有节点的加权更新量
对所有节点即有

 
 其中LR为加权学习率矩阵 
✍️补充说明:两点需要注意的地方 
 1.如果j节点的lrs为0,即没有任何样本对j节点权重进行更新,那么
2.由于使用的是加权和,分子分母可以约去lr ,所以实际不必设置lr         










  End  








联系老饼