CECN1 Inhibition

From Computational Cognitive Neuroscience Wiki

Jump to: navigation, search

Contents

Inhibition

Back to CECN1 Projects

Project Documentation

(note: this is a literal copy from the simulation documentation -- it contains links that will not work within the wiki)

The network in the right view panel contains a 10x10 unit input layer, which projects to both the 10x10 hidden layer of excitatory units, and a layer of 20 inhibitory neurons (figure~3.20 in the textbook). These inhibitory neurons will regulate the activation level of the hidden layer units, and should be thought of as the inhibitory units for the hidden layer (even though they are in their own layer for the purposes of this simulation). The ratio of 20 inhibitory units to 120 total hidden units (17 percent) is like that found in the cortex, which is commonly cited as roughly 15 percent (White, 1989a; Zilles, 1990). The inhibitory neurons are just like the excitatory neurons, except that their outputs contribute to the inhibitory conductance of a neuron instead of its excitatory conductance. We have also set one of the activation parameters to be different for these inhibitory neurons, as discussed below.

Let's begin as usual by viewing the weights of the network.

  • Select r.wt in the .PanelTab.FFExcite netview control panel and then click on some of the hidden layer and inhib layer units with the red arrow.

Most of the weights are random, except for those from the inhibitory units, which are fixed at a constant value of .5. Notice also that the hidden layer excitatory units receive from the input and inhibitory units, while the inhibitory units receive feedforward connections from the input layer, and feedback connections from the excitatory hidden units, as well as inhibitory connections from themselves.

Now, we will run the network. Note the graph view above the network, which will record the overall levels of activation (average activation) in the hidden and inhibitory units.

You will see the input units activated by a random activity pattern, and after several cycles of activation updating, the hidden and inhibitory units will become active. The activation appears quite controlled, as the inhibition counterbalances the excitation from the input layer. Note that the level of the leak current, g_bar.l, is very small at .01, so that virtually all of the counterbalancing of excitation is being performed by the inhibition, not by the leak current. From the average activity plotted in the graph window (figure 3.21 in the textbook), you should see that the hidden layer (black line) has around 10 percent activation.

In the next sections, we manipulate some of the parameters in the control panel to get a better sense of the principles underlying the inhibitory dynamics in the network. Because we will be running the network many times, you may want to toggle the network display off to speed up the settling process (the graph log contains the relevant information anyway).

  • To toggle the display off, click the Display button in the upper left-hand corner of the network view panel window.

Strength of Inhibitory Conductances

Let's start by manipulating the maximal conductance for the inhibitory current into the excitatory units, ff_hidden_g_bar.i, which multiplies the level of inhibition coming into the hidden layer (excitatory) neurons. Clearly, one would predict that this plays an important role.

  • Decrease ff_hidden_g_bar.i from 5 to 3 and press Run. Then increase it to 7 and press Run.

Question 3.10 (a) What effect does decreasing ff_hidden_g_bar_i have on the average level of excitation of the hidden units and of the inhibitory units? (b) What effect does increasing ff_hidden_g_bar.i have on the average level of excitation of the hidden units and of the inhibitory units? (c) Explain this pattern of results.


  • Set ff_hidden_g_bar.i back to 5.

Now, let's see what happens when we manipulate the corresponding parameter for the inhibition coming into the inhibitory neurons, ff_inhib_g_bar.i. You might expect to get results similar to those just obtained for ff_hidden_g_bar.i, but be careful -- inhibition upon inhibitory neurons could have interesting consequences.

  • First Init and Run with a ff_inhib_g_bar.i of 4 for comparison. Then decrease ff_inhib_g_bar.i to 3 and Run,

and next increase ff_inhib_g_bar.i to 5 and Run.

With a ff_inhib_g_bar.i of 3, you should see that the excitatory activation drops, but the inhibitory level stays roughly the same! With a value of 5, the excitatory activation level increases, but the inhibition again remains the same. This is a difficult phenomenon to understand, but the following provide a few ways of thinking about what is going on.

