生物系统中触觉、听觉系统等都有实验表明,神经元的脉冲发放频率与外界刺激成正比,但是有饱和值。生物神经元脉冲一般1~2ms,因此,在编码过程中一般不超过1KHz。
生物能够做到快速识别信息,投射到视网膜接收器上的图像没几毫秒就发生一次变化,而这种编码方法必须要完全运行一整个时间窗才能读出编码信息,这显然是很不方便的。尽管该方法没有考虑时序信息,但因为其简单、易操作,仍然是最常用的方法。
该方法将实值在单个神经元上进行编码,保证时间窗内的脉冲发放数与实值相对应。但受脉冲本身特性影响,其脉冲发放频率存在上限。
很容易想到的是,在时长T内等间隔分布脉冲,这样不仅简单而且鲁棒性好,在间隔内的脉冲可以很容易判断为噪声。
该方法是解码方法,重复运行多次,对运行次数取平均。一般地, Δ t \Delta t Δt取1ms到几毫秒。
该方法将实值在N个神经元上进行编码,保证时间窗内的所有神经元的脉冲发放数与实值相对应。该方法与基于脉冲计数的方法相比,可以将时间窗设置的非常小,因此可以对动态变化的刺激进行快速响应。但是,这要求群体内的神经元具有同一性,这在生物上是不太现实的。
单位时间内,事物平均发生m次,每次事件发生互相独立,且概率相等,求单位时间内发生k次的概率分布。泊松分布的参数 λ \lambda λ是单位时间内随机事件的平均发生次数。 泊松分布适合于描述单位时间内随机事件发生的次数,这正好与脉冲发放率相对应。
P ( X = k ) = λ k k ! e − λ P(X=k) = \frac{\lambda^k}{k!}e^{-\lambda} P(X=k)=k!λke−λ
对二维图像,持续时间T内,每个像素对应的输入神经元发放的脉冲个数成泊松分布,其中 k k k为激发脉冲的个数, λ \lambda λ为与像素值成正比的激发频率, t t t时间内未产生脉冲的概率为 e − λ t e^{-\lambda t} e−λt。
input_groups[name+'e'] = b.PoissonGroup(n_input, 0)
'''
class PoissonGroup(Group, SpikeSource):
'''
Poisson spike source
Parameters
----------
N : int
Number of neurons
rates : `Quantity`, str
Single rate, array of rates of length N, or a string expression
evaluating to a rate. This string expression will be evaluated at every
time step, it can therefore be time-dependent (e.g. refer to a
`TimedArray`).
dt : `Quantity`, optional
The time step to be used for the simulation. Cannot be combined with
the `clock` argument.
clock : `Clock`, optional
The update clock to be used. If neither a clock, nor the `dt` argument
is specified, the `defaultclock` will be used.
when : str, optional
When to run within a time step, defaults to the ``'thresholds'`` slot.
order : int, optional
The priority of of this group for operations occurring at the same time
step and in the same scheduling slot. Defaults to 0.
name : str, optional
Unique name, or use poissongroup, poissongroup_1, etc.
'''
'''
在仿真时长T内,每次循环都以脉冲发放率*dt(dt单位为秒)的概率确定是否发放脉冲,最终形成频率编码。
[1] Spiking Neuron Model
[2] Spikes