竞争型学习是神经网络中一种常用的无监督学习策略,在使用该策略时,网络的输出神经元相互竞争,每一时刻仅有一个竞争获胜的神经元被激活,其他神经元的状态被抑制,这种机制亦称为“胜者通吃”原则。

ART(Adaptive Resonance Theory,自适应谐振理论)网络是竞争型学习的重要代表。该网络由比较层、识别层、识别阈值和重置模块构成。其中,比较层负责接收输入样本,并将其传递给识别层;识别层每个神经元对应一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。

在接收到比较层的输入信号后,识别层神经元之间相互竞争以产生获胜神经元。

竞争方式:计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,距离最小者胜利。

获胜神经元将向其他识别层神经元发送信号,抑制其激活。

若输入向量与获胜神经元所对应的代表向量之间的相似度大于识别阈值时,则当前输入样本将被归为该代表向量所属类别。同时,网络连接权将会更新,使得以后在接收相似输入样本时该模式类会计算出更大的相似度,从而使得该获胜神经元有更大可能获胜。

若相似度不大于识别阈值,则重置模块将在识别层增设一个新的神经元,其代表向量就设置为当前输入向量。

则,识别阈值对ART网络的性能有重要影响。当识别阈值较高时,输入样本将会被分成比较多、比较精细的模式类,而如果识别阈值较低,则会产生比较少、比较粗略的模式类。

ART网络可以较好地缓解竞争型学习中的“可塑性-稳定性窘境”,可塑性是指神经网络要有学习新知识的能力,稳定性是指神经网络在学习新知识时要保持对旧知识的记忆。

这就使得ART网络具有一个很重要的优点:可进行增量学习在线学习

经过多年的研究和不断发展,ART网络已有3种形式:

  • ART1(处理双极型或二进制信号)

ART1网络结构由两层神经元构成两个子系统,分别为比较层C和识别层R,包含三种控制信号:复位信号Reset,逻辑控制信号G1和G2。

比较层C的结构为:

C层有n个神经元,每个接收来自三方面的信号:外界输入信号、R层获胜神经元的外星权向量的返回信号和控制信号G1。C层神经元的输出是根据2/3的多数表决原则产生的,输出值与三个信号中的多数信号值相同。

例如,网络开始运行时,G1=1,识别层尚未产生竞争获胜神经元,因此反馈信号为0。由2/3规则,C层输出应取决于输入信号,即C=X。当网络识别层出现反馈信号时,G1=0,由2/3规则,C层输出取决于输入信号与反馈信号的比较结果(),两者同时为1,则Ci为1,否则为0。可以看出控制信号G1的作用是使得比较层能够区分网络运行的不同阶段。网络开始运行阶段G1的作用使得C层对输入信号直接输出,之后G1的作用是使C层行使比较功能。

总之,R层的反馈信号对C的输出有调节作用。

比较层R的结构为:

R层有m个神经元,代表m个输入模式类,m可以动态增长,以设立新的模式类。

C层的输出向量c沿着R层神经元的内星权向量到达R层神经元,经过竞争在产生获胜神经元处指示本此输入模式的所属类别。获胜神经元输出为1,其余为0。R层每个神经元都对应两个权向量,一个是将C层前馈信号汇聚到R层的内星权向量,另一个则是将R层反馈信号散发到C层的外星权向量。

控制信号

信号G2检测输入模式X是否为0,它等于X各分量的逻辑或,如果xi全为0,则G2=0,否则G2=1。

,R0为R层输出向量各分量的逻辑"或"。当R层的输出向量的各分量全为0时且输入向量X不是0向量时, G1=1,否则等于0。

Reset信号的作用是使得R层竞争获取神经元无效。如果根据事先设定的测量表尊,Tj(外星权向量)与X未达到设定的相似度,表明两者未充分接近,于是系统发出Reset信号,使得竞争获胜神经元无效。

对于每一个输入,模式网络运行过程可归纳为四个阶段:

(1)匹配阶段

网络在没有输入之前处于等待状态,此时输入端X=0,因此G2=0,R0=0.

当输入不全为0的模式X时,G2=1,R0=0,使得G1= 1

G1=1时,允许输入模式直接从C层输出,并向前传至R层,与R层节点所对应的所有内星权向量Bj进行匹配计算:

选择具有最大匹配度(即具有最大点积)的竞争获胜节点:

使得获胜节点输出,其他节点输出为0.

(2) 比较阶段

