![da00fceb8845d016572876e9f6be0175.png](https://i-blog.csdnimg.cn/blog_migrate/9e97270a7ab3336f78c526e598d8bfef.jpeg)
SOM介绍
自组织映射(Self-organizing map, SOM)通过学习输入空间中的数据,生成一个低维、离散的映射(Map),从某种程度上也可看成一种降维算法。
SOM是一种无监督的人工神经网络。不同于一般神经网络基于损失函数的反向传递来训练,它运用竞争学习(competitive learning)策略,依靠神经元之间互相竞争逐步优化网络。且使用近邻关系函数(neighborhood function)来维持输入空间的拓扑结构。
维持输入空间的拓扑结构:意味着 二维映射包含了数据点之间的相对距离。输入空间中相邻的样本会被映射到相邻的输出神经元。
由于基于无监督学习,这意味着训练阶段不需要人工介入(即不需要样本标签),我们可以在不知道类别的情况下,对数据进行聚类;可以识别针对某问题具有内在关联的特征。
特点归纳:
- 神经网络,竞争学习策略
- 无监督学习,不需要额外标签
- 非常适合高维数据的可视化,能够维持输入空间的拓扑结构
- 具有很高的泛化能力,它甚至能识别之前从没遇过的输入样本
网上有很多开源的实现,这里列了一份我在github上搜集的清单:
![e6916838e3560bad087a906c735c8c38.png](https://i-blog.csdnimg.cn/blog_migrate/d638979424152ece0c219a17633f1cc2.jpeg)
为了避免空谈理论导致晦涩难懂,我们以miniSom库的部分实现为例,辅助理解训练过程中的一些公式。
JustGlowing/minisomgithub.com![08f997a6c78120ec09cde3f672de2cf2.png](https://i-blog.csdnimg.cn/blog_migrate/aafd0f7e96124ab9ba4b024f4c049e5a.png)
网络结构结构
SOM的网络结构有2层:输入层、输出层(也叫竞争层)
![6f4d871353b112d9297dca8396a0f91e.png](https://i-blog.csdnimg.cn/blog_migrate/956cfb980a484a2897672ded16bd7d21.jpeg)
输入层神经元的数量是由输入向量的维度决定的,一个神经元对应一个特征
SOM网络结构的区别主要在竞争层:可以有1维、2维(最常见的)
竞争层也可以有更高的维度。不过出于可视化的目的,高维竞争层用的比较少
其中,二维平面有2种平面结构:
- Rectangular
- Hexagonal
![b137722ab4a28a54f52ec6a00fedad2d.png](https://i-blog.csdnimg.cn/blog_migrate/f137e593ce3de43a3e5c07e6d0e19cd4.jpeg)
竞争层SOM神经元的数量决定了最终模型的粒度与规模;这对最终模型的准确性与泛化能力影响很大。
一条经验公式:
竞争层最少节点数量 =
N:训练样本的个数
如果是正方形输出层,边长等于 竞争层节点数再开一次根号,并向上取整就行
训练计算过程
第一步:与其他神经网络相同,需要将Weighs初始化为很小的随机数
第二步:随机取一个 输入样本Xi
第三步:
- 遍历竞争层中每一个节点:计算Xi与节点之间的相似度(通常使用欧式距离)
- 选取距离最小的节点作为优胜节点(winner node),有的时也叫BMU(best matchin