自适应共振网络(ART)应用研究_art算法可以用来做自适应算法吗-程序员宅基地

技术标签: 算法  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=4N=25设计网络,如下图ABCD所示。按照顺序输入ABCD后,得出如图所示的四幅黑白点阵图,通过改变不同的警戒阈值ρ,我们会得出怎样的分类呢?

一、问题分析

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

1ART模型基本原理

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

                                                  

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

                                     

图1 ART1人工神经网络结构

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

2、ART1模型算法步骤

①初始化,设置前向连接权的初值为W ij (0) =1 /(1 +n),取反馈连接权的初值为 t ji (0) =1,i =1,2,…, n; j =1, 2, …, m。设定警戒参数ρ , 0 <ρ ≤ 1。

②将输入模式提供给输入层,计算激活值:

③选出 S j 中的最大值 S g :

④比较反馈连接权矢量与输入模式矢量的相似程度是否大于预先设定的警戒参数ρ:

如果,则转入第⑥步,否则接第⑤ 步。

⑤取消识别结果,将神经元 g排除在识别范围之外,返回第③ 步。当所有已记忆过的神经元都不满足式(1)时,则在输出层还未规定输出值的神经元中任选一个作为输入模式 U k 的分类结果,并令这个神经元为神经元 g,进入第⑥步。

⑥按下式调整连接权

⑦返回第②步,对下一个输入模式进行识别。

二、解决方案

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 = 25

       M = 4

       VIGILANCE = 0.3

       PATTERN_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 = 0

        activationSum = 0

        f2Max = 0

        reset = True

         

        for i in range(self.mNumClusters):

            self.f2[i] = 0.0

        for 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 = True

        while reset:

            f2Max = self.get_maximum(self.f2)

            if f2Max == -1:

                f2Max = self.mNumClusters

                self.f2.append(0.0)

                self.tw.append([1.0] * self.mInputSize)

                self.bw.append([1.0 / (1.0 + self.mInputSize)]* self.mInputSize)

                self.mNumClusters+=1

            for 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.3,输入样本=[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,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1],i=1,2…25。输入样本=[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],此时,通过警戒值测试,因此将看做第一类;

2、输入样本=[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],此时,通过警戒值测试,因此,将看作第一类;

3、输入样本=[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],此时没有与第一个神经元竞争的神经元,而且不能通过警戒值测试,因此将看做新的模式,并使第二个神经元与之对应,此时。到此,网络保存了两个类。

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

当r=0.3时,网络中只有两种分类:

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计算机语言对其实现,得出结论:警戒参数越大,分类越细;警戒参数越小,分类越粗。

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/YongJinJiang/article/details/79644213

智能推荐

linux devkmem 源码,linux dev/mem dev/kmem实现访问物理/虚拟内存-程序员宅基地

文章浏览阅读451次。dev/mem: 物理内存的全镜像。可以用来访问物理内存。/dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容。调试嵌入式Linux内核时,可能需要查看某个内核变量的值。/dev/kmem正好提供了访问内核虚拟内存的途径。现在的内核大都默认禁用了/dev/kmem,打开的方法是在 make menuconfig中选中 device drivers --> ..._dev/mem 源码实现

vxe-table 小众但功能齐全的vue表格组件-程序员宅基地

文章浏览阅读7.1k次,点赞2次,收藏19次。vxe-table,一个小众但功能齐全并支持excel操作的vue表格组件_vxe-table

(开发)bable - es6转码-程序员宅基地

文章浏览阅读62次。参考:http://www.ruanyifeng.com/blog/2016/01/babel.htmlBabelBabel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行// 转码前input.map(item => item + 1);// 转码后input.map(function (item) { return item..._让开发环境支持bable

FPGA 视频处理 FIFO 的典型应用_fpga 频分复用 视频-程序员宅基地

文章浏览阅读2.8k次,点赞6次,收藏29次。摘要:FPGA视频处理FIFO的典型应用,视频输入FIFO的作用,视频输出FIFO的作用,视频数据跨时钟域FIFO,视频缩放FIFO的作用_fpga 频分复用 视频

