Elman神经网络与自适应共振网络(ART)

article/2025/9/24 1:31:16

这几天在回过头看一些比较基础的东西,发现了两个早期研究的神经网络,Elman与ART网络,类似于上世纪80年代的hopfield神经网络,BM/RBM/DBN,RBF,SOM,以及同时期的SVM算法等等,虽然那个时候可能比较冷门,并且处于神经网络偏底层研究,与生物学结合很密切,但是想法还是很不错的。

Elman神经网络介绍以及Matlab实现

Elman神经网络介绍

1.特点
Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的能力,增强了网络的全局稳定性,它比前馈型神经网络具有更强的计算能力,还可以用来解决快速寻优问题。
2.结构
Elman神经网络是应用较为广泛的一种典型的反馈型神经网络模型。一般分为四层:输入层、隐层、承接层和输出层。其输入层、隐层和输出层的连接类似于前馈网络。输入层的单元仅起到信号传输作用,输出层单元起到加权作用。隐层单元有线性和非线性两类激励函数,通常激励函数取Signmoid非线性函数。而承接层则用来记忆隐层单元前一时刻的输出值,可以认为是一个有一步迟延的延时算子。隐层的输出通过承接层的延迟与存储,自联到隐层的输入,这种自联方式使其对历史数据具有敏感性,内部反馈网络的加入增加了网络本身处理动态信息的能力,从而达到动态建模的目的。其结构图如下图所示。
在这里插入图片描述

其网络的数学表达式为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其中,y为m维输出节点向量;x为n维中间层节点单元向量;u为r维输入向量;xc为n维反馈状态向量;w3为中间层到输出层连接权值;w2为输入层到中间层连接权值;w1为承接层到中间层连接权值;g()为输出神经元的传递函数,是中间层输出的线性组合;f()为中间层神经元的传递函数,常采用S函数。
3.与BP网络的区别
它是动态反馈型网络,它能够内部反馈、存储和利用过去时刻输出信息,既可以实现静态系统的建模,还能实现动态系统的映射并直接反应系统的动态特性,在计算能力及网络稳定性方面都比BP神经网络更胜一筹。
4.缺点
与BP神经网络一样,算法都是采用基于梯度下降法,会出现训练速度慢和容易陷入局部极小点的缺点,对神经网络的训练较难达到全局最优。

基于Matlab实现Elman神经网络

在MATLAB中,Elman神经网络可以通过调用newelm()实现。

例子:利用Elman神经网络实现MATLAB的数据预测。

%输入数据  
P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2;
9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2;
3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5;
2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1;
140 120 140 150 80 130 130 100 130 140;
2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5;
11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11;
50 70 50 80 50 60 65 40 65 50 ];  %训练数据
T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24];%训练输出实际值
TestInput=[3.2 3.9 3.1 3.2 3.0;
9.5 9 9.5 9.7 9.3;
3.4 3.1 3.6 3.45 3.3;
2.15 2 2.1 2.15 2.05;
115 80 90 130 100;
2.8 2.2 2.7 2.6 2.8;
11.9 13 11.1 10.85 11.2;
50 50 70 70 50];%测试数据
TestOutput=[2.24 2.2 2.2 2.35 2.2]; %测试输出实际值[pn,minp,maxp,tn,mint,maxt]=premnmx(P,T);
p2= tramnmx(TestInput,minp,maxp);
%创建Elman神经网络  
net_1 = newelm(minmax(pn),[8,1],{'tansig','purelin'},'traingdm');  %设置训练参数  
net_1.trainParam.show = 50;  
net_1.trainParam.lr = 0.01;  
net_1.trainParam.mc = 0.9;  
net_1.trainParam.epochs =10000;  
net_1.trainParam.goal = 1e-3;  
net=init(net_1);%初始化网络  
%训练网络  
net = train(net,pn,tn);  
%使用训练好的网络,自定义输入  
PN = sim(net,p2); 
TestResult= postmnmx(PN,mint,maxt);%仿真值反归一化
%理想输出与训练输出的结果进行比较  
E =TestOutput - TestResult 
%计算误差  
MSE=mse(E);%计算均方误差  
figure(1)
plot(TestOutput,'bo-');
hold on;
plot(TestResult,'r*--');
legend('真实值','预测值');
save('Elman.mat','net');

