(无导师学习神经网络)竞争神经网络、SOFM神经网络

本文介绍了有导师和无导师学习的神经网络,包括BP和RBF神经网络。无导师学习的典型代表是竞争神经网络和自组织特征映射(SOFM)神经网络。竞争神经网络中,只有一个神经元获胜并更新权值,而在SOFM中,获胜神经元及其邻近神经元都会更新。最后,展示了使用MATLAB代码实现竞争神经网络和SOFM神经网络的训练与测试过程。
摘要由CSDN通过智能技术生成

神经网络分类

  • 有导师神经网络:

    对于有导师学习神经网络,例如BP神经网络RBF神经网络,事先需要知道与输入相对应的期望输出,根据期望输出与网络输出间的偏差来调整网络的权值与阈值。

  • 无导师学习神经网络

    与有导师学习神经网络不同,无导师学习神经网络在学习过程中无需知道期望的输出。其与真实人脑中的神经网络类似,可以通过不断地观察、分析与比较,自动揭露样本中的内在规律和本质,从而可以对具有近似特征(属性)的样本进行准确地分类和识别。竞争神经网络和自组织特征映射(SOFM)神经网络属于无导师学习神经网络。

竞争神经网络

  • 竞争神经网络结构

    竞争神经网络一般由输入层和竞争层组成;

    与RBF等神经网络类似,输入层仅实现输入模式的传递,并不参与实际的运算;

    竞争层的各个神经元以相互竞争的形式来赢得对输入模式的响应,最终只有一个神经元赢得胜利,并使与该获胜神经元相关的各连接权值和阈值向着更有利于其竞争的方向发展,而其他神经元对应的权值和阈值保持不变;

    竞争神经网络结构如下图所示:
    在这里插入图片描述

  • 权值、阈值更新

    获胜神经元 k k k对应的权值和阈值分别按以下公式修正,
    I W k 1 , 1 = I W k 1 , 1 + α ( p − I W k 1 , 1 ) IW_k^{1,1}=IW_k^{1,1}+\alpha(p-IW_k^{1,1}) IWk1,1=IWk1,1+α(pIWk1,1)
    b 1 = exp ⁡ ( 1 − l o g [ ( 1 − β ) e 1 − l o g ( b 1 ) + β ∗ a 1 ] ) b^1=\exp({1-log[(1-\beta)e^1-log(b^1)+\beta *a^1]}) b1=exp(1log[(1β)e1log(b1)+βa1])
    其余神经元的权值和阈值保持不变。
    其中 α \alpha α表示权值的学习速率, β \beta β表示阈值的学习速率;
    I W k 1 , 1 IW_k^{1,1} IWk1,1 1 , 1 ^{1,1} 1,1的第 k k k行,即表示与获胜神经元 k k k对应的权值;
    a 1 a^1 a1为竞争层神经元的输出,即 a 1 = [ a 1 1 , a 2 1 , . . . , a S 1 1 ] ,    a i 1 = { 0 ,    i ≠ k 1 ,    i = k ,    i = 1 , 2 , . . . , S 1 a^1=[a_1^1,a_2^1,...,a_{S^1}^1],\ \ a_i^1=\{^{1,\ \ i=k}_{0,\ \ i\not=k}, \ \ i=1, 2,...,S^1 a1=[a11,a21,...,aS11],  ai1={0,  i=k1,  i=k,  i=1,2,...,S1

  • competlayer函数
    net = c
    参数numClasses为竞争层神经元个数
    kohonenLR为权值的学习速率(默认为0.01)
    conscienceLR为阈值的学习速率(默认为0.001)

SOFM神经网络

  • SOFM神经网络

    自组织特征映射(self-organizing feature mapping, SOFM)神经网络根据神经元有序的排列可以反映出所感觉到的外界刺激的某些物理特性而提出的。

    其主要思想是在学习过程中逐步缩小神经元之间的作用邻域,并依据相关的学习规则增强中心神经元的激活程度,从而去掉各神经元之间的侧向连接,以达到模拟真实大脑神经系统“近兴奋远抑制”的效果。

  • SOFM神经网络结构

    SOFM神经网络的结构与竞争神经网络的结构类似,是一个由输入层和自组织特征映射层(竞争层)组成的两层网络。
    在这里插入图片描述
    在竞争神经网络中,每次仅有一个神经元获胜,即只有一个神经元的权值和阈值得到修正。在SOFM神经网络中,不仅与获胜神经元对应的权值和阈值得到调整,其邻近范围内的其他神经元也有机会进行权值和阈值调整,这在很大程度上改善了网络德 学习能力和泛化能力。

  • 权值更新

    根据公式: { I W j 1 , 1 = I W j 1 , 1 ,    j ∉ N c ( t ) I W j 1 , 1 = I W j 1 , 1 + η ( t ) ( p − I W j 1 , 1 ) ,    j ∈ N c ( t ) , \{^{IW_j^{1,1}=IW_j^{1,1}+\eta(t)(p-IW_j^{1,1}), \ \ j\in N_c(t)}_{IW_j^{1,1}=IW_j^{1,1},\ \ j\notin N_c(t)}, {IWj1,1=IWj1,1,  j/Nc(t)IWj1,1=IWj1,1+η(t)(pIWj1,1),  jNc(t),对获胜神经元惊醒权值更新。

  • 学习速率及邻域更新

    η = η ( 1 − N T ) \eta=\eta(1-\frac{N}{T} ) η=η(1TN)
    N c = 「 N c ( 1 − N T ) ] N_c=「N_c(1-\frac{N}{T})] Nc=Nc(1TN)], 「   ] 「 \ ]  ]表示向上取整

  • selforgmap函数
    在这里插入图片描述
    参数dimensions为网络的拓扑结构(默认[8 8]);
    coverSteps为邻近距离递减到1的步数(默认100);
    initNeighbor为初始的邻近距离(默认3);
    topologyFcn为网络的拓扑函数(默认’hextop’);
    distanceFcn为网络的距离函数(默认’linkdist’);

  • SOMF模型解释

    左图,是4*4的拓扑结构;右图,16个神经元之间的连接关系:
    在这里插入图片描述在这里插入图片描述
    神经元编号从下往上,从左往右
    [ 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 ] \begin{bmatrix}13&14&15&16\\9&10&11&12\\5&6&7&8\\1&2&3&4\end{bmatrix} 13951141062151173161284
    相邻神经元的距离关系,颜色越深距离越远
    在这里插入图片描述
    神经元与对应的样本的关系,如某个神经元空白即是“死神经元”
    在这里插入图片描述
    每个输入样本与对应的神经元的距离关系
    在这里插入图片描述

