自组织映射网络SOMnet
自组织映射网络SOM
自组织特征映射神经网络(self organizing feature map)是一种无监督的学习算法,SOM的主要目的是将任意维度的输入信号通过计算映射转变为一维或者二维的离散映射,并且以自适应的方式实现这个过程.
自组织网络的输出层神经元之 间是互为竞争的关系,竞争成为被激活的神经元.在每一个时刻只有一个输出神经元被激活,被激活的神经元被称为获胜神经元(winning neuron).在输出层神经元中导出获胜神经元的竞争方法是:在输出层的神经元之间采用侧向连接.输出层神经元与输入层的节点之间为全连接.
侧向连接:在自组织映射网络中,输出层的神经元构成的是一个网格状的拓扑结构,网格的每一个交叉为一个神经元,网格通常是一维的或者二维的,也可以是更高维度的.
在竞争学习的过程中,神经元与输入层之间的连接的权值会随着输入模式(刺激)的变化选择性的进行调整,调整后的神经元(获胜神经元)的位置彼此之间变得有序.使得对于不同的输入,在网格上建立有意义的坐标系. 因此,在自组织映射网络的输出层神经元构成的网格中,每个神经元的空间位置(坐标)表示着一个输入模式包含的一个内在的统计特征.
Kononen模型
kohonen模型是一个基于计算映射的SOM网络模型,它抓住了人脑中计算映射的本质特征而且保留了计算的易行性.kohonen模型还可用于数据压缩(即:数据维度的缩减). 下面主要一kohonen模型为主介绍SOMnet.
自组织映射网络实现步骤
1.对网络权值进行初始化,选择较小的初始值.
2.竞争过程;
对每个输入信号,网络中的神经元计算他们各自的判别函数的值.判别值最大的特定神经元成为本次的获胜神经元.
3.合作过程;
获胜的神经元决定兴奋神经元的拓扑邻域(即:获胜神经元周围的空间位置内的神经元),提供相邻神经元的合作基础.
4.权值调节
通过对获胜神经元及其周围的兴奋神经元的权值进行调节,以增加它们对输入信号的判别函数值,随着权值的不断调整,获胜神经元对与相似的输入信号会有更强的响应(即:判别函数值越大).
竞争过程
假设网络中输入信号(数据)空间的维度数为 m<script type="math/tex" id="MathJax-Element-4732">m</script>,从中随机选择一个输入信号(向量)记为x,
x =
输出层中的每个神经元与输入层是全连接的结构,所以每个神经元的权值向量和输入空间的维数相同,神经元 j<script type="math/tex" id="MathJax-Element-4734"> j</script>的权值向量记为:
wj=[wj1,wj2,wj3,......wjm]T j=1,2,3,4.....l<script type="math/tex" id="MathJax-Element-4736">w_j = [ w_{j1}, w_{j2}, w_{j3}, ......w_{jm}]^T j = 1,2,3,4.....l</script>
其中 l<script type="math/tex" id="MathJax-Element-4737"> l </script> 是输出层网络中神经元的总数,竞争过程就是找到与向量x最佳匹配的权值向量 wj<script type="math/tex" id="MathJax-Element-4738">w_j </script>.最佳匹配的意思是:对于 j=1,2,3,4.....l<script type="math/tex" id="MathJax-Element-4739">j = 1,2,3,4.....l</script>,比较每一个神经元对应的权值与输入向量 x 的内积 wTjx<script type="math/tex" id="MathJax-Element-4740">w_j^Tx </script>,选择最大者,对应的神经元作为获胜神经元.(假设所有神经元的阈值相同,偏置为负)
对于匹配原则,内积wTjx<script type="math/tex" id="MathJax-Element-4741">w_j^Tx </script>最大化,这数学上可以等价于,向量 x 与 wj<script type="math/tex" id="MathJax-Element-4742">w_j</script> 的欧几里的距离最小.
很容易说明这一点:首先对向量 x 和wj<script type="math/tex" id="MathJax-Element-4743"> w_j </script>进行归一化,即:∥x∥<script type="math/tex" id="MathJax-Element-4744">\parallel x \parallel</script> = ∥wj∥<script type="math/tex" id="MathJax-Element-4745">\parallel w_j \parallel</script> = 1
向量 x与 wj<script type="math/tex" id="MathJax-Element-4746">w_j</script> 的欧几里得距离:
d2(x,wj)=(x−wj)T(x−wj)=2−2wTjx<script type="math/tex" id="MathJax-Element-4747">d^2(x, w_j) = (x - w_j)^T(x - w_j) = 2 - 2w_j^Tx</script>
上面的公式中,表明最小欧几里得距离d2(x,wj)<script type="math/tex" id="MathJax-Element-4748">d^2(x, w_j)</script> 就对应这最大化内积 wTjx<script type="math/tex" id="MathJax-Element-4749">w_j^Tx </script>,欧几里得距离最小也意味着向量 x 与权值向量 wj<script type="math/tex" id="MathJax-Element-4750">w_j </script>的相似度越高.所以最佳匹配原则也就是找到和输入向量最相似的权值向量.
用索引 i(x)<script type="math/tex" id="MathJax-Element-4751"> i(x) </script> 来标识与输入向量 x 最佳匹配的神经元, i(x)<script type="math/tex" id="MathJax-Element-4752"> i(x) </script>的定义为:
i(x)=argmin∥x−wj∥ j∈<script type="math/tex" id="MathJax-Element-4753">i(x) = argmin\parallel x - w_j \parallel j \in \mathcal{A}</script>
<script type="math/tex" id="MathJax-Element-4754"> \mathcal{A} </script>为神经元网格
满足条件 argmin∥x−wj∥<script type="math/tex" id="MathJax-Element-4755">argmin\parallel x - w_j \parallel </script> 的神经元 i<script type="math/tex" id="MathJax-Element-4756">i </script>,就是输入向量 x 的最佳匹配也叫获胜神经元.SOM网络就是这样通过竞争过程将连续输入空间映射到神经元网格的离散输出空间中.根据网络的应用不同,网络的响应可能是获胜神经元的标号(它在网格中的坐标),或者是在欧几里得的距离的意义下与输入向量最相似的权值向量.
合作过程
在竞争过程中产生的获胜神经元位于兴奋神经元拓扑邻域的中心位置.
怎样定义一个神经生物学上的拓扑邻域?
在神经生物学中有证据证明,一个获胜神经元倾向于激活它紧接着的邻域内的神经元而不是隔得很远的神经元.所以对于获胜神经元的拓扑邻域按照侧向距离光滑地缩减.具体的,用 hj,i<script type="math/tex" id="MathJax-Element-27219">h_{j,i} </script>表示以获胜神经元为中心的拓扑邻域且包含这一组兴奋(合作)神经元,j<script type="math/tex" id="MathJax-Element-27220">j </script> 表示一个输出神经元,设 di,j<script type="math/tex" id="MathJax-Element-27221">d_{i,j} </script> 表示获胜神经元和兴奋神经元之间的距离.假设拓扑邻域 hj,i<script type="math/tex" id="MathJax-Element-27222">h_{j,i} </script> 是一个单峰函数,与 di,j<script type="math/tex" id="MathJax-Element-27223">d_{i,j} </script>大小有关,获胜神经元与兴奋神经元之间的距离越小,兴奋神经元受到的刺激(影响)就越大.拓扑邻域 hi,j<script type="math/tex" id="MathJax-Element-27224">h_{i,j} </script> 也可以表示兴奋神经元受到影响的程度.
单峰函数hj,i<script type="math/tex" id="MathJax-Element-27225">h_{j,i} </script>满足两个要求:
1.对于单峰函数 hi,j<script type="math/tex" id="MathJax-Element-27226">h_{i,j} </script>,在 di,j=0<script type="math/tex" id="MathJax-Element-27227">d_{i,j} = 0</script> 和 dj,i=0<script type="math/tex" id="MathJax-Element-27228"> d_{j,i} = 0</script>,获胜神经元 i<script type="math/tex" id="MathJax-Element-27229">i </script>处达到最大值.
2. hi,j<script type="math/tex" id="MathJax-Element-27230">h_{i,j} </script>的幅值随着距离di,j<script type="math/tex" id="MathJax-Element-27231">d_{i,j} </script>的增加而减小,距离趋于无穷大时幅值趋于0;
高斯函数刚好满足这些要求:
hj,i(x)=exp(−d2j,i2σ2) j∈<script type="math/tex" id="MathJax-Element-27232"> h_{j,i(x)} = exp( - \frac{d_{j,i}^2}{2 \sigma^2}) j \in \mathcal{A} </script>
i(x)<script type="math/tex" id="MathJax-Element-27233"> i(x) </script> 为获胜神经元的位置(在输出神经元网格中的坐标), j 是神经元在网格中的位置,d2j,i<script type="math/tex" id="MathJax-Element-27234">d_{j,i}^2</script> 是其他神经元距离获胜神经元的距离,σ<script type="math/tex" id="MathJax-Element-27235"> \sigma </script> 是拓扑邻域的有效宽度,它度量了靠近获胜神经元的兴奋神经元在学习过程中的参与程度.由此可见邻域函数依赖于获胜神经元和兴奋神经元在输出空间上的位置距离,不依赖于原始输入空间的距离度量.
在二维网格的情况下 d2i,j=∥rj−ri∥<script type="math/tex" id="MathJax-Element-27236">d_{i,j}^2 = \parallel r_j - r_i \parallel </script>
rj<script type="math/tex" id="MathJax-Element-27237"> r_j </script> 是兴奋神经元在输出网格中的位置向量,ri<script type="math/tex" id="MathJax-Element-27238">r_i </script> 是获胜神经元在输出网格中的位置向量.
在SOM网络中还有一个特征是拓扑邻域的大小随着时间收缩.这要求拓扑邻域函数 hi,j<script type="math/tex" id="MathJax-Element-27239">h_{i,j} </script> 的有效宽度 σ<script type="math/tex" id="MathJax-Element-27240">\sigma </script> 随着时间减小来实现.对于 σ<script type="math/tex" id="MathJax-Element-27241">\sigma </script> 依赖与时间 n 流行的选择是:
σ(n)=σ0exp(−nτ1) n=1,2,3....<script type="math/tex" id="MathJax-Element-27242"> \sigma(n) = \sigma_0 exp(\frac{-n}{ \tau_1} ) n = 1, 2, 3....</script>
σ0<script type="math/tex" id="MathJax-Element-27243"> \sigma_0 </script> 是 σ<script type="math/tex" id="MathJax-Element-27244">\sigma </script>的初始值,τ1<script type="math/tex" id="MathJax-Element-27245"> \tau_1 </script>是一个时间常数;
加入时间依赖的拓扑邻域定义为:
hj,i(n)=exp(−d2j,i2σ(n)2) n=1,2,3....<script type="math/tex" id="MathJax-Element-27246"> h_{j,i}(n) = exp(\frac{-d_{j,i}^2}{2 \sigma(n) ^2}) n = 1,2,3....</script>
在网络进行学习的初始阶段,拓扑邻域 hi,j<script type="math/tex" id="MathJax-Element-27247">h_{i,j} </script> 应该包含以获胜神经元为中心的所有神经元,然后随着时间 n (即:迭代的次数增加)慢慢收缩.宽度 σ(n)<script type="math/tex" id="MathJax-Element-27248">\sigma(n) </script> 以指数下滑,拓扑邻域也一相应的方式收缩.hj,i<script type="math/tex" id="MathJax-Element-27249"> h_{j,i} </script>会减少到仅有围绕获胜神经元的少量邻居神经元或者减少到只剩下获胜神经元.
在网络初始阶段 σ0<script type="math/tex" id="MathJax-Element-27250"> \sigma_0 </script>的初始之为输出网格的半径,时间常数为:τ1=1000log(σ0)<script type="math/tex" id="MathJax-Element-27251"> \tau_1 = \frac{1000}{log(\sigma_0)}</script>(1000不是固定的,也可以更大)
自适应过程
自组织网络的神经元的权值 wj<script type="math/tex" id="MathJax-Element-27308">w_j </script> 随着输入向量 x 的变化而改变.
n 轮的迭代:
1.从训练数据中,随机选择一个向量作为输入向量 x;
2.竞争过程,确定一个获胜神经元以及神经元在输出网格中的位置向量(拓扑邻域的中心位置);
3.合作过程,在 n 时刻确定拓扑邻域的有效半径内所有的兴奋神经元,(每一轮的训练中,拓扑邻域 hj,i(n)<script type="math/tex" id="MathJax-Element-27309"> h_{j,i}(n) </script>和有效半径(随着时间 n 衰减))
4.权值更新:
wj(n+1)=wj(n)+η(n)(x(n)−wj(n)) j∈[hj,i(n)]<script type="math/tex" id="MathJax-Element-27310"> w_j(n+1) = w_j(n) + \eta(n) (x(n) - w_j(n)) j \in \mathcal{A}[h_{j,i}(n)]</script>
j∈[hj,i(n)]<script type="math/tex" id="MathJax-Element-27311"> j \in \mathcal{A}[h_{j,i}(n)]</script>代表在 n 时刻拓扑邻域的有效半径内所有的兴奋神经元(含获胜神经元)
η<script type="math/tex" id="MathJax-Element-27312"> \eta </script> 为学习效率参数,学习效率也是随着时间逐渐衰减的:
η(n)=η0exp(−nτ2) n=1,2,3.....<script type="math/tex" id="MathJax-Element-27313"> \eta(n) = \eta_0 exp(\frac{-n}{\tau_2} ) n = 1,2,3 .....</script>
τ2<script type="math/tex" id="MathJax-Element-27314"> \tau_2 </script> 是另一个时间常数,eta0<script type="math/tex" id="MathJax-Element-27315"> eta_0 </script> 是学习效率的初始值,一般设为0.1然后随着时间 n 递减,但是永远不等于零.
权值更新的公式,实际上是在将获胜神经元和拓扑邻域内的兴奋神经元的权值向量向,向输入向量 x移动,随着训练数据的重复出现,拓扑邻域内的网络权值向量的分布会趋于服从输入向量的分布.网络中的相邻神经元的权值向量会很相似.
SOM算法小结:
1.初始化,对初始权值向量 wj<script type="math/tex" id="MathJax-Element-27742"> w_j </script>选择随机的值初始化,选择较小的权值;
2.取样,随机从输入空间选取样本 x ;
3.相似性匹配,在时间 n 时刻根据最小距离准则找到最佳匹配(获胜神经元) i(x)<script type="math/tex" id="MathJax-Element-27743"> i(x) </script>;
i(x)=argmin∥x−wj∥ j∈[1,2,3,...l]<script type="math/tex" id="MathJax-Element-27744">i(x) = argmin\parallel x - w_j \parallel j \in [1,2,3, ...l ]</script>
4.更新权值,通过更新公式调整所有神经元的权值;
wj(n+1)=wj(n)+η(n)(x(n)−wj(n))<script type="math/tex" id="MathJax-Element-27745"> w_j(n+1) = w_j(n) + \eta(n) (x(n) - w_j(n)) </script>
5.重复2,3,4步骤,知道特征映射不再发生明显变化为止;
更多推荐


所有评论(0)