First, it seems straightforward that reducing the amount of inhibition on the inhibitory neurons should result in more activation of the inhibitory neurons. If you just look at the very first blip of activity for the inhibitory neurons, this is true (as is the converse that increasing the inhibition results in lower activation). However, once the feedback inhibition starts to kick in as the hidden units become active, the inhibitory activity returns to the same level for all runs. This makes sense if the greater activation of the inhibitory units for the ff_inhib_g_bar.i = 3 case then inhibits the hidden units more (which it does, causing them to have lower activation), which then would result in {\em less} activation of the inhibitory units coming from the feedback from the hidden units. This reduced activation of the inhibitory neurons cancels out the increased activation from the lower ff_inhib_g_bar.i value, resulting in the same inhibitory activation level. The mystery is why the hidden units remain at their lower activation levels once the inhibition goes back to its original activation level.

One way we can explain this is by noting that this is a dynamic system, not a static balance of excitation and inhibition. Every time the excitatory hidden units start to get a little bit more active, they in turn activate the inhibitory units more easily (because they are less apt to inhibit themselves), which in turn provides just enough extra inhibition to offset the advance of the hidden units. This battle is effectively played out at the level of the derivatives (changes) in activations in the two pools of units, not their absolute levels, which would explain why we cannot really see much evidence of it by looking at only these absolute levels.

A more intuitive (but somewhat inaccurate in the details) way of understanding the effect of inhibition on inhibitory neurons is in terms of the location of the thermostat relative to the AC output vent -- if you place the thermostat very close to the AC vent (while you are sitting some constant distance away from the vent), you will be warmer than if the thermostat was far away from the AC output. Thus, how strongly the thermostat is driven by the AC output vent is analogous to the ff_inhib_g_bar.i parameter -- larger values of ff_inhib_g_bar.i are like having the thermostat closer to the vent, and will result in higher levels of activation (greater warmth) in the hidden layer, and the converse for smaller values.

  • Set ff_inhib_g_bar.i back to 4 before continuing (or hit Defaults).

Roles of Feedforward and Feedback Inhibition

Next we assess the importance and properties of the feedforward versus feedback inhibitory projections by manipulating their relative strengths. The control panel has two parameters that determine the relative contribution of the feedforward and feedback inhibitory pathways: ff_ff_wt_scale applies to the feedforward weights from the input to the inhibitory units, and ff_fb_wt_scale applies to the feedback weights from the hidden layer to the inhibitory units. These parameters (specifically the .rel components of them) uniformly scale the strengths of an entire projection of connections from one layer to another, and are the arbitrary wt_scale.rel (r_k) relative scaling parameters described in section 2.5.1 of the textbook.

  • Set ff_ff_wt_scale.rel to 0, effectively eliminating the feedforward excitatory inputs to the inhibitory neurons from the input layer.

Question 3.11 (a) How does this affect the behavior of the excitatory and inhibitory average activity levels? (b) Explain this result. (Hint: think about the anticipatory effects of feedforward inhibition.) Next, set ff_ff_wt_scale.rel back to .35 and set ff_fb_wt_scale.rel to 0 to turn off the feedback inhibition. (c) Now what happens? (d) Try finding a value of ff_ff_wt_scale.rel (in increments of .05) that gives roughly the same activity level as the initial default system -- how does this differ from the initial system? Explain this pattern of results. (e) Explain why both kinds of inhibition are useful for producing a system that responds in a rapid but controlled way to excitatory inputs.


Time Constants and Feedforward Anticipation

We just saw that feedforward inhibition is important for anticipating and offsetting the excitation coming from the inputs to the hidden layer. In addition to this feedforward inhibitory connectivity, the anticipatory effect depends on a difference between excitatory and inhibitory neurons in their rate of updating, which is controlled by the dt.vm parameters hidden_dt.vm and inhib_dt.vm in the control panel (cf. section 2.4.5, equation 2.7 in the textbook). As you can see, the excitatory neurons are updated at .04 (slower), while the inhibitory are at .15 (faster). The faster updating of the inhibitory neurons allows them to more quickly become activated by the feedforward input, and send anticipatory inhibition to the excitatory hidden units before they actually get activated.

  • To verify this, click on Defaults, set inhib_dt.vm to .04 (instead of .15), and then Run.

