Hello! I was wondering if you help me understand the BG model and explain the code execution flow in Basal Ganglia model
I have a few questions:
code execution order – even though I read the chapters from “How to Build a Brain” book and checked the source code, I could not understand how I can see the competition between pathways happening in Nengo, and at what level?
which weights are tuned?
the population representation of the symbols is not clear to me. For instance, how to choose the necessary dimensions and how do they relate to the encoded symbols (e.g. in the populations – Does each population encode one symbol?
Also, is there way to find a more detailed code than the source code where we can see what each structure of Basal Ganglia contains (to see the connections between the neuron ensembles in each structure to other neuron ensembles in different structures).
I edited this question to try to make my doubts clearer.
The Basal Ganglia (BG) network is a recurrent network, so it’s a fairly complex system. I’m not entirely sure what you mean by “code execution order”, but I take it to mean that you are asking how information flows within the BG network? If that is what you are asking, this paper explains the details of the BG network. Note that the BG network in Nengo is a Nengo adaptation of the BG network presented by Gurney, Prescott and Redgrave in their 2001 paper (google scholar link).
I’m not sure what you mean by this question too. The Nengo BG network (as with all other built in networks in Nengo) are initialized with randomly generated neuron properties. This being the case, the weights between the neural ensembles are all “tuned” when the model is built (and each time you build the model, it generates a new set of neurons and “tunes” a new set of weights). By default, Nengo uses the NEF algorithm to “tune” (we use the words “solve”) for these weights. You can read a summary of the NEF algorithm here, or in detail in the Neural Engineering book.
The number of dimensions chosen to represent the SPA symbols is generally decided upon by the person designing the network. If the network needs to work with a lot of symbols, a higher dimensionality is used. If you are familiar with programming, you can think of the dimensionality as being similar to the number of bits used in a numerical representation (e.g., 8-bit integer vs 16-bit integer). A larger dimensionality allows you to represent more symbols in the same space without the symbols overlapping or clashing with each other.
When designing networks, we typically start out with a dimensionality of 16 or 32. As the network is fleshed out, and the performance is evaluated, we increase the dimensionality as needed to achieve a desired performance.
Yes, the source code for the BG network in Nengo can be found here.