third_factor_stdp
third_factor_stdp - Synapse model for spike-timing dependent plasticity with postsynaptic third-factor modulation
Description
third_factor_stdp is a synapse with spike time dependent plasticity (as defined in [1]). Here the weight dependence exponent can be set separately for potentiation and depression. Examples:
Multiplicative STDP [2] mu_plus = mu_minus = 1 Additive STDP [3] mu_plus = mu_minus = 0 Guetig STDP [1] mu_plus, mu_minus in [0, 1] Van Rossum STDP [4] mu_plus = 0 mu_minus = 1
The weight changes are modulated by a “third factor”, in this case the postsynaptic dendritic current I_post_dend
.
I_post_dend
“gates” the weight update, so that if the current is 0, the weight is constant, whereas for a current of 1 pA, the weight change is maximal.
Do not use values of I_post_dend
larger than 1 pA!
References
- [1] Guetig et al. (2003) Learning Input Correlations through Nonlinear
Temporally Asymmetric Hebbian Plasticity. Journal of Neuroscience
- [2] Rubin, J., Lee, D. and Sompolinsky, H. (2001). Equilibrium
properties of temporally asymmetric Hebbian plasticity, PRL 86,364-367
- [3] Song, S., Miller, K. D. and Abbott, L. F. (2000). Competitive
Hebbian learning through spike-timing-dependent synaptic plasticity,Nature Neuroscience 3:9,919–926
- [4] van Rossum, M. C. W., Bi, G-Q and Turrigiano, G. G. (2000).
Stable Hebbian learning from spike timing-dependent plasticity, Journal of Neuroscience, 20:23,8812–8821
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.0 |
Source code
synapse third_factor_stdp:
state:
w real = 1.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:
kernel pre_trace_kernel = exp(-t / tau_tr_pre)
inline pre_trace real = convolve(pre_trace_kernel,pre_spikes)
# all-to-all trace of postsynaptic neuron
kernel post_trace_kernel = exp(-t / tau_tr_post)
inline post_trace real = convolve(post_trace_kernel,post_spikes)
end
input:
pre_spikes nS <-spike
post_spikes nS <-spike
I_post_dend pA <-current
end
output: spike
onReceive(post_spikes):
# potentiate synapse
w_ real = Wmax * (w / Wmax + (lambda * (1.0 - (w / Wmax)) ** mu_plus * pre_trace))
if I_post_dend <= 1pA:
w_ = (I_post_dend / pA) * w_ + (1 - I_post_dend / pA) * w # "gating" of the weight update
end
w = min(Wmax,w_)
end
onReceive(pre_spikes):
# depress synapse
w_ real = Wmax * (w / Wmax - (alpha * lambda * (w / Wmax) ** mu_minus * post_trace))
if I_post_dend <= 1pA:
w_ = (I_post_dend / pA) * w_ + (1 - I_post_dend / pA) * w # "gating" of the weight update
end
w = max(Wmin,w_)
# deliver spike to postsynaptic partner
deliver_spike(w,the_delay)
end
end