脉冲神经网络的模拟策略

一. 时钟驱动模拟策略

1. 神经元模型的数值计算方法

一般来说,大多数生物系统建立的模型是微分方程形式,并且这些方程不能简单地通过微积分的方法得到它们的解析表达式,即使有时候可以得到,其表达式也十分复杂,很难讨论其具有的性质。因此,需要采用一定的数值方法进行求解,求出方程在某些离散点处的近似解,进而分析方程所具有的性质和规律。对于脉冲神经元模型的数值计算,一般采用欧拉或龙格-库塔等数值方法进行近似求解。

1.1 欧拉方法

欧拉方法只有一阶精度,具有明确的几何解释,但误差较大,实用价值受到限制。它的基本思路是在小区间 ( x , x + h ) (x,x+h) (x,x+h)上用差商代替倒数,可表示为:
y n + 1 = y n + h f ( x n , y n ) y_{n+1}=y_{n}+hf(x_{n},y_{n}) yn+1=yn+hf(xn,yn)

表示神经元模型的微分方程在给定初值 ( x 0 , y 0 ) (x_{0},y_{0}) (x0,y0)后,代入微分方程可得该点处斜率,以h为步长,求得 x 1 = x 0 + h x_{1}=x_{0}+h x1=x0+h y 1 y_{1} y1的值,将 ( x 1 , y 1 ) (x_{1},y_{1}) (x1,y1)再代入微分方程求 x 2 = x 1 + h x_{2}=x_{1}+h x2=x1+h处的 y 2 y_{2} y2值,如此反复迭代,直至求出所要求的解。这种方法称为欧拉法或折线法,是目前最简单的微分方程数值求解方法。

1.2 龙格-库塔方法

一般来说,数值方法的精度越高,得到的解越接近真实值。龙格-库塔方法是建立在泰勒公式基础上的一种方法,其基本思想就是利用区间上若干点的导数的线性组合得到平均斜率,这样就能得到更高阶的精度,因此其解也就更加精确。欧拉方法只取了泰勒公式展开式的一次项,而龙格-库塔方法则考虑了泰勒公式中的更多项,因此其求解精度更高,求解范围更大,是一种比较好的微分方程数值计算方法。比较常用的是经典的龙格-库塔公式,即具有四阶精度的龙格-库塔公式,表示如下:

y n + 1 = y n + h 6 ( k 1 + 2 k 2 + 3 k 3 + k 4 ) y_{n+1}=y_{n}+\frac{h}{6}(k_{1}+2k_{2}+3k_{3}+k_{4}) yn+1=yn+6h(k1+2k2+3k3+k4)
k 1 = f ( x n , y n ) k_{1}=f(x_{n},y_{n}) k1=f(xn,yn)
k 2 = f ( x n + h 2 , y n + h 2 k 1 ) k_{2}=f(x_{n}+\frac{h}{2},y_{n}+\frac{h}{2}k_{1}) k2=f(xn+2h,yn+2hk1)
k 3 = f ( x n + h 2 , y n + h 2 k 2 ) k_{3}=f(x_{n}+\frac{h}{2},y_{n}+\frac{h}{2}k_{2}) k3=f(xn+2h,yn+2hk2)
k 1 = f ( x n + h , y n + h k 3 ) k_{1}=f(x_{n}+h,y_{n}+hk_{3}) k1=f(xn+h,yn+hk3)

2. 时钟驱动模拟的算法描述

在脉冲神经网络的时钟驱动模拟算法中,计算过程主要分为神经元状态变量更新和脉冲传播两个阶段。首先,将所有神经元的状态变量在每个时间步做同步更新: X ( t ) → X ( t + d t ) X(t)\rightarrow X(t+dt) X(t)X(t+dt),dt表示时间步长。如果神经元模型f为非线性微分方程,一般采用欧拉或龙格-库塔等数值方法进行求解;如果神经元f为线性微分方程,则更新操作 X ( t ) → X ( t + d t ) X(t)\rightarrow X(t+dt) X(t)X(t+dt)也是线性的,可通过在状态变量X上乘以一个矩阵来实现: X ( t + d t ) = A X ( t ) X(t+dt)=AX(t) X(t+dt)=AX(t),基于向量运算的科学计算软件为其模拟提供了有效的工具。然后将每个神经元的膜电位和阈值电位或峰值电位进行比较,当满足条件时神经元发放脉冲,同时发放的脉冲沿着轴突向目标神经元传播,并对突触后神经元进行相应的状态更新: X ← g i ( X ) X\leftarrow g_{i}(X) Xgi(X)。此外,对于Izhikevich与Integrate-and-Fire等需要进行复位操作的神经元模型来说,某些状态变量需要复位操作。下表给出了脉冲神经网络时钟驱动模拟的基本算法。
在这里插入图片描述

