Basal - Thalamus Questions

Hi Everyone,

I’m learning how to use the basal ganglia and thalamus using the nengo_spa.modules. I created a setup with three state inputs that vary the symbol over time (used to create changing input values). the three inputs connect to a basal ganglia module and then to the thalamus and finally to an spa state.

I expected the basal ganglia to respond as a WTA block and the thalamus to suppress the rest of the inputs. Instead, I found the output often had multiple states, and often not the most dominant and occasionally doesn’t even match the input at all.

I found there was a considerable amount of noise on the thalamus signal. I attempted to add more neurons and some filtering. This created some, but little improvement.

I’ve looked for examples on these modules and connecting them together, but haven’t been successful. Can anyone help me better understand what I’m missing or direct me to some examples on using these? I could consider an SPA action as well, but I’m trying to avoid that at this time.

Hi @MZeglen,

From my experience, the BG network have some peculiar behaviour, especially in input regimes that it is not designed for. First and foremost, I tend to think of the BG network in Nengo more of a soft max (i.e., it can allow multiple input values through), than a WTA network. Think of the network as amplifying the difference between the input values, rather than a strict WTA operation. If you want to get the full WTA behaviour, combine the BG network with the thalamus network with the mutual_inhibit=1 option. Note: You can increase the mutual_inhibit value to get a stronger WTA response, but doing so sometimes “locks” the output to a specific value. You’ll need to experiment with this to find the appropriate values for your network.

As for the BG itself, it works best when the input values are in the range of 0.3 to 1. Below 0.3, the neurons responsible for responding to that value don’t fire, so it’s essentially 0 at that point. Above 1, and the neurons will start saturating and can cause weird effects with the inhibition. Apart from that, if your input values are within this range, the BG should be able to perform as intended.

Can you post a snippet of your code that is exhibiting these weird behaviours? Given the complexity of the BG network, it will probably be easier to debug that network than make suggestions on how to get it working for a general problem.