代码

水源样本数据下载
链接: https://pan.baidu.com/s/1wpRpILAPT-XLQWidHpJd6Q 提取码: xc2g

%% I. 清空环境变量
clear all
clc

%% II. 训练集/测试集产生
%%
% 1. 导入数据
load water_data.mat

%%
% 2. 数据归一化
attributes = mapminmax(attributes);

%%
% 3. 训练集和测试集划分

% 训练集——35个样本
P_train = attributes(:,1:35);
T_train = classes(:,1:35);
% 测试集——4个样本
P_test = attributes(:,36:end);
T_test = classes(:,36:end);

%% III. 竞争神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newc(minmax(P_train),4,0.01,0.01); % 参数有竞争神经元个数、权值学习率、阈值学习率

%%
% 2. 设置训练参数
net.trainParam.epochs = 500;

%%
% 3. 训练网络
net = train(net,P_train);

%%
% 4. 仿真测试

% 训练集
t_sim_compet_1 = sim(net,P_train);
T_sim_compet_1 = vec2ind(t_sim_compet_1);
% 测试集
t_sim_compet_2 = sim(net,P_test);
T_sim_compet_2 = vec2ind(t_sim_compet_2);

%% IV. SOFM神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newsom(P_train,[4 4]);

%%
% 2. 设置训练参数
net.trainParam.epochs = 200;

%%
% 3. 训练网络
net = train(net,P_train);

%%
% 4. 仿真测试

% 训练集
t_sim_sofm_1 = sim(net,P_train);
T_sim_sofm_1 = vec2ind(t_sim_sofm_1);
% 测试集
t_sim_sofm_2 = sim(net,P_test);
T_sim_sofm_2 = vec2ind(t_sim_sofm_2);

%% V. 结果对比
%%
% 1. 竞争神经网络
result_compet_1 = [T_train' T_sim_compet_1']
result_compet_2 = [T_test' T_sim_compet_2']

%%
% 2. SOFM神经网络
result_sofm_1 = [T_train' T_sim_sofm_1']
result_sofm_2 = [T_test' T_sim_sofm_2']
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值