R层输出信息通过外星权向量返回到C层。R层获胜节点所连接的外星权向量激活,从节点发出n个权值信号返回到C层的n个节点。此时R层输出不全为0,R0=1。则G1=0.。所以C层最新输出状态C取决于R层返回的外星权向量和网络输入模式X的比较结果。即 。比较结果C反映了在匹配阶段R层竞争排名第一的模式类的典型向量与当前输入模式X的相似程度,相似程度的大小用相似度N0反映,定义为:

设输入模式样本中的非零分量数为:

用于比较的参考门限为,在0-1范围内取值。

检查输入模式与模式类典型向量之间的相似性是否低于参考门限,

如果有,则X与C的相似度不满足要求,网络发出Reset信号使第一阶段的匹配失败,竞争获胜节点无效,网络进入搜索阶段

如果有,则X与获胜节点对应的类别模式非常接近,称X与Tj发生“共振”,第一阶段的匹配结果有效,网络进入学习阶段

(3)搜索阶段

网络发出Reset重置信号后即进入搜索阶段,重置信号的作用是使前面通过竞争获胜的神经元受到抑制,并且在后续过程中受到持续的抑制,直到输入一个新的模式为止。由于R层中的竞争获胜的神经元被抑制,从而再度出现R0=0,G1=1,因此网络又回到起始的匹配状态。

由于上次获胜的节点受到持续的抑制,此次获胜的必然是上次匹配程度排在第二的节点,将该节点对应的外星权向量与输入模式进行匹配。如果对R层所有的模式类,在比较阶段的相似度检查中都不满足要求,说明当前输入模式无类可归,需要在网络输出层增加一个节点来代表并存储该模式类,为此将内星权向量设计成当前输入模式向量,外星权向量Tj各分量全设为1.

(4)学习阶段

在学习阶段要对发生共振的获胜节点对应的模式类加强学习,使以后出现与该模式相似的输入样本时能获得更大的共振。

ART1网络可以用学习算法实现,也可以使用硬件实现。训练按照以下步骤进行:

(1)网络初始化

从C层向R层的内星权向量Bj赋予相同的较小数值,如

从R层向C层的外星权向量Tj各分量均赋1

(2)接受输入

给定一个输入模式,

(3)匹配度计算

对R层所有内星权向量Bj计算与输入模式的匹配度:

(4)选择最佳匹配节点

在R层有效输出节点集合j*内选择竞争获胜的最佳匹配节点j*,使得

(5) 相似度计算

R层获胜节点j*通过外星权向量送回获胜模式类的典型向量,C层输出信号给出对典型向量和X的比较结果,由此结果可计算出两向量的相似度:

(6)参考门限检验

如果有,则X与C的相似度不满足要求,本此竞争获胜节点无效,因此从R层有效输出节点j*中取消该节点,并使,训练转入步骤(7).

如果有,则X与应归为代表的模式类,转向步骤(8)调整权值。

(7)搜索匹配模式类

若有效输出节点集合j*不为空,转向步骤(4)重选匹配模式类;

若j*为空,需要在R层增加一个节点。设新增节点的序号为,应使B=X, ,i=1,2,...,n

此时有效输出节点集合为,转向步骤(2)输入新模式。

(8)调整网络权值

修改R层节点j*对应的权向量,网络的学习采用两种规则,

外星权向量的调整按以下规则:

内星权向量的调整按以下规则:

ART1 网络的实际应用--模式分类:

按照M=4,N=25设计网络,如下图A、B、C、D所示。

,取初始权值

bij=1/(1+n)=1/26,tij=1

第一步,输入模式,将R层的4个节点输出最大的一个命名为节点1,得到j*=1,有N0/N1=1,大于参考门限,故第一个模式被命名为第一类模式,修改节点1的外星权向量,得到

内星权向量为:

b1,1=b7,1=b13,1=b19,1=b25,1=2/11

其余仍为初始值1/26。对应输入模式,可以看出,以上调整结果将模式存储在神经元1的内外星权向量中。

第二步,输入模式时,R层只有一个已存储模式,故不存在类别归属的竞争,只需判断该模式与已存储模式的相似度,得N0/N1=5/9<0.7,则相似度不满足要求。由于R层已经没有其他已存储模式类可供选择,需动用一个新节点,命名为节点2,用以代表新模式

节点2的外星权向量为,内星权向量为

b1,2=b5,2=b7,2=b9,2=b13,2=b17,2=b19,2=b21,2=b25,2=2/19

其余仍为初始值1/26。

第3步,输入模式时,节点1和节点2进行竞争

节点1净输入为1.217 > 节点2净输入为1.101

节点1获胜。计算T1与Xc的相似度,N0/N1=5/13<0.7

节点1失效。网络应在其余的存储模式类节点中搜索,对于本例,只能取节点2作为获胜节点,于是计算T2与Xc的相似度,则N0/N1= 9/13<0.7

该结果仍不能满足要求,只能把模式视为第三类模式,并修改节点3的内外星权向量。

外星权向量T3=

内星权向量

b1,3=b5,3=b7,3=b9,3=b11,3=b12,3=b13,3=b14,3=b15,3=b17,3=b19,3=b21,3=b25,3=2/27

第四步,输入模式后,节点1、节点2和节点3参加竞争,

节点1的净输入为:1.371

节点2的净输入为:1.255

节点3的净输入为:1.117

节点1获胜,则计算N0/N1= 5/17<0.7,不符合相似度要求。节点1失效。

计算节点2,N0/N1=9/17<0.7,也不符合要求,节点2失效。

计算节点3,N0/N1=13/17>0.7,符合要求,于是将归入已属于第三类模式,并修改节点3的内外星权向量。

上述例子用代码实现:

import numpy as npclass ART_1():#初始化内星权向量矩阵B(C层向R层传入R的权值)和外星权向量矩阵T(R层反馈给C层)def set_B0_T0(self, n):b = 1 / (1 + n)B = []T = []for i in range(n):B.append(b)T.append(1)#numpy的mat函数将向量转化为矩阵B = np.mat(B)T = np.mat(T)#然后转置B = B.TT = T.Treturn B, T#竞争函数,选取R层竞争获胜的向量def Competitor(self, B, x):x = np.mat(x)#x(1,25)J = B.shape[1] #B(25,1)competition = []for j in range(J):compe = x * B[:, j]#x(1,25) B(25,1) compe(1,1)competition.append(compe[0, 0])competition = np.array(competition)j_order = np.argsort(-competition) #按大小排序,返回索引值j_order = list(j_order) #后面要用j_order循环所以又转回List类型return j_order#匹配,竞争成功的R层节点,通过外星权向量和x匹配,ruo0是阈值def Match(self, T, x, j, rou0):N0 = sum(x)x = np.mat(x)N = x * T[:, j]N = N[0, 0]rou = N/N0if rou >= rou0:matchBOOL = Trueelse:matchBOOL = Falsereturn matchBOOL#增加新节点def ADD_BT(self, B, T, x, n):b = xb = np.mat(b).TB = np.hstack((B,b))L=[]for i in range(len(x)):L.append(1)L = np.mat(L).TT = np.hstack((T, L))return B, T#分组def Group(self, B, T, x, j_order, Groups, rou0):success = 0n =len(x)jj = B.shape[1]for j in j_order:matchBooL = self.Match(T, x, j, rou0)#第一组Trueif matchBooL:B, T = self.AdjustBT(B, T, x, j)jj = j + 1if jj not in Groups:Groups[jj] = [x]else:Groups[jj].append(x)print(x, '分组成功,分在{}组'.format(jj))success = 1breakif success == 0:B, T = self.ADD_BT(B, T, x, jj-1)jj = B.shape[1]B, T = self.AdjustBT(B, T, x, jj-1)Groups[jj] = [x]print(x, '分组成功,分在{}组'.format(jj))return B, T, Groups#匹配成功后,更新内外星向量权值def AdjustBT(self, B, T, x, j):m = len(x)x = np.mat(x)xigama_TX = x * T[:, j] #x(1,25) T(25,1) ,xigama(1,1)xigama_TX = xigama_TX[0, 0]new_b = 1 / (0.5 + xigama_TX)for i in range(m):if B[i, j].any() == 1:B[i, j] = new_b #更新内星权向量T[:, j] = np.multiply(T[:,j], x.T)#更新外星权向量return B, T

主函数为:

if __name__ == '__main__':rou0 = 0.7X = [[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]]n = len(X) #输入四类模式m = len(X[0]) #取模式的维数art = ART_1()#初始化分组Groups = {}#初始化B,TB, T = art.set_B0_T0(m)#对每一个x进行判断归类for x in X:j_order = art.Competitor(B,x)B, T, Groups = art.Group(B, T, x, j_order, Groups, rou0)

rho=0.7的结果为:

剩下两种形式为ART2网络和ART3网络,后续将继续介绍。

