前段时间研查阅文献时的matlab方面的探索,这一部分主要参考文献为
[34] 朱娟. 基于尖峰神经元模型的机器人学习方法研究 [D]; 南京理工大学, .
1.1 模型建立
1.1.1 脉冲神经网络神经元
为了去了解大脑是如何工作的,我们需要把结合实验学习动物和人类神经系统和大规模脑模型的数值研究结合起来。突触其实就是神经元信息传递的关键部分,是前神经元的轴突和后神经元的树突相连接的部分,突触可以分为化学突触和电突触,在研究中化学突触要比电突触常见。当神经冲动到达突触前膜时,这时突触前膜上的Ca2+通道就会被其触发并且被打开,这时细胞外的Ca2+就会进入到突触前部,接着突触小泡向突触前膜移动并将内部的神经递质释放到突触间隙。有一部分的神经递质就会和突触后膜上相应的受体相结合,从而使受体相关的门控通道打开,相应的离子由通道进入突触后部,从而使突触后神经元的活动受到影响。突触信息的传递过程可归纳为如图:
突触信息传递的特点可归纳为:
(1)信息传递一般都有延时
(2)兴奋性、抑制性
(3)存在不应期
(4)可塑性:突触传递信息的强度是可以改变的,具有学习能力。可塑性是学习和记忆的基础。
(5)对信息的整合有两种方式,时间累加和空间累加。
(6)具有遗忘和疲劳
(7)信息传递是不可逆的:脉冲只能从突触前神经元传到突触后神经元。
朱娟等人[最前面提到的那篇]分析比较了第三代与之前的神经元模型,深入的对尖峰神经元的三种代表性模型进行仿真并比较各自的优缺点,在以较小的复杂度达到较高的生物学的真实性基础上选择了适合本文的Izhikevich模型,重点讨论了Izhikevich模型,对常见的6种尖峰进行仿真研究,深入了解了模型中各个参数的作用。
门电路可以看成是计算机最基本的一个单元,故而神经元也就可以当作是神经系统的一个基本单元。但是神经元有的功能却远远比门电路来的复杂。目前神经元模型有一百多种,表现出了神经元的各种特性(时空总和、阀值、不应期、适应性以及可塑性)。
由于研究的最终目的有所不同,所以对于神经元模型的研究方向也就不同主要有两点。一是,单神经元的研究,这时就希望尽最大努力去复现神经元本身的属性。二是,由神经元组成功能复杂的神经网络,所以用到的神经元数目比较多,为了研究的方便,我们要求神经元保留信号处理能力的前提下能够简化神经元模型。神经元模型的一些特点如下:
(1)神经元的输入有很多但是输出端口只有一个。
(2)神经元的阀值是一个定值。
(3)神经元是非时变的。
(4)神经元产生脉冲的条件:
1)每个兴奋型输入为+1表示,抑制性输入用-1表示,当输入的总和大于固定的阀值时神经元这时才会产生脉冲信号。
2)没有抑制性输入,只有兴奋型输入时,当输入总和超过阀值时,神经元才会产生脉冲。
下面着重介绍两种模型,漏积分模型和尖峰神经元模型仿真来研究为什么本文要采用尖峰神经元模型
(1)漏积分神经元模型
现在大部分神经网络中的神经元都采用漏积分模型来研究如式
其中x表示神经元的状态,u用来表示神经元的输入,y代表神经元的输出,k,m,e三者是模型的参数,H为阶跃函数。仿真设置:输入u为阶跃输入, k=1,m=1,e=0.2 得到输出曲线如所示:
(2)尖峰神经元模型
尖峰神经元模型种类很多这里选择Izhikevich模型如式来研究
v为膜电位,u表示恢复变量,膜电流则用I代表 a,b,c,d为参数。仿真设置:a=0.02,b=0.25,c=-65,I=10得到的响应如图所示
可以看出漏积分神经元模型主要是将信息编码放在输出信号的幅值中。而尖峰神经元则不是,它是将信息编码在神经元的动作电位的频率中,因此这种模型对于模拟真实神经元的放电特性更加逼真
1.1.2 几种代表性的尖峰神经元模型的比较
尖峰神经元模型最早的提出者是Hodgkin和Huxley。根据脉冲神经元的响应模式和生化模型,学者们提出了一些用于模拟脉冲神经元行为的数学模型,一般将提出三种具体的脉冲神经元模型——Itegrate&Fire、Izhikevich以及Hodgkin-huxley三种模型。并对这三种模型的表达式进行对比和仿真研究:
(1) Integrate&Fire模型
式中 v为膜电位, I为膜电流, a,b,c,v_为参数。IF模型通过式可以看出是一维方程而且只有一个v变量,它主要通过线性微分方程来描述神经元,它的阀值以及复位机制均是固定的。
结论:通过仿真可以发现IF模型的神经元没有不应期(所谓的不应期是指在神经元恢复到静息状态前,它不能通过发放动作电位来对刺激做出一定的响应,这段恢复时间被称为神经元的不应期,一般为 ),因而不够精确不能展现神经元最基本的特性。而且通过改变参数不会出现神经元的峰放电以及簇放电等特性。
(2)Izhikevich模型
模型如式(2.2)所示,仿真参数设置:a=0.02,b=0.25,c=-65,I=10
结论:通过图可以看出神经元模型存在不应期,而且随着电流强度的变大尖峰频率也在增加。当刺激超过阀值时神经元会产生始终响应,使兴奋与静息交替产生,而且兴奋的周期远远小于静息的周期,这一点与真实神经系统受到外界刺激时作出的响应相符合。
(3)Hodgkin-Huxley模型
其中
理解就好,剩下的可以看文献
最终结论:IF只有1个变量,数值模拟比较简单,所以它适合于数学分析,但是却无法反应相位刺激、爆发式点火和回荡反应等行为。实质上这种模型不能算作真正的脉冲神经元模型,当膜电位到达阀值时,神经元产生的脉冲都是假想的。H-H模型含有4个变量,参数最为丰富,所以它对于模型真实神经元的某些特性(例如,对于电流脉冲的响应以及阀值效应的产生)是很精确的。所以我们一般用其研究单个的神经细胞的行为与特性,对于很多的神经元构成的神经系统却很少使用这种模型。Izhikevich模型含有2个变量,它在计算复杂度和生物学上的真实性两者间进行了折中。
因为我们要发展由尖峰神经元组成的这种大规模的脑模型,我们就必须要做到两个看似相互排斥的要求间的折中:单一神经元模型必须是简单的计算,但真正的生物神经元有产生丰富的放电模式能力的表现。使用H-H模型是最精确的,但是计算比较困难,因为我们仅仅可以实时的模拟极少数的神经元。相比之下,Integrate&Fire模型计算速度最快,而Izhikevich模型结合了H-H模型生理学特性和Integrate&Fire模型计算简单特性。取决于四个参数,该模型再现了神经元已知类型的尖峰。Izhikevich对神经元不同输入发生的分叉分类,并揭示了神经系统复杂行为的非线性动力学机制。
6种神经元比较:
通过图可以看出通过改变c,d参数可以使神经元实现簇放电。其中,u 和 v是无量纲变量, a,b,c,d是四个无量纲参数, v作为神经元的膜电位, u为神经元恢复变量,表示神经元膜上Na+通道关闭而K+通道打开,这时Na+的膜透性迅速下降而K+的膜透性却迅速增强,膜电压恢复到静息电位的过程。当神经元产生动作电位,此时膜电位v达到峰值30mV时,膜电位和恢复变量将按照式2变化。 I是突触电流,即注入电流。模型各个参数的作用:
a:其实是一个时间因子主要用来反映恢复变量u,而u的恢复速度就是由a决定的,a越小表示u恢复的越快,尖峰脉冲的频率也就越高,a的一个典型值为0.02。
b:恢复变量对于v波动时的敏感度就是由b反映的,但是有一个条件就是v必须在阀值下。b 越大,u和v的联系就越强,阀值下的震荡就越强烈并且产生尖峰序列的阀值就越小,典型值为0.2。
c:在动作电位产生后,膜电位恢复值v的大小条件是由快速高阀值K+电导引起,典型值为-65mV 。
d:动作电位产生后由K+ 电导和Na+电导引起的恢复变量u的值。
0.04v*v+5v=140这一部分是通过对神经元的尖峰过程动态拟合而来的,膜电位的单位为 ,时间的单位为mV 。细胞膜的静息电位一般为-70~-60mV ,具体情况则要由参数b决定。在大多数的神经细胞中,一般阀值是不固定的,它受到前面神经细胞状态的影响。阈值电位的变化有个范围一般是-55~-40mV。
神经元模型介绍了动态突触和主动树突结合功能的优点。神经元能够通过隐式“延迟”机制系统最大化其响应并检测特定的时间序列。这些机制基于对突触动力学和神经活动特性产生的突触后电位的调制。学习算法会调整“延迟”机制,以使它们针对输入尖峰序列的特定时间序列产生最大的响应(就躯体处的膜电位而言)。[20]
1.2 SNN仿真
这一部分的结果当时用了几天的时间调出来,但是最后也没有用到(需要的计算量其实并不小),仅仅提供仿真思路参考,也没法用代码解释,放几张图之后随缘上传源文件吧。
六个模块对应六种模型:
源代码:绘图部分因为其他需要注释掉了微分量,如果需要自行修改即可。
% 脉冲神经网络matlab实现% 朱娟. 基于尖峰神经元模型的机器人学习方法研究 [D]; 南京理工大学, .% 神经元及突触模型仿真% 10月10日 Jonny Suclc;% close all;clear all;cd ('D:\OneDrive - 徐州开放大学\NPU\program\STDP')%% Simulation parametersv = -65; %初始膜电位u = 0; %初始恢复变量I = 10; %膜电流 影响放电频率v_thresh = 30;%电位阈值step = 0.001;%步长 mstimepuls = 10000; %时长缩短,不然反应太慢了t = 0; %计时器t0 = 0.002; %初始输入电流阶跃时间n = 1; %步数v_states(n) = v;%状态量初始化u_states(n) = u; %输入初始化%% Izhikevich尖峰神经元模型中,兴奋型皮层细胞可以分为以下三类:% RS(Regular spiking)常规性尖峰% a = 0.02; %模型参数% b = 0.2; %模型参数% c = -65; %模型参数% d = 8; %模型参数% IB(intrinsically bursting)本征性爆发尖峰神经元 % a = 0.02; %模型参数% b = 0.2; %模型参数% c = -55; %模型参数% d = 4; %模型参数% CH(chattedng)震颤式尖峰神经元% a = 0.02; %模型参数% b = 0.2; %模型参数% c = -50; %模型参数% d = 2; %模型参数%% Izhikevich尖峰神经元模型中,抑制性脑皮层细胞也可以分为以下三类:% FS(fast spiking)快速式尖峰神经元% a = 0.1; %模型参数% b = 0.2; %模型参数% c = -65; %模型参数% d = 2; %模型参数% LTS(Low-Threshold spiking)低阀值尖峰神经元% a = 0.02; %模型参数% b = 0.25; %模型参数% c = -65; %模型参数% d = 2; %模型参数% LS(Last spiking)延时尖峰神经元 60msa = 0.1; %模型参数b = 0.2; %模型参数c = -65; %模型参数d = 2; %模型参数t0 = 0.06; %延时阶跃时间while (t < 0.2)%Izhikevichv_del_states(n) = 0.04 * v_states(n) * v_states(n) + 5 * v_states(n) +140 - u_states(n) + I * stepfun(t,t0); %状态变化量u_del_states(n) = a * (b * v_states(n) - u_states(n));%状态量初始化% 状态更新%v_states(n+1) = v_states(n) + v_del_states(n) * step * timepuls; %更新 赋值 old 和del一个行向量一个列向量导致出来是矩阵%u_states(n+1) = u_states(n) + u_del_states(n) * step * timepuls; %控制量%直接什么都不乘完全是合理的,步长少了增量也少了,自然没有必要再缩减几个量级了。v_states(n+1) = v_states(n) + v_del_states(n); %更新 赋值 old 和del一个行向量一个列向量导致出来是矩阵u_states(n+1) = u_states(n) + u_del_states(n); %控制量if v_states(n+1) >= v_thresh %没有起到作用感觉v_states(n) = v_thresh; % 弥补步长导致没法还原步长的错误,不太合理v_states(n+1) = c; % 恢复u_states(n+1) = u_states(n+1) + d;% 恢复end%Integrate&Fire%v_del_states(n) = I + a - b * v_states(n) ; %状态变化量%v_states(n+1) = v_states(n) + v_del_states(n) * step * timepuls; %更新 赋值 old 和del一个行向量一个列向量导致出来是矩阵%if v_states(n+1) >= v_thresh% v_states(n+1) = c; % 恢复%end% 时间更新Time(n) = t; %时间记录t = t + step; %仿真步长n = n + 1; %计数+1end% 绘图figuresubplot(2,1,1);plot(v_states,'linewidth',1.5)% title(['阶跃电流值为 ',num2str(I),' mA的膜电位'],'FontSize',14);% grid on;% xlabel('$T(ms)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');% ylabel('$v(mV)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');% set(gca,'FontName','Microsoft YaHei UI','FontSize',14,'linewidth',1.5);set(gca,'FontName','Times New Roman','FontSize',14,'linewidth',1.5);% subplot(2,2,3);plot(v_del_states,'linewidth',1.5)% grid on;% xlabel('$T(ms)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');% ylabel('$\dot{v}$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');% set(gca,'FontName','Microsoft YaHei UI','FontSize',14,'linewidth',1.5);subplot(2,1,2);plot(u_states,'linewidth',1.5)% title(['阶跃电流值为 ',num2str(I),' mA的恢复变量'],'FontSize',14);% grid on;% xlabel('$T(ms)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');% ylabel('$u(mV)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');% set(gca,'FontName','Microsoft YaHei UI','FontSize',14,'linewidth',1.5);set(gca,'FontName','Times New Roman','FontSize',14,'linewidth',1.5);% subplot(2,2,4);plot(u_del_states,'linewidth',1.5)% grid on;% xlabel('$T(ms)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');% ylabel('$\dot{u}$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');% set(gca,'FontName','Microsoft YaHei UI','FontSize',14,'linewidth',1.5);
结尾
其实这几个月还是没闲着一直在做工作,平时不咋记得码博客了,最近网站也出了问题,莫名会跳转到其他网站去,也没有时间收拾了。年初的论文不知道是第几次被拒了,现在又在准备另一篇,这部分内容算是里面的一小部分,希望能共同学习,一切都会好起来的。
今年可真快,加油。