neuromodulated_stdp
neuromodulated_stdp - Synapse model for spike-timing dependent plasticity modulated by a neurotransmitter such as dopamine
Description
stdp_dopamine_synapse is a connection to create synapses with dopamine-modulated spike-timing dependent plasticity (used as a benchmark model in [1]_, based on [2]_). The dopaminergic signal is a low-pass filtered version of the spike rate of a user-specific pool of neurons. The spikes emitted by the pool of dopamine neurons are delivered to the synapse via the assigned volume transmitter. The dopaminergic dynamics is calculated in the synapse itself.
Parameters
Name |
Physical unit |
Default value |
Description |
---|---|---|---|
the_delay |
ms |
1ms |
!!! cannot have a variable called “delay” |
tau_tr_pre |
ms |
20ms |
STDP time constant for weight changes caused by pre-before-post spike pairings. |
tau_tr_post |
ms |
20ms |
STDP time constant for weight changes caused by post-before-pre spike pairings. |
tau_c |
ms |
1000ms |
Time constant of eligibility trace |
tau_n |
ms |
200ms |
Time constant of dopaminergic trace |
b |
real |
0.0 |
Dopaminergic baseline concentration |
Wmax |
real |
200.0 |
Maximal synaptic weight |
Wmin |
real |
0.0 |
Minimal synaptic weight |
A_plus |
real |
1.0 |
Multiplier applied to weight changes caused by pre-before-post spike pairings. If b (dopamine baseline concentration) is zero, then A_plus is simply the multiplier for facilitation (as in the stdp_synapse model). If b is not zero, then A_plus will be the multiplier for facilitation only if n - b is positive, where n is the instantenous dopamine concentration in the volume transmitter. If n - b is negative, A_plus will be the multiplier for depression. |
A_minus |
real |
1.5 |
Multiplier applied to weight changes caused by post-before-pre spike pairings. If b (dopamine baseline concentration) is zero, then A_minus is simply the multiplier for depression (as in the stdp_synapse model). If b is not zero, then A_minus will be the multiplier for depression only if n - b is positive, where n is the instantenous dopamine concentration in the volume transmitter. If n - b is negative, A_minus will be the multiplier for facilitation. |
State variables
Name |
Physical unit |
Default value |
Description |
---|---|---|---|
w |
real |
1.0 |
|
n |
real |
0.0 |
Neuromodulator concentration |
c |
real |
0.0 |
Eligibility trace |
pre_tr |
real |
0.0 |
|
post_tr |
real |
0.0 |
Source code
synapse neuromodulated_stdp:
state:
w real = 1.0
n real = 0.0 # Neuromodulator concentration
c real = 0.0 # Eligibility trace
pre_tr real = 0.0
post_tr real = 0.0
end
parameters:
the_delay ms = 1ms # !!! cannot have a variable called "delay"
tau_tr_pre ms = 20ms # STDP time constant for weight changes caused by pre-before-post spike pairings.
tau_tr_post ms = 20ms # STDP time constant for weight changes caused by post-before-pre spike pairings.
tau_c ms = 1000ms # Time constant of eligibility trace
tau_n ms = 200ms # Time constant of dopaminergic trace
b real = 0.0 # Dopaminergic baseline concentration
Wmax real = 200.0 # Maximal synaptic weight
Wmin real = 0.0 # Minimal synaptic weight
A_plus real = 1.0 # Multiplier applied to weight changes caused by pre-before-post spike pairings. If b (dopamine baseline concentration) is zero, then A_plus is simply the multiplier for facilitation (as in the stdp_synapse model). If b is not zero, then A_plus will be the multiplier for facilitation only if n - b is positive, where n is the instantenous dopamine concentration in the volume transmitter. If n - b is negative, A_plus will be the multiplier for depression.
A_minus real = 1.5 # Multiplier applied to weight changes caused by post-before-pre spike pairings. If b (dopamine baseline concentration) is zero, then A_minus is simply the multiplier for depression (as in the stdp_synapse model). If b is not zero, then A_minus will be the multiplier for depression only if n - b is positive, where n is the instantenous dopamine concentration in the volume transmitter. If n - b is negative, A_minus will be the multiplier for facilitation.
end
equations:
pre_tr'=-pre_tr / tau_tr_pre
post_tr'=-post_tr / tau_tr_post
end
internals:
tau_s 1/ms = (tau_c + tau_n) / (tau_c * tau_n)
end
input:
pre_spikes nS <-spike
post_spikes nS <-spike
mod_spikes real <-spike
end
output: spike
onReceive(mod_spikes):
n += 1.0 / tau_n
end
onReceive(post_spikes):
post_tr += 1.0
# facilitation
c += A_plus * pre_tr
end
onReceive(pre_spikes):
pre_tr += 1.0
# depression
c -= A_minus * post_tr
# deliver spike to postsynaptic partner
deliver_spike(w,the_delay)
end
# update from time t to t + resolution()
update:
# resolution() returns the timestep to be made (in units of time)
# the sequence here matters: the update step for w requires the "old" values of c and n
w -= c * (n / tau_s * expm1(-tau_s * resolution()) - b * tau_c * expm1(-resolution() / tau_c))
c = c * exp(-resolution() / tau_c)
n = n * exp(-resolution() / tau_n)
end
end