机器学习算法——神经网络5(ART 1网络)相关推荐

  1. 机器学习算法---神经网络

    神经网络 神经网络(也称之为人工神经网络,ANN)算法是80年代机器学习界非常流行的算法,不过在90年代中途衰落.现在,携着"深度学习"之势,神经网络重装归来,重新成为最强大的机器 ...

  2. 【机器学习基础】数学推导+纯Python实现机器学习算法12:贝叶斯网络

    Python机器学习算法实现 Author:louwill 在上一讲中,我们讲到了经典的朴素贝叶斯算法.朴素贝叶斯的一大特点就是特征的条件独立假设,但在现实情况下,条件独立这个假设通常过于严格,在实际 ...

  3. 简单易学的机器学习算法——神经网络之BP神经网络

    一.BP神经网络的概念     BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的.具体来说,对于如下的只含一个隐层的神经网络模型: (三层BP神经网络模型) ...

  4. 机器学习算法-10贝叶斯信念网络、聚类算法、基于密度的方法DBSCAN

    贝叶斯信念神经网络 bayes belief network (BNN), 朴素贝叶斯分类器需要特征之间相互独立的强条件,制约了模型的适用, 用有向无环图表达变量之间的依赖关系,变量用节点表示,依赖关 ...

  5. 数学推导+纯Python实现机器学习算法12:贝叶斯网络

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在上一讲中,我们讲到了经典的朴素贝叶斯算法.朴素贝叶斯的一大特点就 ...

  6. 数学之路(3)-机器学习(3)-机器学习算法-神经网络[19]

    我们也可以尝试用多层感知器网络对一组数据建立模型,在输入与输出数据之间建立非线性关系,用神经网络拟合输出数据,训练好后,输入其它值,能得到一个较精确的仿真输出数据 下面是钢包使用次数与容积实测数据 钢 ...

  7. 机器学习-卷积神经网络之深度残差网络(三)

    背景介绍:MNIST数据集识别黑白的手写数字图片,不适合彩色模型的RGB三通道图片.用深度残差网络学习多通道图片. 简单介绍一下深度残差网络:普通的深度网络随着网络深度的加深,拟合效果可能会越来越好, ...

  8. 数学之路(3)-机器学习(3)-机器学习算法-神经网络[17]

    神经网络既然可以进行函数拟合,也可以进行数据拟合,将输入x做为函数的自变量,将要输出的数据y做为函数f(x)的输出. y=f(x),我们将x送入神经网络做为输入,然后将y做为目标训练值,我们下面进行一 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

最新文章

  1. RESTful之认证Authentication
  2. 滴滴ElasticSearch平台跨版本升级以及平台重构之路
  3. layuiadmin上手好难_新手自学板绘先学SAI还是PS好?零基础绘画入门需知!
  4. hdu 2602 01背包入门
  5. css background-position
  6. 数学中的一朵“奇葩”——四元数
  7. FDR错误发现率-P值校正学习
  8. ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)
  9. 智能网联汽车测试场景数据车载采集平台搭建要求及方法
  10. Springboot网络微小说的设计与实现毕业设计源码031758
  11. 视频教程-EOS 入门实战-区块链
  12. javascript 中判断div背景颜色
  13. 从 Aave 到 Yearn:一文梳理 DeFi 中的「蓝筹股」
  14. 王者荣耀战力查询微信小程序源码下载支持安卓苹果微信Q等多区查询
  15. 平板android怎么玩电脑游戏,Android平板模拟家用主机游戏教程_小米 平板_平板电脑新闻-中关村在线...
  16. 【CPU微架构】分支预测(二)常用分支预测算法
  17. pandas 中上下两行相减(隔行相减) -- shift函数的使用
  18. 中国民生银行天眼日志平台架构演进的平凡之路
  19. uniapp 中 通过经纬度获取地址详情(vue)
  20. 分分钟玩转multiprocessing多进程编程?

热门文章

  1. 【编程语言】Scala 函数式编程
  2. 微信支付回调通知实现
  3. 接口请求一般放在哪个生命周期中?
  4. 史上最全Apidoc文档生成详解
  5. 解决8K超高清视频内容匮乏难题,博冠助力百城千屏活动
  6. 《C++新经典Linux C++通信架构实战》第2章 进入Nginx之门
  7. Friendship of Frog
  8. #4306. 贪玩蓝月
  9. 树莓派c语言编程点亮灯,树莓派点灯程序
  10. 非自锁单按钮控制启停电路