3. 时钟驱动算法的时间复杂度

时钟驱动算法的计算时间主要由神经元状态变量的更新和神经网络中脉冲传播两部分构成。神经元状态变量更新部分的计算时间主要由神经元的模型和选定的时间步长所决定,神经网络中脉冲传播部分的计算时间主要由传递的脉冲数量决定。

假设网络模拟生物时间1s,对于含有N个神经元的脉冲神经网络,神经元状态变量需要更新 N / d t N/dt N/dt 次。假设 C U C_{U} CU表示每次神经元更新状态变量的计算时间,则神经元状态更新阶段总的计算时间为: C U × N d t C_{U}\times \frac{N}{dt} CU×dtN

在神经网络的模拟过程中,每个神经元的平均脉冲发放频率为F,则神经元平均发放 N × F N \times F N×F个脉冲,突触连接的平均值为p(即每个脉冲需要向p个目标神经元传递),因此网络中总共传递 N × F × p N\times F \times p N×F×p个脉冲。每次脉冲传递时,只需要将相应神经元状态变量加上突触权值即可,因此脉冲传递是一个简单操作,其计算时间与神经元模型无关。假设 C p C_{p} Cp表示每个脉冲传递的计算时间,则脉冲传播阶段总的计算时间为: C p × N × F × p C_{p}\times N\times F\times p Cp×N×F×p

脉冲神经网络模拟生物的1s时间,将神经元状态更新阶段的计算时间和脉冲传播阶段的计算时间相加,可得到时钟驱动算法总的计算时间为: C U × N d t + C p × N × F × p C_{U}\times \frac{N}{dt}+C_{p}\times N\times F\times p CU×dtN+Cp×N×F×p,式中,神经元状态变量的更新时间 C U C_{U} CU和脉冲传递时间 C p C_{p} Cp相互独立,一般情况下, C U > > C p C_{U}>>C_{p} CU>>Cp

如果考虑神经网络中脉冲的传播延迟,则还需要加上管理脉冲传播延迟的计算时间。Morrison等在时钟驱动算法中引入循环数组来管理未来的脉冲事件,每个脉冲事件仅需一次插入和一次删除操作,因此,管理脉冲传播延迟的时间为 C D × N × F × p C_{D}\times N\times F\times p CD×N×F×p,式中, C D C_{D} CD表示循环数组的一次插入和一次删除操作的计算时间,这个值比较小。

上面所讨论的时钟驱动模拟算法存在着明显缺点:

  1. 无论对描述神经元状态变量的微分方程进行近似的还是精确的求解,神经元脉冲的发放都限定在给定的离散时间点上;
  2. 由于阈值检测都在每个时间区间的尾部进行,因此会遗失某些可能发放的脉冲;

针对时钟驱动算法存在的问题,研究者提出了如下一些改进方法:

  1. 为了改善脉冲的时间精度,可以采用数值插值的方法得到时间步长以内的脉冲时间。当假定脉冲传播延迟的最小值大于给定的时间步长时,在每个时间区间内,神经元之间相互不影响,每个神经元可对其脉冲事件进行独立的处理。在这种情况下,神经元状态变量的更新就发生在每个脉冲到来的时刻,而不是每个时间步,因此,这是一种相对较为精确的时钟驱动模拟策略。
  2. 采用可变时间步长的积分解决方案,可以大大提高脉冲神经网络的模拟精度。

二. 事件驱动模拟策略

由于时钟驱动模拟策略是一种近似的模拟策略,神经元脉冲的发放与接受时间限定在给定的离散时间点上,这将严重影响神经网络的动力学特性,特别是基于动态突触的网络模拟。事件驱动模拟算法正是利用了这一点,不是在每个时间步都计算整个网络的状态变化,而是在必要的时候,即当有一个脉冲输入或者神经元将要发放脉冲时才需要计算神经元的状态变量。因此,该类模拟策略也称为异步算法(asynchronous algorithm)。

在事件驱动算法中,神经网络的模拟主要以脉冲事件为处理核心,事件可以是网络中神经元的脉冲发放,也可以是外部的脉冲输入。通常外部的脉冲输入是由泊松过程(Poisson process)描述的随机脉冲。任何脉冲神经元模型的膜方程均可表示为被动膜属性(passive membrane property)、脉冲发放机制(spiking mechanism)以及突触交互模式(synaptic interaction model)三部分,这些对脉冲神经网络的模拟与实现具有重要影响。由于神经元之间的突触交互模式并不完全相同,主要有瞬时突触交互(instantaneous synaptic interaction)模式和非瞬时突触交互(non-instantaneous synaptic interaction)模式两种,其模拟方法也不完全相同。因此,可以根据神经元之间突触交互模式的不同,分为瞬时突触交互模式和非瞬时突触交互模式两类事件驱动模拟策略。

