Hi!
I, together with a student of mine called Daniel Casanueva (who just asked for being a member of this group) are trying to build a very simple network that uses STDP (SpikePairRule, specifically). This network has two standard LIF neurons with billateral projections (neuron 0 to neuron 1, and neuron 1 to neuron 0, both having STDP).
We've simulated some different experiments using a SpiNN-3 board in order to fully understand how STDP works in those cases. We are having some doubts regarding what we expect to happen vs what is really happening.
In the following picture you can see a spike from neuron 0 in timestamps 4, 13 and 23. On the other hand, neuron 1 spikes at 14 and 15. There are no other spikes nor neurons in the network.
With this experiment, we expect the projection from neuron 0 to 1 to increase the weight at 14, and then to increase again at 24. On the other hand, we expect the projection between 1 and 0 to decrease its weight at the same timestamps (the weights of the projections would behave the opposite).
The rules that we use for STDP are:
SpikePairRule with Aminus = Aplus = 1. Tau_minus = Tau_minus = 5.
AdditiveWeightDependence with w_max = 10, w_min = 1.
The initial weight for the projections is 4.
What we get as output of the simulation is what can be seen in the next pictures:
These pictures show the evolution of the weights of the projection between neurons 0 and 1 (the last picture) and between 1 and 0 (the first picture). Therefore, the Y-axis shows the weight value, and the X-axis shows the simulation time in milliseconds.
We are trying to understand what it's really happening but we don't fully get it. First of all, the weight change is too strong, which we think it shouldn't be. Apart from that, the weight changes don't match the timestamps that we expect.
We think that maybe this is caused by the SpikePairRule not accepting projections in both ways. We saw that in the documentation it says that there's a rule called TimingDependenceRecurrent, which we don't know if that solves that problem (if that's even a problem with the SpikePairRule), but still we could't use that rule in the code (we think there are some imports that are missing).
Could you please give us some ideas on why we are getting this unexpected behavior? Maybe we are missing something on how the STDP in SpiNNaker works.
Thank you very much in advance.
Best regards,
Daniel Casanueva and Juan P. Dominguez-Morales