Inhibitory Neurons

Hi everyone, I am back on the forum again to better understand the concept of neural inhibition.
I have two questions:

Question 01:
In the forum question link you can identify that the inhibition control signal is created from a logic using the “function” method. Would it be possible to reproduce this same behavior of the signal going to zero or inhibiting the output of any neural set, regardless of the input being provided without having a threshold condition defined by the “function” method? Would it be possible to set other “Connection” or “Ensemble” parameters to achieve the same effect? If so, could you help me? I would like to implement the same as the above example but without using the “function” method, using only nengo’s native parameters.

Question 02:
Another doubt, that might help me think about how to solve this, is that it was possible to observe that in the example contained in the [link] “Inhibitory gating of ensembles — Nengo 3.2.1.dev0 docs” the inhibitory control signal is a square wave, using the “Picewise” method to create it. So when the inhibitory control signal is logic level 1 the output is then inhibited and therefore its value is zero. But I believe this works well, because the signal is kept at 1 for a period of time defined in the function itself, and this does not happen with neurons because they exhibit exponential behavior, right? How do I extend the activation time of a neuron? How can I leave the spike saturated for x seconds so that I can completely inhibit a portion of a signal of interest?

Thank you in advance for your willingness to help me.
@xchoo , @Eric can u help me???

Hi @vzanon, and welcome back to the Nengo forums! :smiley:

I’m not entirely sure what you are asking in your first question. Are you asking if it’s possible to inhibit the output of a neural ensemble based on some inhibitory signal? If that is your question, then yes, it is. The example you linked (here) demonstrates exactly how to do this.

Yes, it is the case that in that example, one of the ensembles (A) is being inhibited by an “artificial” piecewise control signal. However, the other ensemble (B) is being inhibited by the output of a spiking ensemble (C). I think that this is what you are trying to ask? In Nengo, we rarely use single spikes to inhibit the output of ensembles (although, it is possible to do, I’ll expand a bit later). Rather, in Nengo, we use the decoded output of an ensemble (basically, a lot of spikes smoothed together) as the inhibitory control signals.

There are a few ways to do this. If the inhibition time is relatively short (within a few 100 milliseconds), you can just use a very long time constant on the synapse of the inhibitor connection. As an example, the following code

nengo.Connection(C, B.neurons, transform=[[-5]] * n_neurons, synapse=0.1) 

will inhibit an ensemble for about 0.34s. If you want to stick with generally biologically realistic synaptic time constants, the maximum synaptic time constant is about 1-5s. You may also have to modify the inhibition weight (in the code above it’s -5) to get the results you want. I should also note that using large synaptic time constants can lead to the output of the inhibited ensemble being “slow” to respond (when the inhibition is removed).

Another method is to use a circuit to generate the inhibitory signal. In my PhD thesis (Figure 4.6 & 4.7 – also see this forum post), I describe a fast decaying integrator circuit which I used to generate an inhibitory signal. You can modify the length of the inhibitory signal by adjusting the decay value on the feedback of the integrator. With this approach, you can get the inhibitory signal to stick around for tens to hundreds of seconds.

Hi @xchoo , thank you for your reply. Hi, first of all I apologize for the delay in responding to you. But I already anticipate that it helped me a lot to understand some points that I was in doubt.

But what I wanted to ask in the first question is if it would be possible to inhibit the output of a neural set without using an inhibitory signal? I don’t know if my question was clearer.

Another question, how did you arrive at that time: " … will inhibit an ensemble for about 0.34s."

I found the proposal you commented on regarding creating a slow decay integrating signal to keep inhibiting for x seconds (used in your thesis and the example you provided) super interesting. I will try to adopt such a methodology.

In advance, thank you for the response.

I’m not entirely sure what you mean by this question… When we refer to neural inhibition (both here, and on the Nengo documentation), we are typically refer to the scenario where, when exposed to some control signal (i.e., the inhibitory signal), the output activity (spikes) of the neurons being inhibited get suppressed (i.e., no spikes are produced). In this context, without the inhibitory signal, there is no way to “tell” when the neurons should be inhibited or not.

Now, I should clarify that this inhibitory signal doesn’t have to come from an external source. It can be generated within the network itself (or even by the ensemble being inhibited).

I built a quick network, and ran the Nengo simulation to get that number. :grinning: