1987年,美国学者Robert Hecht-Nielsen提出了对偶传播神经网络模型 (Counter Propagation Network,CPN),CPN最早是用来实现样本选择匹配系统的。CPN 网能存储二进制或模拟值的模式对,因此这种网络模型也可用于联想存储、模式分类、函数逼近、统计分析和数据压缩等用途。

1.    网络结构与运行原理

网络结构如图所示,各层之间的神经元全互联连接。从拓扑结构看,CPN网与三层BP网络相近,但实际上CPN是由自组织网和Grossberg外星网组合而成。隐层为竞争层,采用无导师的竞争学习规则,而输出层为Grossberg层,采用有导师信号的Widrow-Hoff规则或Grossberg规则学习。

网络各层按两种学习规则训练好之后,运行阶段首先向网络送入输入变量,隐含层对这些输入进行竞争计算,获胜者成为当前输入模式类的代表,同时该神经元成为如下图(a)所示的活跃神经元,输出值为1而其余神经元处于非活跃状态,输出值为0。竞争取胜的隐含神经元激励输出层神经元,使其产生如下图(b)所示的输出模式。由于竞争失败的神经元输出为0,不参与输出层的整合。因此输出就由竞争胜利的神经元的外星权重确定。

2.    学习算法

网络学习分为两个阶段:第一阶段是竞争学习算法对隐含层神经元的内星权向量进行训练;第二阶段是采用外星学习算法对隐含层的神经元的外星权向量进行训练。

因为内星权向量采用的是竞争学习规则,跟前几篇博文所介绍的算法步骤基本类似,这里不做介绍,值得说明的是竞争算法并不设置优胜临域,只对获胜神经元的内星权向量进行调节。

下面重点介绍一下外星权向量的训练步骤:

(1)   输入一个模式以及对应的期望输入,计算网络隐节点净输入,隐节点的内星权向量采用上一阶段中训练结果。

(2)   确定获胜神经元使其输出为1。

(3)   调整隐含层到输出层的外星权向量,调整规则如下:

β为外星规则学习速率,为随时间下降的退火函数。O(t)为输出层神经元的输出值。

由以上规则可知,只有获胜神经元的外星权向量得到调整,调整的目的是使外星权向量不断靠近并等于期望输出,从而将该输出编码到外星权向量中。

3.    改进CPN网

(1)   双获胜神经元CPN

指的是在完成训练后的运行阶段允许隐层有两个神经元同时竞争获得胜利,这两个获胜神经元均取值为1,其他神经元则取值为0。于是有两个获胜神经元同时影响网络输出。下图给出了一个例子,表明了CPN网能对复合输入模式包含的所有训练样本对应的输出进行线性叠加,这种能力对于图像的叠加等应用十分合适。

(2)   双向CPN网

将CPN网的输入层和输出层各自分为两组,如下图所示。双向CPN网的优点是可以同时学习两个函数,例如:Y=f
(X);X′=f
(Y′)

当两个函数互逆时,有X =X′,Y
=Y′。双向CPN可用于数据压缩与解压缩,可将其中一个函数f作为压缩函数,将其逆函数g作为解压缩函数。

事实上,双向CPN网并不要求两个互逆函数是解析表达的,更一般的情况是f和g是互逆的映射关系,从而可利用双向CPN实现互联想。

4.    CPN网应用

下图给出了CPN网用于烟叶颜色模式分类的情况,输入样本分布在下图(a)所示的三维颜色空间中,该空间的每个点用一个三维向量表示,各分量分别代表烟叶的平均色调H,平均亮度L和平均饱和度S。可以看出颜色模式分为4类,分别对应红棕色,橘黄色,柠檬色和青黄色。下图(b)给出了CPN网络结构,隐层共设了10个神经元,输出层设4个神经元,学习速率为随训练时间下降的函数,经过2000次递归之后,网络分类的正确率达到96%。

*************************************

2015-8-15

艺少