The faster time constant also enables inhibition to more rapidly adapt to changes in the overall excitation level. There is ample evidence that cortical inhibitory neurons respond faster to inputs than pyramidal neurons (e.g., Douglas & Martin, 1990).

One other important practical point about these update rate constants will prove to be an important advantage of the simplified inhibitory functions described in the next section. These rate constants must be set to be relatively slow to prevent oscillatory behavior.

  • To see this, press Defaults, and then set inhib_dt.vm to .2, and hidden_dt.vm to .1 and Run.

These oscillations are largely prevented with finer time scale upgrading, because the excitatory neurons update their activity in smaller steps, to which the inhibitory neurons are better able to smoothly react.

Effects of Learning

One of the important things that inhibition must do is to compensate adequately for the changes in weight values that accompany learning. Typically, as units learn, they develop greater levels of variance in the amount of excitatory input received from the input patterns, with some patterns providing strong excitation to a given unit and others producing less. This is a natural result of the specialization of units for representing (detecting) some things and not others. We can test whether the current inhibitory mechanism adequately handles these changes by simulating the effects of learning, by giving units excitatory weight values with a higher level of variance.

  • First, press Defaults to return to the default parameters. Run this case to get a baseline for comparison.

In this case, the network's weights are produced by generating random numbers with a mean of .25, and a uniform variance around that mean of .2.

  • Next, set the wt_type parameter in the control panel to TRAINED, and hit the SetWeights button.

The weights are then initialized with the same mean but a variance of .7 using Gaussian (normally) distributed values. This produces a much higher variance of excitatory net inputs for units in the hidden layer. There is also an increase in the total overall weight strength with the increase in variance because there is more room for larger weights above the .25 mean, but not much more below it.

  • Press Run to see what difference this makes for the overall excitatory level.

You should observe a greater level of excitation using the trained weights compared to the initial untrained weights.

  • You can verify that the system can compensate for this change by increasing the ff_hidden_g_bar_i to 8.

Bidirectional Excitation

To make things simpler at the outset, we have so far been exploring a relatively easy case for inhibition where the network does not have the bidirectional excitatory connectivity that overwhelmed the constant leak counterweight in section 3.4.3 of the textbook. Now, let's try running a network with two bidirectionally connected hidden layers (figure 3.22).

  • First, select Defaults to get back the default parameters, do a Run for comparison, and then set network in the control panel to BidirExcite instead of FFExcite. Then click on the .T3Tab.BidirExcite tab in the right viewer panel to view this network.

In extending the network to the bidirectional case, we also have to extend our notions of what feedforward inhibition is. In general, the role of feedforward inhibition is to anticipate and counterbalance the level of excitatory input coming into a layer. Thus, in a network with bidirectional excitatory connectivity, the inhibitory neurons for a given layer also have to receive the top-down excitatory connections, which play the role of "feedforward" inhibition.

  • Verify that this network has both bidirectional excitatory connectivity and the "feedforward" inhibition coming back from the second hidden layer by examining the r.wt weights as usual.
  • Now Run this network.

The graph view (figure 3.23) shows the average activity for only the first hidden and inhibitory layers (as before). Note that the initial part up until the point where the second hidden layer begins to be active is the same as before, but as the second layer activates, it feeds back to the first layer inhibitory neurons, which become more active, as do the excitatory neurons. However, the overall activity level remains quite under control and not substantially different than before, which is in distinct contrast to the earlier simulations with just a leak current operating.

Next, we will see that inhibition is differentially important for bidirectionally connected networks.

  • Set the bd_hidden_g_bar.i parameter (note the bd -- in the 2nd group of parameters) to 3, and Run.

This reduces the amount of inhibition on the excitatory neurons. Note that this has a relatively small impact on the initial, feedforward portion of the activity curve, but when the second hidden layer becomes active, the network becomes catastrophically over activated -- an epileptic fit!

  • Set the bd_hidden_g_bar.i parameter back to 5.

Set Point Behavior

Our final exploration of inhibition provides some motivation for the summary inhibition functions presented in the next section. Here, we explore what happens to the activity levels when different overall levels of excitatory input are presented to the network.

  • First, press Init on the control panel and Run the network for purposes of comparison.}

