stdp_nn_pre_centered
stdp_nn_pre_centered - Synapse type for spike-timing dependent plasticity, with nearest-neighbour spike pairing
Description
stdp_nn_pre_centered_synapse is a connector to create synapses with spike time dependent plasticity with the presynaptic-centered nearest-neighbour spike pairing scheme, as described in 1.
Each presynaptic spike is taken into account in the STDP weight change rule with the nearest preceding postsynaptic one and the nearest succeeding postsynaptic one (instead of pairing with all spikes, like in stdp_synapse). So, when a presynaptic spike occurs, it is accounted in the depression rule with the nearest preceding postsynaptic one; and when a postsynaptic spike occurs, it is accounted in the facilitation rule with all preceding presynaptic spikes that were not earlier than the previous postsynaptic spike. For a clear illustration of this scheme see fig. 7B in 2.
The pairs exactly coinciding (so that presynaptic_spike == postsynaptic_spike + dendritic_delay), leading to zero delta_t, are discarded. In this case the concerned pre/postsynaptic spike is paired with the second latest preceding post/presynaptic one (for example, pre=={10 ms; 20 ms} and post=={20 ms} will result in a potentiation pair 20-to-10).
The implementation involves two additional variables - presynaptic and postsynaptic traces 2. The presynaptic trace decays exponentially over time with the time constant tau_plus, increases by 1 on a pre-spike occurrence, and is reset to 0 on a post-spike occurrence. The postsynaptic trace (implemented on the postsynaptic neuron side) decays with the time constant tau_minus and increases to 1 on a post-spike occurrence.

Figure 7 from Morrison, Diesmann and Gerstner
Original caption:
Phenomenological models of synaptic plasticity based on spike timing”, Biological Cybernetics 98 (2008). “Examples of nearest neighbor spike pairing schemes for a pre-synaptic neuron j and a postsynaptic neuron i. In each case, the dark gray indicate which pairings contribute toward depression of a synapse, and light gray indicate which pairings contribute toward potentiation. (a) Symmetric interpretation: each presynaptic spike is paired with the last postsynaptic spike, and each postsynaptic spike is paired with the last presynaptic spike (Morrison et al. 2007). (b) Presynaptic centered interpretation: each presynaptic spike is paired with the last postsynaptic spike and the next postsynaptic spike (Izhikevich and Desai 2003; Burkitt et al. 2004: Model II). (c) Reduced symmetric interpretation: as in (b) but only for immediate pairings (Burkitt et al. 2004: Model IV, also implemented in hardware by Schemmel et al. 2006)
References
Parameters
Name |
Physical unit |
Default value |
Description |
---|---|---|---|
the_delay |
ms |
1ms |
!!! cannot have a variable called “delay” |
lambda |
real |
0.01 |
|
tau_tr_pre |
ms |
20ms |
|
tau_tr_post |
ms |
20ms |
|
alpha |
real |
1.0 |
|
mu_plus |
real |
1.0 |
|
mu_minus |
real |
1.0 |
|
Wmax |
real |
100.0 |
|
Wmin |
real |
0.0 |
State variables
Name |
Physical unit |
Default value |
Description |
---|---|---|---|
w |
real |
1 |
|
pre_trace |
real |
0.0 |
|
post_trace |
real |
0.0 |
Source code
synapse stdp_nn_pre_centered:
state:
w real = 1
pre_trace real = 0.0
post_trace real = 0.0
end
parameters:
the_delay ms = 1ms # !!! cannot have a variable called "delay"
lambda real = 0.01
tau_tr_pre ms = 20ms
tau_tr_post ms = 20ms
alpha real = 1.0
mu_plus real = 1.0
mu_minus real = 1.0
Wmax real = 100.0
Wmin real = 0.0
end
equations:
# nearest-neighbour trace of presynaptic neuron
pre_trace'=-pre_trace / tau_tr_pre
# nearest-neighbour trace of postsynaptic neuron
post_trace'=-post_trace / tau_tr_post
end
input:
pre_spikes nS <-spike
post_spikes nS <-spike
end
output: spike
onReceive(post_spikes):
post_trace = 1
# potentiate synapse
w_ real = Wmax * (w / Wmax + (lambda * (1.0 - (w / Wmax)) ** mu_plus * pre_trace))
w = min(Wmax,w_)
pre_trace = 0
end
onReceive(pre_spikes):
pre_trace += 1
# depress synapse
w_ real = Wmax * (w / Wmax - (alpha * lambda * (w / Wmax) ** mu_minus * post_trace))
w = max(Wmin,w_)
# deliver spike to postsynaptic partner
deliver_spike(w,the_delay)
end
end