我已经看了很多关于SOM的理论例子,但有一件事对我来说并不是很清楚:节点的位置是否取决于它们的权重?例如,具有较大权重的节点是否位于地图的一侧,而权重较小的节点将远离地图?
答案 0 :(得分:7)
没有。在SOM(又名Kohonen Map)中,权重函数应用于数据而不是“神经元”。
在地图构造(训练)期间使用权重,即,在每次迭代时计算并且针对每次迭代内的每个网格单元计算权重。换句话说,对于包含地图构造的每次迭代,权重函数用于缩放这些点在确定单元格位置/位置时的贡献。
Kohonen地图中数据点的位置由最接近该数据点的地图中的网格单元确定 - 即,建立Kohonen地图涉及迭代重新分配您的每个点数据设置为最靠近它的晶格中的单元格。
这是一种思考方式:Kohonen Map只是将数据映射到一些固定拓扑或格子,在2维,例如规则网格。
训练阶段(构建地图)中的每次迭代都涉及将每个数据点(如果需要)重新分配给最靠近它的晶格中的最近单元。接下来,基于(i)从先前迭代分配给该单元的数据点来调整单元位置。 (ii)相邻单元格中的数据点。
(i)和(ii)中的数据点的值如何对单元位置的新值有贡献由每个数据点的权重确定,而权重又由权重函数确定。这与直觉一致 - 与靠近细胞的数据点相比,细胞对细胞的新值的影响应该更小。在Kohonen Map中,权重函数强制执行此约束。教科书权重函数是高斯函数。在Python中:
def gaussian(dist, t, alpha=1.0, sigma=1.0) :
from math, import e
return alpha * t * e**(-dist/(2*sigma*t))**2
在此功能中, dist 是数据点与单元格中心的距离, t 是时间(例如,地图构建期间的每次迭代都是时钟的一个滴答)。
想象一下高斯曲线,从中心向下切成两半; x轴是dist,y轴表示重量 - 随着距离的增加,重量减小。同样,随着t增加,重量也增加。这是构建Kohonen Map的关键因素:随着迭代次数的增加(在地图构建期间),相邻点对给定单元的重新定位的影响越来越小。因此,时间 - 权重关系的重要性在于,单元格位置的变化率随着时间的推移而减小(位置随着每次迭代而变化较小),直到最终在下一次迭代中位置没有变化,这是a的收敛标准。 Kohonen地图。
数据点的重量与此有什么关系?那么,先前迭代中该格子单元的位置由该单元中的数据点和相邻单元中的数据点确定,这些点对新单元位置的贡献是根据加权函数确定的。
最后,数据点的权重实际上并不是该数据点的固有属性。一方面,它仅在地图构建期间有用,而另一方面,数据点实际上没有权重值 - 而是在地图构建期间的每次迭代中,分配给给定单元格的数据点和相邻单元格中的那些点是用于计算给定晶格单元的新位置。该计算通过为每个数据点分配权重来考虑每个点与小区中心的距离 - 因此,该权重值仅对该迭代和该小区中心有意义,例如,在计算下一个小区中心时,相同的数据点将具有不同的权重,因为它与该单元中心的距离不同。