Counting synapses within an ensemble and other questions

Hi everyone, I am new to nengo. I was just wondering how many synapses are present within in ensemble with say, 1500 neurons? Or how many synapses would be there when the ensemble synapses back onto itself (nengo.Connect(ens.neurons, ens.neurons))?
Also, how do I choose what solvers? Is one of them the most biologically plausible?

Thanks!

Any help is appreciated!

Hi @solvers, welcome to the forum!

Making an ensemble with any number of neurons does not create any synapses (practically or theoretically) – it only constructs N=1500 neuron models. Those neurons are considered part of the same group by virtue of being sensitive to the same value (in the case of NEF representation).

Synapses are introduced when you make connections. If you do nengo.Connection(ens.neurons, ens.neurons), the number of synaptic connections depends on the transform you pass in. The transform is of shape (ens.n_neurons, ens.n_neurons), meaning that you are specifying the full connection weight matrix between each neuron and every other neuron in the ensemble. For 1500 neurons, that means 1500 x 1500 = 2,250,000 synaptic connections. Of course, if you set any of those connection weights to be 0 then you could consider that to be the lack of a synaptic connection, so 2,250,000 synapses would be the maximum that you can specify.

Decoder solvers are only used when making NEF-style networks in which an ensemble represents a vector, and that vector is transformed through connections to other ensembles. If you’re not making any NEF-style connections, then the solver is not used. We will be making this more obvious in the next version of Nengo.

If you are making NEF-style networks with decoded connections, I wouldn’t say that there’s a very clear distinction between the solvers in terms of biological plausibility. As you likely know, real biological neural networks can change rapidly as a result of synaptic plasticity. A decoded NEF connection is a static snapshot of a possible configuration of synaptic connections. I think of it as the end product of a biological learning process – the solver encapsulates but does not aim to emulate that process, its only goal is to figure out the weights that will best solve a particular optimization problem. As such, I would not say that any of the solvers is more or less biologically plausible.

One question that you could reasonably ask about the biological plausibility of decoded connections is whether the weight matrix you get in the end is biologically plausible. Generally, the answer is “probably not” because we use high-precision floats (which are likely implausible since synapse and ion channel numbers quantize the space of possible connection weights), we allow both positive and negative weights from the same neuron (i.e., a neuron can be excitatory and inhibitory), and we don’t constrain the maximum or minimum weight value (there is likely a limitation somewhere, whether it’s an absolute max/min or a relative difference between the strongest and weakest synaptic connection). These are all issues that have been explored in several research projects, so if you’re interested in building strictly biologically plausible neural networks, I or someone else on the forum can point you to those papers.