运行结果如下:
在这里插入图片描述

在这里插入图片描述
()多么原始的matlab神经网络工具箱啊。。)

误差结果为:
E =[0.48% 0.40% 0.12% 9.47% 2.28%]
平均误差为:2.55%

转载请标明出处,谢谢!。

如果感觉本文对您有帮助,请留下您的赞,您的支持是我坚持写作最大的动力,谢谢!


自适应共振网络(ART)应用研究

人类智能的特性之一是能在不忘记以前学习过的事物的基础上继续学习新事物。这项特性是目前多数类神经网络模型所欠缺的,这些类神经网络模型(例如反向传播类神经网络)一般都需要事先准备好的训练模式集进行训练。当训练完毕之后,神经元之间的连接强度就确定了,除非再有新的训练动作发生,否则这些连接强度不会再有任何改变。当有新模式出现时,这些类神经网络模型只能由用户将新模式加到训练模式中,形成新的训练模式集,然后重新训练所有神经元间的连接强度,也就是旧有的知识必须重新训练一遍。这些类神经网络模型,只有记忆而没有智能,没有辨识新事件出现的能力,也没有自我学习扩充记忆的能力。

为了试图解决这些问题,Grossberg等人模仿人的视觉与记忆的交互运作,提出所谓自适应共振理论(Adaptive Resonance Theory,ART)。他多年来一直试图为人类的心理和认知活动建立统一的数学理论,ART就是这一理论的核心部分。随后G.A.Carpenter又与S.Grossberg提出了ART网络。

ART是一种自组织神经网络结构,是无教师的学习网络。当在神经网络和环境有交互作用时, 对环境信息的编码会自发地在神经网中产生, 则认为神经网络在进行自组织活动。ART不像其它类神经网络模型,分为训练阶段及测试阶段,需事先准备好训练模式集及测试模式集。ART时时处在训练状态及测试状态。当它开始工作的时候可以不用确定到底需要多少个神经元,先给几个就行,或者根本不用给它。ART的学习就像小孩成长一样,头脑也会同步长大。当 ART发现记忆的神经元不够用时,会动态长出新的神经元去记忆新模式,形成新聚类,而不会影响到己经存在的神经元间的连接,因此 ART 可以在不忘掉先前学习过的事物的情况下,继续学习新事物。

目前,ART 有很多版本:ART1是最早的版本,由 Carpenter 和 Grossberg 于1987 年提出,ART1 含有并行架构的主-从式算法(leader-followeralgorithm),在算法的激活及匹配函数中运用了集合运算,主要处理只含 0 与 1 的影像(即黑白)识别问题。ART2可以处理灰度(即模拟值)输入ART3具有多级搜索架构,它融合了前两种结构的功能并将两层神经网络扩展为任意多层的神经元网络。由于ART3 在神经元的运行模型中纳入了神经元的生物电化学反应机制,因而其功能和能力得到了进一步扩展。

  在此我将结合实验和大家分享学习ART1模型的基本原理和学习算法。为了进一步了解ART1网络,于是设计一组实验,按照M=4,N=25设计网络,如下图A、B、C、D所示。按照顺序输入A、B、C、D后,得出如图所示的四幅黑白点阵图,通过改变不同的警戒阈值ρ,我们会得出怎样的分类呢?

在这里插入图片描述
一、问题分析

为了对四幅黑白点阵图的进行模式识别,本实验在运用ART1模型理论的基础上,将警戒阈值ρ设置为0.7和0.3两个值,分别得到不同的实验结果。这样就对ART1网络的学习过程进行了验证。

1、ART模型基本原理

