Add eprop work to main tools#1368
Conversation
…ual implementation
…ng for poisson sources to be update-able from this code, all poisson stuff has been removed, neuron index 1 and 2 has V stored as diff variables, mean and entropy of values comes from average V over the recall period
…s are corrected, init corrected to include store_recall and eprop properly, test script adjusted to creat edge for poisson updating, still not tested as waiting for erbp plasticity components
…er/sPyNNaker into eprop_adaptive
…e, created separate synapses.c for sinusoid to process neuron array separately, altered print outs, couple bug fixes
|
Hi all! I'm working with Andrew Davison at the Institute of Neuroscience Paris-Saclay on extending PyNN to support spike-based learning algorithms such as e-prop and EventProp across neuromorphic backends. I've been reviewing this PR as part of a SpiNNaker feasibility assessment. The implementation looks complete, with two known integration sticking points noted in the description. Is there still active interest in resolving those and getting this merged into the main tools? Bek |
|
Hello @Bekkozhan - this was worked on a number of years ago, and I am not sure how easy it will be to update and merge into the main tools - I don't work on this project any more (though I keep an eye out for things that happen). I'm tagging @rowleya and @Christian-B who are still working on it to see if they have any opinions about whether this branch/PR is worth reviving. |
|
Thank you @andrewgait - will wait for @rowleya and @Christian-B to comment on this. |
|
I can say that I would be interested in having this in the main code for people to use. EProp is still an important learning algorithm so a working implementation directly on SpiNNaker would be very nice to have! In terms of the sticking points:
There are clearly some conflicts at this point that need resolving also; hopefully this wouldn't be too hard to do! |
|
Thank you @rowleya — great to hear there's interest in moving this forward. Happy to help with the conflict resolution if that would be useful. |
Yes, you are very welcome to look and see if you can resolve any of it! I may not have much time to look this week... |
|
Hi Andrew (@rowleya) — following up on your comment, I've resolved 10 of the 15 conflicting files and pushed to a branch on my fork: Bekkozhan/sPyNNaker:eprop-master-merge. Resolved (no functional changes):
Five files left at the eprop version — three decisions needed:
Happy to implement whatever you decide on points 1–3. |
|
Update: following your emails, 3 more files are resolved —
Remaining: |
|
OK, so I had a bit of a discussion this morning with developers and have some more ideas and suggestions:
The only thing to check here is that the sign passes through all the code, including the ring buffers themselves. In general there is no issue with signed values, so long as the handling is done correctly. I might then suggest that if the code no longer performs an "abs" on the weights (or if it does, remove that), then a test where there are synapses with mixed positive and negative weights in a single connection might be worth testing. The only issues I could potentially predict would be on the weight scaling, since this now needs to make sure it accounts for the sign.
That all sounds fine in that case!
Great!
OK, on synapses.c, I just checked and I see that the saturation is disabled. This is a critical issue I think, since if you saturate at this point, it will go very wrong I think! This was designed to be a very fast check, because adding synapses is a very common operation. I guess the issue here is the signed synapses again... how do you do a saturation check on a signed integer which might saturate in either direction? I will have a think about this and see if there is a general and fast solution! On the Makefile, it looks like it just needs merging together; we have added some stuff into master since this PR was created. |
|
@rowleya thanks for looking into this — pushed the Makefile merge now (14/15 resolved). |
Incorporate eprop models into the main tools.
This implementation effectively sits alongside the current "standard" neuron models and does not impinge too much on those; the current sticking points (which could be worked on) are: