自组织竞争神经网络

一、概述

自组织竞争神经网络是一种无监督的学习方法。与之前不同的是,前几节讲述的神经网络都是有标签,并且更新所有权值,但是他们并没有考虑到人体神经元的侧抑制现象,也就是在很多情况下,某一个神经元刺激仅能激活很少一部分神经元而不是所有神经元,这就体现了一种竞争的思想。竞争神经网络每次只更新一个被激活的权值并且没有标签去告诉他应该怎么做,这更像是一种聚类方法。

二、网络模型

自组织神经网络python 自组织神经网络算法_自组织竞争

自组织竞争神经网络共有三层:输入层、竞争层、输出层。
第一层为输入层:
输入方式为线性输入。
第二层为竞争层:
竞争层规则:1.每次只更新获胜神经元的权值。
2.与输入层全连接,层内神经元间无连接。
第三层为输出层:
输出函数为线性函数,将训练好的权值线性输出。

三、网络建立详解

设置30个二维点,将他们分成2类。

第一步:设置变量
1.权值矩阵:随机矩阵,行为分的类别,列为维度。mat[2,2];
2.迭代次数:maxiterator=2000。
第二步:数据归一化
为了更好的达到稳态,过大的或者变化过大的值会造成整个网络训练的不稳定,这是就需要数据归一化。我们将所有的x,y的值归一化到(-1,1)中。
第三步:输入数据,得到输出
输入所有输入的数据,利用数据乘上相应的权值得到输出结果。
第四步:调整权值
利用竞争策略,找出输出结果最大的值也就是获胜神经元,我们只调整这一个神经元,这样就可以让权值更接近聚类中心。

四、网络实现(Matlab非API实现)

输入数据

x=[4.1,1.8,0.5,2.9,4.0,0.6,3.8,4.3,3.2,1.0,3.0,3.6,3.8,3.7,3.7,8.6,9.1,7.5,8.1,9.0,6.9,8.6,8.5,9.6,10.0,9.3,6.9,6.4,6.7,8.7];
y=[8.1,5.8,8.0,5.2,7.1,7.3,8.1,6.0,7.2,8.3,7.4,7.8,7.0,6.4,8.0,3.5,2.9,3.8,3.9,2.6,4.0,2.9,3.2,4.9,3.5,3.3,5.5,5.0,4.4,4.3];

data=[x;
    y];

数据归一化

[dataone]=mapminmax(data);
x=dataone(1,:);
y=dataone(2,:);

规则数据的建立

w=rand(2,2);
sigma=0.2;

maxiterator=2000;

迭代循环,权值调整

for i=1:maxiterator
    k=randi(30);
    ds=dataone(:,k);
    out=w*ds;
    [~,ind]=max(out);
    w(ind,:)=w(ind,:)+sigma*(ds'-w(ind,:)); 
end

运行结果

初始值:

自组织神经网络python 自组织神经网络算法_神经网络_02

分类结果:2类 权值中心

自组织神经网络python 自组织神经网络算法_matlab_03

分类结果:2类 分类演示

自组织神经网络python 自组织神经网络算法_自组织竞争_04

结束语

竞争神经网络考虑了神经元侧抑制问题,并且无标签的训练相当于是聚类,也就是无监督的学习。下一节将会开始学习反馈神经网络。