1

我的问题是关于尖峰神经网络。典型尖峰神经元的输入通常是一些浮点值,表示其流入电流,通常以 mA 或类似单位表示,如下面的简单示例:

static const float 
      dt = 1.0/1000,  // sampling period
      gL = 0.999,     // leak conductance
      vT = 30.0;      // spiking voltage threshold
float mV = 0;         // membrane voltage

// Leaky integrate-and-fire neuron model step
bool step_lif_neuron(float I) { // given input current "I", returns "true" if neuron had spiked
    mV += (I - mV*gL)*dt;
    if( mV > vT ) { // reset? heaviside function is non-differentiable and discontinuous
        mV = 0;
        return true;
    }
    return false;
}

这很好,如果它的目的是确定输入图像与某个类的关系,或者打开或关闭电机或灯。但这里出现了主要问题:模型不描述神经元互连。我们不能将一个神经元连接到下一个神经元,因为它通常发生在大脑内部。

如何将前一个神经元的转换bool isSpiked为下一个神经元float I输入值

4

1 回答 1

2

这不是典型的 SO 问题,但这是答案。

当然,您的模型不能回答您的问题,因为它是一个神经元模型。对于连接(大脑中或其他地方的突触),您需要一个突触模型。在生物学中,突触前尖峰(即突触的“输入尖峰”)导致突触后膜电导随时间变化。这种电导变化在生物学中的形状大致具有所谓的双指数形状:

其中突触前尖峰发生在时间 0。

这种电导变化导致(时间依赖性)电流进入突触后神经元(即接收输入的神经元)。为简单起见,许多模型直接模拟输入电流。常见的形状是

  • 双指数(现实)
  • alpha(类似于双指数)
  • 指数(更简单但仍能捕捉到最重要的属性)
  • 矩形(更简单,便于理论模型)
  • 三角形(最简单,一个时间步长的单个脉冲)。

这是在最大相同高度下缩放的比较:

并针对相同的总电流进行缩放(在时间过程中如此积分):

那么在尖峰神经网络模型中,尖峰是如何导致另一个神经元中的输入电流的呢?

假设您直接对电流进行建模,您需要选择要在模型中使用的电流时间进程。然后,每当一个神经元出现尖峰时,你就会将你选择的形状的电流注入连接的神经元。

例如,使用指数电流:突触后神经元有一个变量,该变量I_syn给出突触输入,每次突触前神经元尖峰时,它会根据连接的权重递增,在所有其他时间步长中,它会随着时间常数呈指数衰减突触(指数衰减)。

伪代码:

// processing at time step t
I_syn *= exp(-delta_t / tau_synapse)  // delta_t is your simulation time step

foreach presynaptic_spike of neuron j:
   I_syn += weight_of_connection(j)

这个话题不是用一两个情节或一个方程来回答的。我只是想指出主要概念。您可以找到您选择的计算神经科学教科书的更多详细信息,例如在Gerstner 的神经元动力学(可通过网站获得)中。

于 2018-10-22T07:18:00.577 回答