The input pattern is set to have the default of 20 (out of 100) units active, which is what we have been using all along.

  • Change the input_pct field in the control panel to 15 instead of 20, Apply, and then hit the SetInputPct button to make a new input pattern with this new percentage activity. Then do Run.

This changes the input pattern to have 15 units active. When you Run now, the activity level is not substantially different from the previous case (a difference of 1--2%).

  • Next, set input_pct to 25, Apply, SetInputPct, and Run.

Again, you should observe only modest increases in activity level.

Thus, the network appears to be relatively robust to changes in overall input excitation, though it does show some effect. Perhaps a more dramatic demonstration comes from the relatively small differences between the initial activity level in the hidden units compared to the subsequent level after the input from the second hidden layer has kicked in. It is this approximate {\em set point} behavior, where the system tends to produce a relatively fixed level of activity regardless of the magnitude of the excitatory input, that is captured by the inhibition functions described in the next section.


Question 3.12 Explain in general terms why the system exhibits this set point behavior.


  • Last, you can also change the activation function, using the act_fun setting in the control panel.

You should see that the same basic principles apply when the units use a spiking activation function.

Exploration of kWTA Inhibition (Section 3.5.4)

  • Reset the parameters to their default values using the Defaults button, set the network to BidirExcite, and Run to get the initial state of the network.

This should reproduce the standard activation graph for the case with actual inhibitory neurons.

  • Now, set the bdir_inhib.type to KWTA_INHIB instead of the default UNIT_INHIB to use the basic kWTA function described in the text. Set the bdir_hidden_g_bar.i parameter to 1.0, and the bdir_hidden_dt.vm parameter to to .2. Hit Apply.

The k value of this function is set according to the bdir kwta.pct value in the control panel (this proportion value of .15 is automatically translated into a corresponding k value, 15 in this case, by the software).

  • Press Run.

Notice that roughly the same level of activity results (the inhibitory activity is at zero, because these units are not used for this function). Also, the activity function is somewhat smoother, because the kWTA function effectively does a perfect job of anticipating the appropriate level of inhibition required. The faster bdir_hidden_dt.vm parameter makes the activation rise very quickly -- more on this below.

  • Now select KWTA_AVG_INHIB for the bdir_inhib.type to use the average-based kWTA function, and set the kwta.pt value there to .6 instead of .25 (Apply), and Run again.

You should observe that the hidden layer activation stabilizes on the target activation level of 15 percent.

  • To test the set point behavior of the kWTA functions, run the network with input_pct levels of 10 and 30 (do not forget to hit SetInputPct) in addition to the standard 20 (you can do this for both types of kWTA function).

Notice that these functions exhibit stronger set point behavior than the inhibitory unit based inhibition (with the average-based kWTA showing just slightly more variability in overall activity level). This is because the kWTA functions are designed explicitly to have a set point, whereas the inhibitory units only roughly produce set-point behavior. Thus, we must always remember that the kWTA functions are merely an {\em idealized approximation} of the effects of inhibitory neurons, and do not behave in an identical fashion.

Next we will see one of the main advantages of the kWTA functions.

  • Set the input_pct back to the default 20 (and SetInputPct). Set bdir_inhib.type to KWTA_INHIB with kwta_pt set to .25, and try to find the fastest update parameter bdir_hidden_dt.vm (in increments of .1, to a maximum of 1) that does not result in significant oscillatory behavior.

Question 3.13 (a) What was the highest value of bdir_hidden_dt.vm that you found? How does this compare with the value of this parameter for unit-based inhibition (.04)? (b) Why do you think kWTA can use such a fast update rate where unit-based inhibition cannot?


  • Return the bdir_hidden_dt.vm parameter to .2 before continuing.

For the k-or-less property of the basic kWTA function to apply, you have to set a leak current value g_bar.l that prevents weak excitation from activating the units, but allows strong excitation to produce activation.

  • To see this k-or-less property, increase bdir_hidden_g_bar.l (in .1 increments) to find a value that prevents excitation from an input_pct of 10 or less from activating any of the hidden units, but allows excitation of 20 or more to activate both layers.
Personal tools