人工神经网络具有存储和应用经验知识的自然特性。神经网络具有很强的鲁棒性,即使系统连接线被破坏了多达50%,它仍能以优化工作状态来处理信息。自适应共振理论(ART)借鉴人的认知过程和大脑工作的特点,是一种模仿人脑认知过程的自组织聚类算法。在解决大量数据聚类和分类时,聚类效果好且稳定,此外还能高效利用系统的记忆资源。本次实验参考相关文献,以ART网络中的ART1模型为理论基础来实现字符识别。这种网络(图1)的输入层和输出层之间为双向连接,反馈连接权{ t ji }记忆已学的输入模式。

在这里插入图片描述

ART1人工神经网络由两层神经元组成,分别称为比较层(输入层)和识别层(输出层)。类别判断是由在识别层中的一个单一神经元来作出的,类似于大脑皮层感受区中的细胞组,比较层中的神经元对模式的输入特性做出响应。在这两层之间的突触连接(权值)可以根据两种不同的学习规则进行双向修改。识别层的神经元具有允许竞争的抑制连接。该网络结构还包括三个附加模块,即增益1、增益2和复位模块,如下图:

在这里插入图片描述

ART1人工神经网络的子系统包括两层具有前馈和后馈特征的神经元(比较层和识别层)。该系统决定输入数据是否与已存储的一个原型相匹配,如果匹配,就会产生共振。监视子系统负责监测在识别层自下而上和自上而下模式之间的失配情况。识别层对输入矢量所做出的反应,可以比作是通过警戒机制的原始输入矢量。警戒提供了一种输入矢量与激励识别层神经元相应的聚类中心之间的距离测度。当警戒低于预先设置的门限值时,必须创建一个新的类别并将输入矢量存于该类别中。就是说,在识别层,将先前未分配的神经元分配到一个与新的输入模式相联系的新类别中。识别层遵循胜者取全部的原理,如果输入的数据通过了警戒,获胜的神经元(与输入数据最为匹配的一个神经元)就会被训练,以便他在特性空间中相应的聚类中心移向输入数据模式。
在这里插入图片描述

二、解决方案

1、算法设计

(1)初始化

由于前向连接权{W ij}在网络学习时,负担着对学习模式的记忆功能,为给所有的学习模式提供平等竞争的机会,{Wij}的初值全部设置为1 /(1+n),其中n为输入层单元数。反馈连接权{t ji}最终将记忆已经学过的输入模式,其值最终为0和1二值的形式,为在开始时不丢失信息,可设{ t ji }=1。ART1网络有一个特殊的参数,即警戒参数ρ,按需要设定为0<ρ< 1。为了实验顺利进行,我们在初始化中设定警戒门限p= 0.3。

(2)样本输入并计算最大Sj

依次将4个输入模式样本读取到网络的输入层矩阵,提供给网络学习。在初始状态下,所有的{Wij}都相等,故所有的Sj都相同。无论初次学习还是以后增添样本,在计算Sj时都可能产生相同的Sj。这里程序设计为选择首次出现的Sj为获胜单元,作为本次学习样本的输出单元。

(3)反馈比较

选用最终的最大Sj为输入激活值最大的神经元,但该神经元能否代表输入模式的正确分类,还要将该输入模式与所对应的反馈连接权Tj=[ t j1 , t j2 , … , t jm ]比较,如果相等,则认为本次输入与网络产生了共振,网络不用再寻找。否则,将该神经元排除在下次识别范围之外,重复寻找最大Sj。所谓共振并不一定要求输入与反馈完全相等,允许的误差由警戒参数ρ确定。

2、编程实验

在对问题和算法进一步理解的基础上,本实验程序用python编写。首先建立N=25,M=4的网络,代码实现如下:

   N = 25M = 4VIGILANCE = 0.3PATTERN_ARRAY = [[1, 0, 0, 0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1],[1, 0, 0, 0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1],[1, 0, 0, 0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,0,0,1],[1, 0, 0, 0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1]]

