STDP with pre-synaptic activity updated when spike arrives at postsynaptic neuron

Description of problem

I am trying to implement a form of STDP where the pre-synaptic activity variable is updated when the spike arrives at the postsynaptic neuron, rather than when the spike is initiated. Up until now, I have been using the standard Brian method of defining what happens at the pre- and post-synaptic neurons using the ‘on_pre’ and ‘on_post’ arguments of the ‘Synapse’ class. However, this defines what happens at the time the spike occurs, whereas I need to update the pre-synaptic activity variable at the time that the pre-synaptic neuron spikes plus the synaptic delay.

Minimal code to reproduce problem

    # synapse equations
    eqs = '''
    dw/dt = rho*(((1*siemens-w)*C_pre-w*D_post)/tau_w) : siemens # synaptic weight 
    '''
    # action upon excitatory presynaptic spike 
    on_pre = '''
    C_pre += alpha_C*(1-C_pre)
    '''
    # action upon excitatory postsynaptic spike
    on_post = '''
    g_e_post += lamda*w
    D_post += alpha_D*(1-D_post)
    '''

where w is the synaptic weight, rho is the learning rate, C is the pre-synaptic activity, D is the postsynaptic activity and alpha_C and alpha_D are scaling factors.

To see the full equations for the type of STDP I am trying to implement, see equations 3.5 - 3.7 in the following paper: https://www.oftnai.org/articles/Brain_modelling_articles/Publications/Vision/20180021.pdf

I might have misunderstood what you want to do, but if you set a synaptic delay in Brian, this will delay the execution of the on_pre statement and therefore execute it at spike time + delay. I think this is what you want? The g_e_post += lambda*w statement on the other hand should be part of on_pre, since it is triggered by the pre-synaptic spike as well.

The general approach for these kind of equations:

  • everything that is not multiplied by a \delta-function evolves continuously and should therefore go into the equations. From a quick look at your equations, it means that you have a \frac{dC}{dt} equation in the pre-synaptic neuron equations, a \frac{dD}{dt} and a \frac{dg}{dt} equation in the post-synaptic neuron equations, and a \frac{d\Delta g}{dt} (which you call w I think) equation in the synaptic equations.
  • each term that is multiplied by \delta(t - \Delta t_{ij} - t^l_j) needs to go into on_pre, to be executed at pre-synaptic spike time + delay
  • each term that is multiplied by \delta(t - t^k_i) needs to go into on_post, to be executed at post-synaptic spike time.

And of course you’ll have to set the delays \Delta t_{ij} on the synapses.

1 Like

Thanks for your quick response! I didn’t realise that when you set a delay, it delays the time at which everything in the ‘on_pre’ term is executed. What you have described is exactly what I want to do, so I will move the g_e_post += lambda*w statement into the ‘on_pre’ term and everything else should be fine since I have already set delays.

Thanks again,

Patrick

1 Like