使用FORCE训练的脉冲神经网络中的监督学习(Matlab代码实现)

news2024/10/7 10:15:13

       目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码


💥1 概述

1.1 脉冲神经网络简介

脉冲神经网络 (SNN) 属于第三代神经网络模型,实现了更高级的生物神经模拟水平。除了神经元和突触状态之外,SNN 还将时间概念纳入了其操作之中,是一种模拟大脑神经元动力学的一类很有前途的模型。

那么什么是第一代和第二代神经网络模型呢?

1.1.1 第一代神经网络

第一代神经网络又称为感知器,在1950年左右被提出来,它的算法只有两层,输入层输出层,主要是线性结构。它不能解决线性不可分的问题,对稍微复杂一些的函数都无能为力,如异或操作。

1.1.2 第二代神经网络:BP 神经网络

为了解决第一代神经网络的缺陷,在1980年左右 Rumelhart、Williams 等人提出第二代神经网络多层感知器 (MLP)。和第一代神经网络相比,第二代在输入层之间有多个隐含层的感知机,可以引入一些非线性的结构,解决了之前无法模拟异或逻辑的缺陷。

第二代神经网络让科学家们发现神经网络的层数直接决定了它对现实的表达能力,但是随着层数的增加,优化函数愈发容易出现局部最优解的现象,由于存在梯度消失的问题,深层网络往往难以训练,效果还不如浅层网络。

所有对目前机器学习有所了解的人都听说过这样一个事实:目前的人工神经网络是第二代神经网络。它们通常是全连接的,接收连续的值,输出连续的值。尽管当代神经网络已经让我们在很多领域中实现了突破,但它们在生物学上是不精确的,其实并不能模仿生物大脑神经元的运作机制。

1.1.3 第三代神经网络:脉冲神经网络

第三代神经网络,脉冲神经网络 (Spiking Neural Network,SNN) ,旨在弥合神经科学和机器学习之间的差距,使用最拟合生物神经元机制的模型来进行计算,更接近生物神经元机制。脉冲神经网络与目前流行的神经网络和机器学习方法有着根本上的不同。SNN 使用脉冲——这是一种发生在时间点上的离散事件——而非常见的连续值。每个峰值由代表生物过程的微分方程表示出来,其中最重要的是神经元的膜电位。本质上,一旦神经元达到了某一电位,脉冲就会出现,随后达到电位的神经元会被重置。对此,最常见的模型是 Leaky Integrate-And-Fire (LIF) 模型。此外,SNN 通常是稀疏连接的,并会利用特殊的网络拓扑。

📚2 运行结果

主函数部分代码:

clear allclose allclc%% Fixed parameters across all simulationsdt = 0.00001; %time step N = 2000; %Network Sizetd = 0.02; %decay time tr = 0.002; %Rise time %% T = 15; tmin = 5; tcrit = 10; nt = round(T/dt); tx = (1:1:nt)*dt;  xz = sin(2*tx*pi*5)'; G = 10; Q = 10^4; %% m = min(size(xz)); %dimensionality of teacher E = Q*(2*rand(N,m)-1); %encodersBPhi = zeros(N,m);  %Decoders%% Compute Neuronal Intercepts and Tuning Curves initial = 0;p = 0.1; %Sparse Coupling OMEGA = G*randn(N,N).*(rand(N,N)<p)/(sqrt(N)*p); %Random initial weight matrix %Set the sample row mean of the weight matrix to be 0 to strictly enforce%balance.  for i = 1:1:N     QS = find(abs(OMEGA(i,:))>0);    OMEGA(i,QS) = OMEGA(i,QS) - sum(OMEGA(i,QS))/length(QS);end%% Storage Matrices and Initialization store = 10; %don't store every time step, saves time.  current = zeros(nt,m);  %storage variable for output current IPSC = zeros(N,1); %post synaptic current h = zeros(N,1); r = zeros(N,1); hr = zeros(N,1); JD = 0*IPSC;vpeak = pi; %peak and resetvreset = -pi; v = vreset + (vpeak-vreset)*rand(N,1); %initialze voltage v_ = v; %temporary storage variable for integration j = 1;time = zeros(round(nt/store),1);RECB = zeros(5,round(2*round(nt/store)));REC = zeros(10,round(nt/store));tspike = zeros(8*nt,2);ns = 0;ticSD = 0; BPhi = zeros(N,m);z = zeros(m,1);step = 50; %Sets the frequency of RLS  imin = round(tmin/dt); %Start RLSicrit = round((tcrit/dt)); %Stop RLS  Pinv = eye(N)*dt;  i = 1; %%  ilast = i;  %icrit = ilast;for i = ilast :1:nt JX = IPSC + E*z; %current dv = 1-cos(v) + (1+cos(v)).*JX*(pi)^2;  %dv v = v_ + dt*(dv); %Euler integration plus refractory period.  index = find(v>=vpeak);     if length(index)>0JD = sum(OMEGA(:,index),2); %compute the increase in current due to spiking  tspike(ns+1:ns+length(index),:) = [index,0*index+dt*i];ns = ns + length(index); endif tr == 0     IPSC = IPSC*exp(-dt/td)+   JD*(length(index)>0)/(td);    r = r *exp(-dt/td) + (v>=vpeak)/td;elseIPSC = IPSC*exp(-dt/tr) + h*dt;h = h*exp(-dt/td) + JD*(length(index)>0)/(tr*td);  %Integrate the currentr = r*exp(-dt/tr) + hr*dt; hr = hr*exp(-dt/td) + (v>=vpeak)/(tr*td);endv = v + (vreset - v).*(v>=vpeak); %reset with spike time interpolant implemented.  v_ = v;  %only store stuff every index variable.     z = BPhi'*r;err = z - xz(i,:)';if mod(i,step)==1if i > imin  if i < icrit    cd = Pinv*r;       BPhi = BPhi - (cd*err');   Pinv = Pinv - ((cd)*(cd'))/( 1 + (r')*(cd)); end end end   if mod(i,store) == 1;        j = j + 1; time(j,:) = dt*i;        current(j,:) = z; REC(:,j) = v(1:10); RECB(:,j) = BPhi(1:5,1);    endif mod(i,round(0.1/dt))==1figure(1)drawnow plot(tx(1:1:i),xz(1:1:i,:),'k','LineWidth',2), hold onplot(time(1:1:j),current(1:1:j,:),'b--','LineWidth',2), hold offxlim([dt*i-1,dt*i])xlabel('Time')ylabel('x(t)') figure(2)plot(time(1:1:j),RECB(1:5,1:1:j),'.') xlabel('Time')ylabel('\phi_j') figure(3)plot(tspike(1:1:ns,2), tspike(1:1:ns,1),'k.')ylim([0,100])xlabel('Time')ylabel('Neuron Index')end

🎉3 参考文献

​[1]李连江. 基于GPU的脉冲神经网络学习研究[D].华中科技大学,2015.

👨‍💻4 Matlab代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.知识图谱概念和相关技术简介[知识抽取、知识融合、知识推理方法简述],典型应用案例介绍国内落地产品介绍。一份完整的入门指南,带你快速掌握KG知识,芜湖起飞!

1. 知识图谱(KG)的概念 知识图谱(KG)得益于Web的发展(更多的是数据层面),有着来源于KR、NLP、Web、AI多个方面的基因。知识图谱是2012年后的提法,基础还是语义网和本体论。 知识图谱的本质包含: 知识表示——Knowledge Representation基于知识表示的知识库——Knowledge…

OpenGL入门demo

开发环境visual studio 2022 preview版本&#xff0c;x64版本安装OpenGL首先OpenGL是windows系统里面自带的&#xff0c;我们可以不用去下载最新版。直接在此基础上配置OpenGL的三个扩展库glew&#xff0c;glfw&#xff0c;flut就可以了。下载OpenGL的开发依赖类库&#xff1a;…

【java】Spring Cloud --Spring Cloud Alibaba 微服务解决方案

文章目录1、Spring Cloud Alibaba 是什么先说说 Spring CloudSpring Cloud Alibaba和Spring Cloud 的区别和联系Spring Cloud Alibaba2、Spring Cloud Alibaba 包含组件阿里开源组件阿里商业化组件集成 Spring Cloud 组件3、Spring Cloud Alibaba 功能服务注册与发现支持多协议…

python-剑指 Offer 42. 连续子数组的最大和【动态规划经典题解】

一.题目 剑指 Offer 42. 连续子数组的最大和 描述&#xff1a;输入一个整型数组&#xff0c;数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例1: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2…

html初识

HTML认知 文章目录HTML认知语法规范注释标签组成和关系标签的关系标签学习排版系列标签**标题标签****段落标签**换行标签水平线标签文本格式化标签媒体标签图片标签src 目标图片的路径alt 替换文本title 图片的标题width 宽度 / height 高度路径绝对路径相对路径&#xff08;常…

feature分支开发到一半时切换到bugfix分支,如何暂存数据

1、解决思路在工作过程中&#xff0c;当你正在当前feature分支上进行功能的开发&#xff0c;突然来了一个bug&#xff0c;要创建一个bugfix修复分支进行修复。但是当前feature分支你只开发了一半&#xff0c;显然你去提当前的半成品是不合适的&#xff0c;我们如何处理此类问题…

面试题-----JDBC单例模式(懒汉式和饿汉式)

1.单例概念 作为一种常见的设计模式&#xff0c;单例模式的设计概念是"两个私有,一个公有",即私有属性/成员变量和私有构造,以及公有方法,常用于在整个程序中仅调用一次的代码。 2.具体操作 从单例模式的描述来看,单例模式并不能用于多次频繁调用的设计中,而更适用…

【Linux】进程状态|优先级|进程切换|环境变量

文章目录1. 运行队列和运行状态2. 进程状态3. 两种特殊的进程僵尸进程孤儿进程4. 进程优先级5. 进程切换进程特性进程切换6. 环境变量的基本概念7. PATH环境变量8. 设置和获取环境变量9. 命令行参数1. 运行队列和运行状态 &#x1f495; 运行队列&#xff1a; 进程是如何在CP…

如何在Net6.0里配置多版本支持并支持注释说明的Swagger

一、前言现在已经进入了微服务的开发时代了&#xff0c;在这个时代&#xff0c;如果有人问你什么是微服务&#xff0c;你说不知道&#xff0c;就有点太丢人了&#xff0c;别人会有异样的眼光看你&#xff0c;俗话说&#xff1a;唾液淹死人。没办法&#xff0c;我们只能去学习新…

一款 Linux、数据库、Redis、MongoDB 统一管理平台,这个开源平台非常好用!

一、开源项目简介基于DDD分层实现的web版 linux(终端 文件 脚本 进程)、数据库&#xff08;mysql postgres&#xff09;、redis(单机 集群)、mongo统一管理操作平台二、开源协议使用Apache-2.0开源协议三、界面展示&#xff08;系统核心功能截图&#xff09;四、服务部署&#…

Windows 平台 oracle11g 单机 打补丁(33883353)

一、从oracle官网下载最新补丁包和打包工具 二、 对数据库及软件作全备 略 三、解压p33883353_112040_MSWIN-x86-64.zip 在33883353文件夹中打开README.html 2.1 OPatch Utility You must use the OPatch utility version 11.2.0.3.34 or later to apply this patch. 必须…

Maven 依赖-镜像仓库替换为 -- 阿里云镜像仓库(飞快实现 pom 引入)

在本地 maven 的 setting 配置文件中加上阿里云镜像地址就行了&#xff1a;新增配置内容&#xff1a;<!-- 阿里镜像仓库 --><mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus…

高项--十大管理、47个过程、五大过程组

十大管理、47个过程、五大过程组【联想记忆】 文章目录 十大管理、47个过程、五大过程组【联想记忆】 十大管理 1.十大管理是哪几个&#xff1f; 2.十大管理记忆口诀&#xff1a; 3.各大管理记忆口诀&#xff1a; 4.十大管理、十大管理的47个过程、47个过程所属的五大过程组&a…

一篇文章搞定linux网络模型

网络协议感觉晦涩难懂&#xff1f;什么七层网络模型&#xff1f;又五层网络模型&#xff1f;又四层网络模型&#xff1f;TCP/IP协议是个啥&#xff1f;UDP是啥&#xff1f;什么是三次握手&#xff1f;什么是四次挥手&#xff1f;tcpdump听说是抓包的&#xff0c;怎么用&#xf…

期末综合考试

一、概率论1、全概率公式、贝叶斯公式应用2、期望、方差、协方差的定义以及性质证明(1) 期望(2) 方差(3) 协方差二、数理统计1、参数估计(1) 矩估计(2) 最大似然估计(3) 综合例题一、概率论 1、全概率公式、贝叶斯公式应用 记住标黄的两段&#xff0c;上考场直接套数据&#x…

相交链表【2.23】

题目&#xff1a;给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;…

SYSU程设c++(第一周) io流、命名空间、引用

理论题&#xff1a; 1.std::cout<<0a; 的输出是97 &#xff08;0转换了类型成int&#xff0c;‘a变成askll码&#xff09; 2.std::cout<<0"12.34";的输出是12.34 &#xff08;0无用&#xff0c;忽略) 3.std::cout<<1"12.34";则编译错…

批量修改word中的表格属性

背景&#xff1a;写接口文档&#xff0c;程序导出的接口文档格式不符合标书的需要&#xff0c;要批量设置word表格及文本————————————————————————————————方法&#xff1a;我们可以通过word的宏观能&#xff0c;实现批量设置。1说明&#xff…

表格内容过多时单行/多行显示

分析 单行多行显示涉及到 table-layout: fixed; 这个属性&#xff0c;默认状态下的属性值是 auto &#xff08;自动表格布局&#xff09;&#xff0c;两种不同的属性值区别如下&#xff1a; 方法 我在设置表格内容单行/多行显示时采用的方法&#xff1a; table 添加的样式&a…

JS - 原型对象、原型链是什么

一 阅读掘金 https://juejin.cn/post/7007416743215759373 https://juejin.cn/post/7007416743215759373 二 阅读掘金小册原型知识点 原型 涉及面试题&#xff1a;如何理解原型&#xff1f;如何理解原型链&#xff1f; 当我们创建一个对象时 let obj { age: 25 }&#xff0…