其次,本实验通过定义ART1函数将ART1模型算法写入其中,

   def ART1(self,trainingPattern, isTraining):inputSum = 0activationSum = 0f2Max = 0reset = Truefor i in range(self.mNumClusters):self.f2[i] = 0.0for i in range(self.mInputSize):self.f1a[i] =float(trainingPattern[i])inputSum = self.get_vector_sum(self.f1a)for i in range(self.mInputSize):self.f1b[i] = self.f1a[i]for i in range(self.mNumClusters):for j in range(self.mInputSize):self.f2[i] += self.bw[i][j]* float(self.f1a[j])reset = Truewhile reset:f2Max = self.get_maximum(self.f2)if f2Max == -1:f2Max = self.mNumClustersself.f2.append(0.0)self.tw.append([1.0] * self.mInputSize)self.bw.append([1.0 / (1.0 + self.mInputSize)]* self.mInputSize)self.mNumClusters+=1for i in range(self.mInputSize):self.f1b[i] = self.f1a[i]* math.floor(self.tw[f2Max][i])activationSum = self.get_vector_sum(self.f1b)reset = self.test_for_reset(activationSum,inputSum, f2Max)if isTraining:self.update_weights(activationSum,f2Max)return f2Max

在这里插入图片描述

在这里插入图片描述

1、取警戒参数设r=0.7,初始权值b ij=1/(1+n)=1/26,t ij=1。输入样本X 1,将X 1作为第一个类,并使第一个神经元与之对应,此时t ij = X 1,输入样本X 2,此时没有与第一个神经元竞争的神经元,而且不满足D ≥ ρ,因此将看做新的模式,并使第二个神经元与之对应,此时t i2 = X 2;

2、输入样本X 3,此时第一个与第二个神经元竞争,第一个神经元获胜,但警戒值测试失败,将其排除在下一次竞争范围之外,第二个神经元因而获胜但警戒值测试仍然失败,将X 3作为新的模式,并使第三个神经元与之对应,此时t i3 = X 3;

3、输入样本X 4,此时第三个神经元竞争获胜,并且通过警戒值测试,故认为是第三个神经元所代表的类,t i3保持不变,到此,网络保存了三个类。

本实验得出如下实验结果:

当r=0.7时,网络中存在三种分类,

在这里插入图片描述

在这里插入图片描述

四、总结

自适应共振理论(ART) 是一种自组织神经网络结构,是无教师的学习网络。当在神经网络和环境有交互作用时,对环境信息的编码会自发地在神经网中产生,认为神经网络在进行自组织活动。同时了解到了ART与其它类神经网络模型的区别,即ART 可以在不忘掉先前学习过的事物的情况下,继续学习新事物。

为了进一步理解ART模型,我们通过选取一个简单的例子来具体阐述其应用。在警戒参数分别为0.3与0.7的条件下进行实验,并选取Python计算机语言对其实现,得出结论:警戒参数越大,分类越细;警戒参数越小,分类越粗。

在程序的运行过程中,相对比较顺利,但也得承认数据测试的局限性,如选取的样本较小,警戒参数选取的过于主观性,很多未知的问题还没有发现。本人现就职于甜橙金融,对人工神经网络研究仍有余热,同时文章中存在的不足和缺陷,希望在以后有机会与大家多沟通交流。

更多参考:

https://blog.csdn.net/App_12062011/article/details/53463372
https://blog.csdn.net/mr_wuliboy/article/details/80656122
https://blog.csdn.net/qq_42633819/article/details/82942561
https://blog.csdn.net/yongjinjiang/article/details/79644213
https://blog.csdn.net/fengzhimohan/article/details/80847979


http://chatgpt.dhexx.cn/article/g5HpGv5e.shtml

相关文章

Elman神经网络原理

Elman神经网络 近期开题&#xff0c;阅读到了一篇文章关于故障诊断的&#xff0c;其中用到了Elman神经网络&#xff0c;具体是结合EMD、PCA-SOM的Elman的性能评估/预测故障诊断&#xff0c;对Elman神经网络有点陌生&#xff0c;网上资源也讲的特别杂&#xff0c;来做个汇总Int…

【神经网络第一期】Elman神经网络基本原理

1. Elman神经网络概述 根据神经网络运行过程中的信息流向&#xff0c;可将神经网络可分为前馈式和反馈式两种基本类型。前馈式网络通过引人隐藏层以及非线性转移函数可以实现复杂的非线性映射功能。但前馈式网络的输出仅由当前输入和权矩阵决定&#xff0c;而与网络先前的输出…

回归预测 基于ELMAN递归神经网络预测及其matlab代码实现

文章目录 1. ELMAN神经网络的简介和算法描述1.1 Elman网络介绍1.2 Elman结构组成 1.3 ELMAN训练界面的参数解读2. 建立ELMAN神经网络的步骤3. 编写MATLAB代码4. ELMAN程序运行结果4.1 各层的神经元个数的确定过程4.2 预测值和真实值的误差计算&#xff08;SSE、MAE、MSE、RMSE、…

Elman神经网络介绍以及Matlab实现

Elman神经网络介绍 1.特点 Elman神经网络是一种典型的动态递归神经网络&#xff0c;它是在BP网络基本结构的基础上&#xff0c;在隐含层增加一个承接层&#xff0c;作为一步延时算子&#xff0c;达到记忆的目的&#xff0c;从而使系统具有适应时变特性的能力&#xff0c;增强了…

数据库命名规范--通用

分段式的 1.1 基本命名原则 以下基本原则适用于所有数据库对象命名&#xff0c;如无特别说明则为强制规范。规范&#xff1a;遵循行业规范 当有相关国家/行业强制性数据结构标准规范存在时&#xff0c;用于存储某业务数据的业务表在表名命名上原则上应该遵从标准规定&#xf…

数据库命名规范

数据库命名规范 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术&#xff1a;SQL Server 2014 Management Studio 作者&#xff1a;朱海恩 撰写时间&#xff1a;2019年7月12日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…

【数据库】命名规范

鸣谢&#xff1a; 命规范_码农书生的博客-CSDN博客_数据库字段名称命名规则一、数据库命名规范1.1 数据库命名规范采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线_组成&#xff0c;命名简洁明确&#xff0c;多个单词用下划线_分隔,一个项目一个数据库&…

ESP8266 WIFI 模块串口调试过程-实现通过互联网实现数据远程传输(结尾含驱动代码链接)

一、 ESP8266 WIFI模块调试&#xff08;串口发送AT指令调试&#xff09;。 ESP8266 WIFI模块的调试算是最复杂的了&#xff0c;虽然通信是简单的串口通信&#xff0c;但是要设置ESP8266连接服务器并稳定无误的将数据上传&#xff0c;还是非常不容易的。 在前期模块调试阶段我…

串口转无线WiFi模块——WizFi210-EVB操作手册

1. 产品介绍 特点 - 通过串行主机接口&#xff0c;进行WiFi连接 - 快速开机时间&#xff1a;少于20毫秒 - 超低功耗&#xff0c;通过动态电源管理&#xff08;待机模式34μA&#xff09; - 速度高达to11Mbps&#xff08;802.11b&#xff09;的标准的802.11b/g/n接入点 - 安全…

sever串口wifi拓展板_什么是串口WIFI模块

展开全部 串口WiFi模块多是以邮票孔的62616964757a686964616fe59b9ee7ad9431333365646263形式作为管脚引出控制引脚&#xff0c;主要采取焊接的方式来实现接入电路控制板。 串口WiFi模块是多种WiFi模块中的一类&#xff0c;功能是将串口或TTL电平转换为符合Wi-Fi无线网络通信标…

【沧海拾昧】WiFi串口通信ESP8266模块基本介绍(附野火WiFi透传实例)

#C0104 沧海茫茫千钟粟&#xff0c;且拾吾昧一微尘 ——《沧海拾昧集》CuPhoenix 【阅前敬告】 沧海拾昧集仅做个人学习笔记之用&#xff0c;所述内容不专业不严谨不成体系 【如有问题必是本集记录有谬&#xff0c;切勿深究】 目录 前言一、ESP8266模块基本连线二、ESP8266固件…

