这是NEF的第一个principle,说的是大脑会把某些讯号encode成一些pattern,直觉的就是当有刺激通过你比如视觉进入你的大脑,你的大脑其实会吧这个刺激变成一些电信号,之所要变成电信号是为了。
这边有一个公式,描述的就是这样的事情:当有神经电流刺激时,cell会发出什么样的spike,公式写成
看到红色
encode成了上面的这一段描述)。
但是有一个问题,如果如上面所说,如果要考虑到持续收到,这样必然要考虑到时间:时间域上的spike算是encoding。然而这样会有一些问题,特别是在decode的时候。比如要如何decode?考虑到encode是整个时间域上的spike的序列,要怎么样把一个在整个时间域上的东西decode应该是蛮棘手的问题。所以我们可以做个变通:简单的把spike的频率(spike rate)当作是对 x x 的encode。换句话说,这个公式就很简单了:给我一个 还你一个实数向量,这个向量就是 x x 的encode。
而 定义如下:
好,我们已经知道了我们可以用spike rate
来当做某一种刺激输入的encode,那么问题来了,我们要怎么得到spike rate
?或者我们怎么得到spike序列,理所当然我们能得到产生spike时间序列的方法,我们就能得到spike rate
。给定刺激产生spike有很多不同的模型,这边介绍的是leaky integrate-and-fire这一个模型:
从名字上来看,其实很好理解,leaky就是漏的,integrate就是积分,fire就是我们所说的神经元激发,所以基本上LIF就是在做这样的事:
用数学表达式来看的话就是,
请注意,在上一章中,并没有时间t
这个变量,原因就是前面说的我们不应该把· encode成一个spike的时间序列而是一个实数向量。
这个公式就是说膜电势超过多少就spike,这个公式和 Gk G k 的关系在于可以用上式得到时间域上的spike的样子,然后我们可以得到他的频率,作为 Gk G k 的输出。
通解是
Python的框架,基于NEF。
下表中的-array
指的是由于有多个neurons所以每个neuron都会对应一个自己的对应的参数。
参数 | 型别 | 解释 |
---|---|---|
n_neurons | int | 有多少个neuron |
dimensions | int | neuron的维度 |
radius | float-array | $1 |
encoders | float-array | 前面公式中的 e e ,如果是负的就说明是抑制 |
intercepts | float-array | 发生spike的膜电势的临界点 |
max_rates | float-array | 对于不同的刺激最大的spike rate |
eval_points | ||
bias | float-array | 就是前面的 |
gain | float-array | 就是前面的 α α |
noise | ||
normalize_encoders | bool | |
label | ||
seed |