对偶传播神经网络(CPN)的更多相关文章

  1. AI 反向传播神经网络

    反向传播(Back Propagation,简称BP)神经网络

  2. Python3 反向传播神经网络-Min-Batch(根据吴恩达课程讲解编写)

    # -*- coding: utf-8 -*- """ Created on Sat Jan 20 13:47:54 2018 @author: markli " ...

  3. 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 4—反向传播神经网络

    课程笔记 Coursera—Andrew Ng机器学习—课程笔记 Lecture 9_Neural Networks learning 作业说明 Exercise 4,Week 5,实现反向传播 ba ...

  4. 第四节课-反向传播&&神经网络1

    2017-08-14 这节课的主要内容是反向传播的介绍,非常的详细,还有神经网络的部分介绍,比较简短. 首先是对求导,梯度的求解.反向传播的核心就是将函数进行分解,分段求导,前向计算损失,反向计算各个 ...

  5. 【神经网络】BP反向传播神经网络

    BP算法细节 参数说明:假设有n层.J表示代价函数,和上面的E是同样的意思,只不过用不同的字母写而已. 分析:要想知道第l层的第i个结点的残差,必须知道层已经计算出来了残差,你只要把后面一层的每个结点 ...

  6. 反向传播神经网络(BP)

    实验部分: ①输入.输出矢量及问题的阐述 由题意输入变量取值范围为e={-2,-1,0,1,2}和ec={-2,-1,0,1,2},则输入矢量有25种情况,分别如下所示: 则由T=int((e+ec) ...

  7. 人工神经网络ANNs

    参考: 1. Stanford前向传播神经网络Wiki 2. Stanford后向传播Wiki 3. 神经网络CSDN blog 4. 感知器 5. 线性规划 6. Logistic回归模型 内容: ...

  8. BP神经网络

    秋招刚结束,这俩月没事就学习下斯坦福大学公开课,想学习一下深度学习(这年头不会DL,都不敢说自己懂机器学习),目前学到了神经网络部分,学习起来有点吃力,把之前学的BP(back-progagation ...

  9. R语言-神经网络包RSNNS

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

随机推荐

  1. zabbix 内置key说明

    原文参考:https://blog.csdn.net/whs_321/article/details/52939263 一.简介 Zabbix 内置了很多丰富的key,使得我们在添加linux os模 ...

  2. esp8266 + dht11 + 两路继电器 实现pc远程控制开关机温度监控.并配置zabbix监控

    事因:翻了翻自己之前的硬件小箱子,几年前买的一些小东西,想用用起来. 正好我有些数据放在机器上,有时候需要机器启动,我使用完成后在断开. 其实网络唤醒也能做到,但是机器一直给电也不好,在说家里有小孩A ...

  3. PHP-FPM远程代码执行漏洞(CVE-2019-11043)

    0x00 简介 在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常, ...

  4. 小程序wepy购物车的逻辑

    <!-- 剩余可销售商品数量 大于 0,且购买未达上限--> <view wx:if="{{(detaildata.boughtNum < detaildata.bu ...

  5. switchcase的用法

    <script> var level = prompt("请输入员工评级"); var salary = 5000; switch (level) { case &qu ...

  6. ubuntu之路——day11.6 多任务学习

    在迁移学习transfer learning中,你的步骤是串行的sequential process 在多任务学习multi-task learning中,你试图让单个神经网络同时做几件事情,然后这里 ...

  7. Java8中LocalDate的使用---项目中日期处理

    // 获取当前日期 LocalDate now = LocalDate.now(); // 设置日期 LocalDate now2 = LocalDate.of(2099, 2, 28); // 解析 ...

  8. 教你如何使用QBDI动态二进制检测框架

    工具介绍 QBDI 全名为 QuarkslaB Dynamicbinary Instrumentation,它是一个模块化的跨平台以及跨架构的 DBI 框架.该工具目前支持 Linux.macOS.A ...

  9. linux中截取字段与#、$区别

    1.Linux shell 截取字符变量的前8位 实现方法有如下几种: expr substr “$a” 1 8 echo $a|awk ‘{print substr(,1,8)}’ echo $a| ...

  10. linux内核中的电源管理接口

    1. pm_runtime_enable/pm_runtime_disable 使能/禁止runtime PM,分别对dev->power.disable_depth执行++和--操作,这个变量 ...