Hello everyone!
I am trying to understand the theory behind Nengo-DL internals in detail. For now the focus is on obtaining a spiking network from a conventional analog model trained in TF (and not on training the model in Nengo-DL environment).
TLDR: Please cite the research papers or any public design documents of Nengo-DL on this thread.
Specifically I have the following questions.
1> One of the ways to create a spiking model is to train a conventional model with analog neurons and then replace only the analog neurons with spiking neurons, keeping the trained weights (and biases if present) the same in the spiking network. With a conventional neuron, the weighted sum of inputs is fed into the activation function and we obtain a continuous output. With respect to Nengo-DL, what computations take place with a spiking neuron? Following is my understanding:
a) Spikes are produced (in Poission distribution) from the input data to feed in the spiking input layer. The spikes are fed to the input layer for a certain n_steps
time.
b) The spiking neurons in the input layer further compute their membrane potential based on the input spikes to them (or does Nengo-DL compute current from the spikes internally to modify the membrane potential?) and then their behaviour simply follows the membrane potential equation i.e. if their potential reaches threshold, they fire and their membrane potential is reset. As a result, over the interval of n_steps
time the spiking neurons in the input layer keep on firing spikes.
c) The input to the intermediate layers (i.e. the layers lying next to input layer) are again spikes from the previous layers and above computation in (b) continues up until the output layer, during which the sparse spikes are smoothed with the given synapse
so as to not let the effect of spike suddenly disappear. But what role do the learned connection weights between the layers play? Do they multiply to the magnitude of discrete spikes? That is: considering the magnitude of spikes 1, and an array of spikes produced in n_steps
time [0, 0, 1, 0, 0, 1, 0, 0, 1, …], the array is multiplied by learned connection weights, say 10 for a connection. Thus input to the neuron on the other end of connection is [0, 0, 10, 0, 0, 10, 0, 0, 10, …]. Is it? I am probably wrong here…
d) In the output layer, the inputs are similarly the spikes and output are also the spikes, however they are counted in the time frame of n_steps
and then the count from each individual neuron (each representing a class) is fed to the softmax layer (if available) for finding out the probability score of each class.
All the information flow from the input layer to the output layer happens in a time duration of n_steps
millisecond. Please correct me wherever I am wrong in my above understanding.
2> I know that scale_firing_rates
increases the firing rate of neurons but how does it theoretically work? Any formal equation?
Following are the two papers which I am aware of (haven’t gone through the first one yet):
and I am looking for other papers to get more insights. Thanks!