ESP8266串口WiFi模块

参考和学习《ESP8266串口WIFI模块的基本使用》点击打开链接 ESP8266是一款超低功耗的UART-WiFi 透传模块,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网通信,实现联网功能。 把硬件联网之后,就再也不是“玩单机”了。配合服务器端的Socket网络编程,可以…

教你E103-W10串口转WiFi模块的无线透传应用教程

以下为E103-W10作为 softAP实现 UDP串口服务器无线数据透传的举例&#xff0c;E103-W10作为 station 可同理实现透传。 1.透传 默认仅在TCP client单连接或UDP传输模式时&#xff0c;支持透传。 1.1.TCP Client 单连接透传 1.配置WiFi模式 使用指令ATCWMODE3//SoftAPStati…

ESP32小网关应用,嵌入式串口转以太网,支持蓝牙+wifi

提示&#xff1a;今天分享的ESP32小网关&#xff0c;是深圳市启明云端有限公司推出的基于ESP32系列的嵌入式串口转以太网模块&#xff0c;模块内部集成了优化过的TCP/IP协议栈的WT32-ETH01模块 WT32-ETH01-基于ESP32的小网关 提示&#xff1a;ESP32系列IC是集成了2.4GHz Wi-Fi…

如何测试WizFi210的”串口转无线”功能?

该文章给大家介绍串口模块WizFi210的快速启动指导&#xff0c;如何测试WizFi210的”串口转无线”功能。 首先要给大家说明的是&#xff0c;本文描述的是在下列环境中配置串口模块WizFi210时所需要的步骤&#xff1a; 1. AP&#xff1a;使用WPA Personal或临时密钥完整性协议(T…

rs232/485转WiFi串口转换服务器 Modbus RTU转tcp协议

大家好&#xff0c;我们知道传统工业上常用的是RS232和RS485信号来控制设备&#xff0c;而现在&#xff0c;我们已经进入了互联网时代&#xff0c;物联网时代&#xff0c;所有的设备都可以上网&#xff0c;而传统的232设备如何上网呢&#xff1f; 在这里&#xff0c;我推荐大家…

ESP8266-12F WIFI转串口模块底板设计

一、ESP8266-12F模块简介 ESP8266-12F 是ESP8266-12的增强版&#xff0c;完善外围电路&#xff0c;四层板板工艺&#xff0c;增强阻抗匹配&#xff0c;信号输出更佳&#xff0c;无论是稳定性还是抗干扰能力&#xff0c;PCB天线经过专业实验室测试&#xff0c;完美匹配&#xff…

串口转WiFi透传模块UART转WiFi模块嵌入式WiFi参数一键配置原理

SimpleWiFi串口WiFi模块一键配置功能 概述 目前&#xff0c;在嵌入式领域&#xff0c;智能家居、智能工业、智能公交等等控制中&#xff0c;WiFi已经成为了一种普遍被采用的技术。 在智能工业控制&#xff0c;或者智能家居的主控系统中。单片机&#xff0c;成为了中控系统的控…

调试wifi转串口的板子成功了

今天下班回到家就开始调我在淘宝上买的wifi转串口的板子&#xff0c;到目前为止算是调通了。回头就是编写arduino的串口通信程序了。这样的话&#xff0c;我的手机智能家局系统很快就可以完成了。下边是调试wifi转串口板子的情况&#xff0c;拿来和大家分享。 大体上的调试思路…

wifi转串口

wifi转串口 ZLAN7146是一款wifi转串口的wifi串口服务器。该串口服务器可以方便地使得串口设备连接到WIFI无线网络&#xff0c;实现串口设备的无线化网络升级。RS232接口支持全双工、不间断通信&#xff1b;RS485内嵌485防雷保护。wifi支持STA模式连接到无线路由器&#xff0c;或…