Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a work-in-progress / proof-of-concept that seeks to improve the accuracy of a single layer encode-decode by minimizing the noise from encoding the input into spikes.
This idea is courtesy of @tcstewar who suggested that the spike generator could be implemented using a binary code where each spike represents a bit of information in the binary representation of the node's input vector. This uses
2*d*k
spike generators to represent any input vector from the(-1, +1)^d
-cube with2^k
precision. There is no variability from the ideal PSC, because the synapse isNone
and the code is transmitted precisely every time-step. All of the error (on the encoding side) comes from quantizing the signed input values tok
bits.The trade-off is this sends
O(k)
spikes to each input neuron every time-step, whereas the previous on/off encoding scheme was sparse in time (i.e., trading between spike density, dt, tau, and input frequency). To further explore this trade-off, the on/off code should be extended to supportk
heterogeneous and independent spike trains (i.e., inflate the generator's total spike count by a factor ofk
to reduce variance by a factor ofsqrt(k)
).The implementation is a work-in-progress; I took the path-of-least-resistance in order to test this out as quickly as possible. At the very least this should help provide a starting template for what different encoding schemes might look like in code.
TODO:
k
times.