som网络结构
对SOM进行理解,首先要明确它的定位。
首先它是神经网络的一种,那么就有属于神经网络共同的性质。比如输入层,输出层。刚好,SOM网络只有这两层。
(上面两张是典型的som网络结构图)
输入层不必讲,从
x
1
x_1
x1到
x
n
x_n
xn,都是一个个输入样本节点,每个样本会有好几个特征值维度。
输出层的节点个数是自己设置的,排列方式也是自己设定,输出层的节点与节点之间通常也会有连接。
输出层和输入层是以全连接的方式进行连接的,相互连接的桥梁就是一组组权重矩阵。
w
i
w_i
wi表示第i个输出节点与所有输入数据相连的权值。
w
i
j
w_{ij}
wij表示的是第i个节点与第j个输入样本之间的权重。
到这里有看出图二有什么问题吗?
没错,
w
i
w_i
wi那个向量应该一共是n列,和输入数据的个数n一致。
这些就是som网络结构的基本特点。
som网络的作用
那这个结构有什么用呢?
som是一种无监督的人工神经网络。无监督说白了就是不需要你告诉这个网络哪次输出结果是对的、哪次是错的,它会自动地对输入数据进行某种特征的识别和分类。由于输入数据一般是高维的,输出数据一遍是低维的,因此它可以将高维数据在低维空间进行特征表示。
som网络训练过程
(在写这一块的时候,我突然问自己,神经网络是什么?提出来干啥用的?为什么要对输入数据进行训练???
按照我目前的知识水平所做的理解,神经网络是一种网络结构,正如化学里面相同原子以不同结构进行组合会形成截然不同的物质,不同的网络结构最终实现的功能也不一样,神经网络就是对一堆数据加工的东西,不同结构加工的方式不同,出来的效果也不一样。至于为什么要对输入数据进行训练,是因为神经网络基本单位——神经元,本质上就是一组参数,需要对这些参数进行优化才能得到你想要的效果。)
训练就是优化网络参数的过程,那如何优化呢?优化步骤呢?
1 随机初始化参数。
2 选取一个输入样本
x
i
x_i
xi,遍历输出层的每一个节点,以某种计算规则计算
x
i
x_i
xi与每个节点之间的值,并选出优胜节点。(也就是你觉得和输入样本最契合的那个节点)(*a常用规则后面详细写)
4 更新最优节点领域内的节点。(*b更新方式后面详细写)
5 迭代次数加一,重复2-4直到完成设定的迭代次数。
*a 一般有最大输出规则、最小欧式距离规则、最小夹角规则。
(比如,以最小欧式距离为规则时,计算每个输出节点与输入样本之间的距离,并取最小距离值对应的节点为优胜节点)
*b 更新涉及到每个节点前一刻值与迭代后的值之间的关系,还涉及到优胜邻域内的每个点更新幅度的问题。
以最小欧氏距离规则下的更新为例:
j
∗
j_*
j∗表示优胜节点。j表示优胜领域内的点。t表示第t次迭代。
w
i
j
∗
w_{ij*}
wij∗(t+1)=
w
i
j
∗
w_{ij*}
wij∗(t)+η(t)·(
x
i
x_{i}
xi-
w
i
j
∗
w_{ij*}
wij∗(t))
w
i
j
w_{ij}
wij(t+1)=
w
i
j
w_{ij}
wij(t)+η(t)·(
x
i
x_{i}
xi-
w
i
j
∗
w_{ij*}
wij∗(t))·w(r)
η(t)表示学习率,一般是会随迭代次数而变化的。η(t)=η(0)·(1-t/T),T为设定的迭代次数。
w(r)为领域节点调整函数,用来决定优胜节点对领域内其他点的影响。