1. 瞬时突触交互模式

如果神经元之间的突触为瞬时电压跳变模式,在脉冲到来时突触后神经元的膜电位瞬时更新,脉冲的发放仅产生在突触前脉冲到来的时间。在这种交互模式下,脉冲神经网络的事件驱动模型比较容易实现。在事件驱动模拟算法实现时,可以将所有的事件按脉冲时间的先后次序存储在一个队列中。事件驱动模拟策略每次循环的一般处理步骤为:

  1. 确定下一个事件,即提取队列中的脉冲事件;
  2. 根据神经元模型的表达式更新该目标神经元的状态变量,并增加相应的突触权值;
  3. 检查神经元是否满足阈值条件,若神经元发放脉冲,对于每个突触后神经元传递的脉冲事件被插入队列中。

假设脉冲神经网络的模拟周期为T,下表给出了瞬时突触交互模式的事件驱动模拟算法:
在这里插入图片描述

在脉冲神经网络模拟过程中,为了确定下一个脉冲事件,需要一个用于保存未来要发生事件的有序列表,这个列表存储着每一个神经元的输入的脉冲事件。在网络中脉冲传播延迟相同的情况下,对于脉冲事件的管理采用一般的先进先出队列结构,FIFO队列的数据结构容易实现,将传递的脉冲事件直接插入队列尾部。此外,对于外部的随机输入脉冲事件,可用一个分开的FIFO队列进行管理。但在脉冲神经网络中脉冲传播延迟时间不相同的情况下,队列中的脉冲时间时序在当前无脉冲输入的情况下式正确的,但如果有新的脉冲事件输入时,需要根据脉冲事件的时间次序更新队列。为了得到神经网络中脉冲事件的正确时序,一般采用优先队列的方式进行管理。

2. 非瞬时突触交互模式

基于电导的突触交互(conductance-based synaptic interaction)和基于电流的突触交互(current-based synaptic interaction)模型属于神经元之间的非瞬时突触交互。
在这里插入图片描述

3. 事件驱动算法的时间复杂度

在脉冲神经网络的事件驱动模拟策略中,对于神经元每个脉冲的发放,在考虑平均向p个突触后神经元传递脉冲的情况下,将其所需的操作可以分为四个部分:

  1. 更新该神经元和突触后目标神经元的状态变量,需要p+1次更新,更新操作的计算时间取决于神经模型的复杂性;
  2. 更新该神经元和所有目标神经元的下次脉冲发放时间,需要p+1次更新,其计算时间同样取决于神经模型的复杂性;
  3. 从队列中提取最优先元素(即最早的脉冲发放时间),并更新与目标神经元脉冲发放时间对应的队列元素,需要p+1次队列操作,队列操作的计算时间取决于所选择的优先队列实现方式;
  4. 如果考虑脉冲的传播延迟,则每个传入神经元的脉冲事件都要进行一次入队和出队的操作,需要2p次队列操作。

由于脉冲神经网络模拟1s,平均发放 N × F N\times F N×F个脉冲,因此,总的计算时间代价为: ( C U + C S + C Q ) × N × F × p (C_{U}+C_{S}+C_{Q})\times N\times F\times p (CU+CS+CQ)×N×F×p
式中, C U C_{U} CU表示神经元更新状态变量的计算时间; C S C_{S} CS表示计算下次脉冲发放时间的计算时间; C Q C_{Q} CQ表示优先队列操作的平均时间。

三. 电压驱动模拟策略

神经元的信息处理涉及动作电位或脉冲,脉冲的精确定时计算对于实现脉冲神经网络的数值模拟非常关键。脉冲神经网络的时钟驱动模拟策略具有通用性,可以应用于任何脉冲神经元模型。然而,当膜电位在一个时间步长期间跨过阈值两次时(第一次从下向上方向,第二次是从上向下方向),则可能错过脉冲发放事件。

事件驱动模拟策略能够通过准确计算神经元的膜电位来实现脉冲发放时间的精确计算。然而,事件驱动模拟策略只适用于具有解析解的一些简单模型,如Integrate-and-Fire神经元模型等。最近,Zheng等提出了电压驱动的模拟策略,该方法不是将时间离散化,而是将膜电位离散化,在每个电压步长(voltage step)进行神经元的状态更新,并进行脉冲发放事件的检测,该模拟策略可适用于任何脉冲神经模型。

1. 电压驱动模拟的算法描述