R语言:设置工作路径为当前文件存储路径_r语言设置工作目录到目标文件夹-程序员宅基地

文章浏览阅读575次。【代码】R语言:设置工作路径为当前文件存储路径。_r语言设置工作目录到目标文件夹

background 线性渐变-程序员宅基地

文章浏览阅读452次。格式:background: linear-gradient(direction, color-stop1, color-stop2, ...);<linear-gradient> = linear-gradient([ [ <angle> | to <side-or-corner>] ,]? &l..._background线性渐变

随便推点

【蓝桥杯省赛真题39】python输出最大的数 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析-程序员宅基地

文章浏览阅读1k次,点赞26次,收藏8次。第十三届蓝桥杯青少年组python编程省赛真题一、题目要求(注:input()输入函数的括号中不允许添加任何信息)1、编程实现给定一个正整数N,输出正整数N中各数位最大的那个数字。例如:N=132,则输出3。2、输入输出输入描述:只有一行,输入一个正整数N输出描述:只有一行,输出正整数N中各数位最大的那个数字输入样例:

网络协议的三要素-程序员宅基地

文章浏览阅读2.2k次。一个网络协议主要由以下三个要素组成:1.语法数据与控制信息的结构或格式,包括数据的组织方式、编码方式、信号电平的表示方式等。2.语义即需要发出何种控制信息,完成何种动作,以及做出何种应答,以实现数据交换的协调和差错处理。3.时序即事件实现顺序的详细说明,以实现速率匹配和排序。不完整理解:语法表示长什么样,语义表示能干什么,时序表示排序。转载于:https://blog.51cto.com/98..._网络协议三要素csdn

The Log: What every software engineer should know about real-time data's unifying abstraction-程序员宅基地

文章浏览阅读153次。主要的思想,将所有的系统都可以看作两部分,真正的数据log系统和各种各样的query engine所有的一致性由log系统来保证,其他各种query engine不需要考虑一致性,安全性,只需要不停的从log系统来同步数据,如果数据丢失或crash可以从log系统replay来恢复可以看出kafka系统在linkedin中的重要地位,不光是d..._the log: what every software engineer should know about real-time data's uni

《伟大是熬出来的》冯仑与年轻人闲话人生之一-程序员宅基地

文章浏览阅读746次。伟大是熬出来的  目录  前言  引言 时间熬成伟大:领导者要像狼一样坚忍   第一章 内圣外王——领导者的心态修炼  1. 天纵英才的自信心  2. 上天揽月的企图心  3. 誓不回头的决心  4. 宠辱不惊的平常心  5. 换位思考的同理心  6. 激情四射的热心  第二章 日清日高——领导者的高效能修炼  7. 积极主动,想到做到  8. 合理掌控自己的时间和生命  9. 制定目标,马..._当狼拖着受伤的右腿逃生时,右腿会成为前进的阻碍,它会毫不犹豫撕咬断自己的腿, 以

有源光缆AOC知识百科汇总-程序员宅基地

文章浏览阅读285次。在当今的大数据时代,人们对高速度和高带宽的需求越来越大,迫切希望有一种新型产品来作为高性能计算和数据中心的主要传输媒质,所以有源光缆(AOC)在这种环境下诞生了。有源光缆究竟是什么呢?应用在哪些领域,有什么优势呢?易天将为您解答!有源光缆(Active Optical Cables,简称AOC)是两端装有光收发器件的光纤线缆,主要构成部件分为光路和电路两部分。作为一种高性能计..._aoc 光缆

浏览器代理服务器自动配置脚本设置方法-程序员宅基地

文章浏览阅读2.2k次。在“桌面”上按快捷键“Ctrl+R”,调出“运行”窗口。接着,在“打开”后的输入框中输入“Gpedit.msc”。并按“确定”按钮。如下图 找到“用户配置”下的“Windows设置”下的“Internet Explorer 维护”的“连接”,双击选择“自动浏览器配置”。如下图 选择“自动启动配置”,并在下面的“自动代理URL”中填写相应的PAC文件地址。如下..._設置proxy腳本