电压驱动模拟策略是基于神经元膜电位状态空间离散化的脉冲神经网络模拟方法,对于神经元膜电位的状态空间,按照给定的电压步长dV进行离散化,每一个离散化的电压区间(voltage interval)为 R i = [ V i , V i + d V ] R_{i}=[V_{i},V_{i}+dV] Ri=[Vi,Vi+dV]。此外,神经元的复位电压区间(resetting interval)和阈值电位区间(threshold interval)分别表示为 R r e s e t = [ − ∞ , V r e s e t ] R_{reset}=[-\infty,V_{reset}] Rreset=[,Vreset] R t h r e s h = [ V t h r e s h , + ∞ ] R_{thresh}=[V_{thresh},+\infty] Rthresh=[Vthresh,+]。在基于电压步长驱动的神经元状态计算中,根据神经元模型中描述膜电位变化的函数 f ( V ) f(V) f(V),可使用分段常数、线性或二次插值的方式来逼近神经元状态空间的演化。随着神经元内部状态变量的变化和输入的脉冲事件,在新的更新时间内,神经元膜电位可能发生的情况有:①从当前的电压区间 R i R_{i} Ri返回到前一个电压区间 R i − 1 R_{i-1} Ri1;②从当前的电压区间 R i R_{i} Ri到达下一个电压区间 R i + 1 R_{i+1} Ri+1。当神经元膜电位到达阈值区间 R t h r e s h R_{thresh} Rthresh时,神经元发放脉冲,并将神经元复位至复位区间 R r e s e t R_{reset} Rreset。电压驱动模拟策略虽然只有固定的电压步长,但时间步长自适应地变化,当神经元膜电位快速变化时,时间步长自动减小,能够比较精确的计算脉冲发放时间,因此电压驱动模拟可认为是一种局部事件驱动方法。

电压驱动模拟策略的重点在于计算神经元连续电压区间的变化,以及到达一个新的电压区间的时间,称为出口时间(exit time)。当神经元膜电位达到阈值区间时,出口时间就成为脉冲发放时间。电压驱动模拟策略包含初始化和事件处理两个阶段,这里的事件包含神经元到达新的电压区间及相应的出口时间。在初始化阶段,计算网络中每个神经元的出口时间,并根据出口时间的时序将事件插入一个优先队列。在事件处理的每一个迭代过程中,具体步骤为:

  1. 提取时序最小的事件;
  2. 如果事件中的电压区间不是阈值区间,仅需更新相应神经元的状态,计算到达新电压区间的出口时间,并在优先队列中插入事件;
  3. 如果神经元膜电位到达阈值区间,出口时间即为脉冲发放时间,并将神经元状态变量复位,在优先队列中插入复位事件;
  4. 发放的脉冲向突触后神经元传递,更新目标神经元的状态及出口时间,同时更新队列中的对应的事件。

在这里插入图片描述

2. 电压驱动算法的时间复杂度

假设网络模拟生物时间1s,对于含有N个神经元的脉冲神经网络,在电压驱动模拟策略中,通过神经元膜电位的离散化进行状态变量的更新,神经元的一次脉冲发放是膜电位从最低电位变化到阈值电位 V t h r e s h V_{thresh} Vthresh的过程,如果仅考虑神经元膜电位的上升变化,则离散化膜电位空间的计算次数为 V S / d V V_{S}/dV VS/dV,其中 V S V_{S} VS表示脉冲发放过程中膜电位变化的范围。在神经网络模拟过程中,神经元平均发放 N × F N\times F N×F个脉冲。假设 C E C_{E} CE表示每次神经元新电压区间更新及出口的计算时间, C Q C_{Q} CQ表示当电压区间更新时插入优先队列操作的平均时间,则网络中神经元膜电位离散化阶段总的计算时间复杂度为: ( C E + C Q ) × N × F × V S d V (C_{E}+C_{Q})\times N\times F\times \frac{V_{S}}{dV} (CE+CQ)×N×F×dVVS

此外,当神经元发放脉冲时,每个脉冲需要向p个目标神经元传递,因此,网络中总共传递 N × F × p N\times F\times p N×F×p个脉冲。每次脉冲传递时,计算时间包括两部分:①需要将相应的神经元状态变量加上突触权值,其计算时间与神经元模型无关,用 C p C_{p} Cp表示每个脉冲传递的计算时间;②计算目标神经元新的电压区间及出口时间,并更新优先队列中的事件。因此,脉冲传播阶段总的计算时间为: ( C p + C E + C Q ) × N × F × p (C_{p}+C_{E}+C_{Q})\times N\times F\times p (Cp+CE+CQ)×N×F×p

将神经元膜电位离散化阶段的计算时间和脉冲传播阶段的计算时间相加,可得电压驱动模拟算法总的计算时间复杂度为: ( C E + C Q ) × N × F × V S d V + ( C p + C E + C Q ) × N × F × p (C_{E}+C_{Q})\times N\times F\times \frac{V_{S}}{dV}+(C_{p}+C_{E}+C_{Q})\times N\times F\times p (CE+CQ)×N×F×dVVS+(Cp+CE+CQ)×N×F×p

来自脉冲神经网络原理与应用一书

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值