CECN1 Units

From Computational Cognitive Neuroscience Wiki

Jump to: navigation, search

Contents

Exploration of the Individual Neuron (Unit)

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)

This simulation illustrates the basic properties of neural unit activation, reflecting a balance of excitatory and inhibitory influences (including leak and synaptic inhibition).

  • To start, it is usually a good idea to do Object/Edit Dialog in the menu just above this text, which will open this documentation in a separate window that you can more easily come back to. Alternatively, you can always return by clicking on the ProjectDocs tab at the top of this middle panel.

Orientation to the Software (ControlPanel and Views)

As this is the first simulation project in the textbook, we begin with some introductory orientation. All of the major controls and parameters for the simulation are contained within the .edits.ControlPanel object located in the middle of the 3 panels visible in the main project window (clicking the link will take you there, and you can also access it from the tab at the top of this middle panel). The right panel contains various 3D graphical displays of simulation data, including the network (NetView or Network View) and various graphs and grid-like displays (Graph view, Grid view).

In this simulation, there are two different ways to view the results, selectable by the tabs at the top of the right side of the window:

  • The .T3Tab.Network tab shows the (very simple) network that is being simulated, with a single sending (input) unit (at the bottom) that sends activation to the receiving unit (at the top). We are primarily concerned with how the receiving unit responds to the activation input from the sending unit.
  • The .T3Tab.CycleOutputData tab shows a graph of the receiving unit's main variables (see below for details) over time, in response to the sending activation.

We will see this single input being turned on and then off again, and observe the response of the receiving unit. To see this, we can run the simulation.

At the bottom of the .edits.ControlPanel are 4 buttons: Init, Run, Step, Stop:

  1. Init -- initializes the graph display and starts the simulation over from wherever it might have left off.
  2. Run -- runs the full set of cycles of activation updating (updating of the equations that govern the behavior of the neural unit), displaying the results in the Network and CycleOutputData frames on the right hand side of the window.
  3. Step -- runs one single cycle of activation updating.
  4. Stop -- if running, this will stop running.
  • Text like this that is indented with a bullet all by itself (not part of a list) indicates actions to take. In this case, hit Init and Run, and look at the .T3Tab.Network display.

You should see that very shortly after the input unit comes on (indicated by the yellow color), the receiving unit is activated by this input. To get a better idea of the precise trajectory of this activation, it is much more convenient to use the Graph View, which displays the information graphically over time, allows multiple variables to be viewed at the same time, and even allows multiple runs (e.g., with different parameters) to be compared with each other.

The Graph View

The plots produced by this simulation are much like that shown in Figure 2.9 in the textbook. Only the excitatory and leak currents are operating here, with their conductances (g_bar.e, g_bar.l) and reversal potentials (e_rev.e, e_rev.l) as shown in the control panel.

  • Press the Run button on the control panel to display a new graph.

This produces a plot using the current parameters (figure 2.17 in textbook). You should see various lines plotted over 200 time steps (cycles) on the X axis. Note that the standard 0-1 normalized parameters are used by default.

Here is a quick overview of each of the variables -- we'll go through them individually next (see .docs.GraphHelp for more details on how to determine what is being graphed, and how to configure it):

  • net (red line) = net input, which is the total excitatory input to the neuron (net = g_e(t) * g_bar_e). g_e(t) is the proportion of excitatory ion channels open, and it goes from 0 prior to cycle 10, to 1 from 10-160, and back to 0 thereafter. Because g_bar_e = .4, the net value goes up to .4 from cycle 10-160. The timing of when the input comes on and goes off is in the ControlPanel, on_cycle and off_cycle.
  • I_net (orange line) = net current (sum of individual excitation and leak currents), which is excitatory (upward) when the excitatory input comes on, and then returns to zero with constant input. When the excitatation goes off, the net current is negative as the constant leak current takes over and pushes the membrane potential down back to rest.
  • v_m (yellow line) = membrane potential. This starts out at the resting potential of .15 (-70mV in biological units), and then increases with the excitatory input. As you can see, the net current (I_net) shows the rate of change of the membrane potential.
  • act (green line) = activation. This shows the amount of activation sent to other units -- by default it is a rate code using the NOISY_XX1 function -- to see discrete spiking, switch the act_fun in the control panel to SPIKE instead of NOISY_XX1.
  • act_eq (blue line) = rate-code equivalent activation -- this always shows a rate code equivalent for whatever activation function is being used (if a rate code like NOISY_XX1 is being used, then it is the same as act).

First, let's focus on the net line (it's the red one, displayed as a solid line in figure 2.17 in text). This shows the net input to the unit, which starts out at 0, and then rapidly jumps to .4, remaining there until around 160 time steps, where it goes back to 0 again. Recall that this net input is just another name for the total excitatory input to the neuron (i.e., net = g_e * g_bar_e). In this simulation, the sending unit always sends a g_e value of 1 when it's on, and a 0 when off. Later, we will manipulate the value of g_bar_e in the control panel to control the magnitude of the net input (it is .4 because the default value of g_bar.e is .4). The timing of the input is controlled by the parameters on_cycle and off_cycle (the total number of cycles is controlled by n_cycles).

The second line, I_net (in orange/dashed), shows the net current in the unit, reflecting the overall balance between the excitatory net input and the constant leak current (plus inhibition in general, but this is not present in this simulation). As expected, this shows an excitatory (upward) current when the input comes on, and an inhibitory (downward) one when the input goes off. Because it reflects changes in the unit, it goes back to zero after the unit adapts to the steady excitatory input.

The third line, v_m (in yellow/dotted), shows the membrane potential, which starts at the resting potential of .15, then increases with the excitation, and decreases back to rest when the input goes off. This integrates the changes reflected in the I_net variable, and represents the overall integration of all the information coming into the unit.

The fourth line, act (in green/dash-dot), shows the activation value (using the NOISY_XX1 rate-coded activation function) that results from the membrane potential. It goes from 0 up to roughly .72 and back down again. Note that the activation rise trails the net input by several cycles -- this is due to the time it takes for the membrane potential to reach the firing threshold for the neuron.

Software Tip: You can click on any line in the graph log display using the red-arrow tool (click on the red arrow button in the upper-right corner of the 3d view window to see the exact values at the point where you clicked (as displayed in the graph caption at the bottom). You can also click on the light green outer frame to obtain a spreadsheet view of all the data being plotted in the graph. You can then scroll through this data to find any value you might want to find.

  • Click with the mouse on the v_m line on the graph to verify that the activation rise does indeed occur right around the threshold value for the membrane potential (.25).

The fifth line, act_eq (blue) is not turned on to begin with. To turn it on, click the on! button next to it on the graph view control panel that shows up in the middle panel when you click on the .T3Tab.CycleOutputData tab (see the wiki .Wiki.Graph_View and local docs .docs.GraphHelp for more info). This value shows the rate-code equivalent activation value for discrete spiking units. When an actual rate-code activation function (noisy XX1) is used, act_eq is just equivalent to act. We will see the value of this variable later when we switch to spiking units.

Manipulating Parameters

Now we will use some of the parameters in the control panel to explore the properties of the point neuron activation function.

  • Click on the .PanelTab.ControlPanel and take a moment to familiarize yourself with the parameters (you can hover the mouse over the label for each parameter to view a brief description of what it is).

'Software Tip: All edit dialogs like the control panel have at least two buttons across the bottom: Apply (which applies any changes you have made to actually set the parameters) and Revert (which reverts to the previously applied values, which is useful if you have accidentally typed in a value that you didn't want). See the wiki .Wiki.Edit_dialog for more information.

Excitatory

First, we will focus on g_bar.e, which controls the amount of excitatory conductance as described earlier. In general, we are interested in seeing how the unit membrane potential reflects a balance of the different inputs coming into it (here just excitation and leak), and how the output activation responds to the resulting membrane potential.

  • Increase g_bar.e from .4 to .5 (and press the Apply and Run buttons to see the effects). Then observe the effects of decreasing g_bar.e to .3.

Question 2.1 (a) Describe the effects on the neural response of increasing g_bar.e to .5, and of decreasing it to .3. (b) Is there a qualitative difference in the unit activation (act) between these two changes of magnitude .1 away from the initial .4 value? (c) What important aspect of the point neuron activation function does this reveal?


Software tip: It is often useful to overlay different Runs on top of each other in the graph log, which will happen naturally. When you want to clear the log, press the Init button in the .PanelTab.ControlPanel.

By systematically searching the parameter range for g_bar.e between .3 and .4, you should be able to locate the point at which the membrane potential just reaches threshold (recall that this is at V_m= .25 in the normalized units). To make it easier to locate the threshold, we will switch from the noisy XX1 activation function (which has a soft threshold due to the effects of the convolved noise) to the XX1 activation function (which has a hard threshold due to the absence of noise).


Question 2.2 (a) To 3 decimal places, what value of g_bar.e puts the unit just over threshold? Can you think of a better way of finding this value (Hint: Do you remember an equation for the equilibrium membrane potential given a particular set of inputs?) (b) Compute the exact value of excitatory input required to just reach threshold, showing your math (note that: g_l is always 1 because the leak channels are always open; g_e is 1 when the input is on; inhibition is not present here and can be ignored). Does this agree with your empirically determined value? (Hint: It should!)


Leak

You can also play around with the value of the leak conductance, g_bar.l, which controls the size of the leak current.

  • Press the Defaults button on the control panel to restore the default parameters, and then see what happens when you increase or decrease the leak.

Question 2.3 (a) How does the response of the unit change when you change g_bar.l? Why? (b) How does this differ from changes to g_bar.e? (c) Use the same technique you used in the previous question to compute the exact amount of leak current necessary to put the membrane potential exactly at threshold when the g_bar.e value is at the default of .4 (show your math).


  • Press Defaults to restore the default parameters.

Now that we have a sense of how the unit responds to different currents, and computes a resulting membrane potential that reflects the balance of these currents, we can explore the role of the reversal potentials (e_rev.e and e_rev.l).


Question 2.4 (a) What happens to the unit's activity if you change the leak reversal potential e_rev.l from .15 to 0? (b) What about when you increase it to .2? For both questions, explain the results, taking note of what happens before the input goes on as well as what happens while it is on. (c) What can you conclude about the relationship between the resting potential and the leak reversal potential?


  • Press Defaults to restore the default parameters.

Question 2.5 (a) What happens to the unit's activity if you change the excitatory reversal potential e_rev.e from 1 to .5? Why does this happen? (b) Can you compensate for this by changing the value of g_bar.e? To two decimal places, use the simulator to find the value of g_bar.e that gives essentially the same activation value as the default parameters. (c) Then use the same approach as in question 2.2 to solve for the exact value of g_bar.e that will compensate for this change in e_rev.e (use .256 for the membrane potential under the default parameters, and show your math).


The Activation Output

In this section, we explore the way in which the unit computes its activation output. The main objective is to understand the relationship between the spiking and rate-code activation functions. We will use the same project as the previous section.

  • Press Defaults to start out with default parameters.

From the previous section, we know that changing the level of excitatory input will affect the membrane potential, and the resulting rate coded activation value. Now let's explore this relationship in the spiking activation function.

  • Set act_fun to SPIKE, and press Apply and then Run.

Instead of the steady values during the input presentation period, you now see the oscillations caused by the spiking mechanism (as we saw previously in figure 2.12 in the textbook). Thus, as soon as the membrane potential crosses the threshold, the activation spikes, and the membrane potential is reset (to a sub-resting potential of 0, reflecting the overshoot of the spiking mechanism). Then, the potential climbs back up, and the process repeats itself.

The spacing between the spikes is inversely proportional to the firing rate, but it can be hard to eyeball this from the graph. Let's look at act_eq, the rate-code equivalent spike-rate value as a function of the spike train (see equation 2.18 in the textbook).

  • in the .PanelTab.CycleOutputData graph control panel, click the on! button for the Y5 act_eq value, which will now show up in blue in your graph.
  • Next, observe the effects of changing g_bar.e from .4, first to .38 and then to .42.

Question 2.6 Describe and explain the effects on the spike rate of decreasing g_bar.e to .38, and of increasing it to .42.


The empirically-measured rate-code equivalent for the spiking activation function (act_eq) compares fairly closely with the rate-code value computed directly as a function of the membrane potential (act for NOISY_XX1), as we saw in figure 2.15 in the textbook.

  • To explore this relationship in the simulation, you can switch between SPIKE and NOISY_XX1 for different values of g_bar.e.

You should observe a reasonably close fit between the final values of act_eq for SPIKE with that of NOISY_XX1. However, with smaller g_bar.e values (e.g., .38), the NOISY_XX1 is somewhat below the spiking act_eq. Achieving a much closer fit between spiking and rate coded activations such as that displayed in figure 2.15 requires different parameter values that are not otherwise appropriate for this exploration. This is due to the aliasing effects of discrete-time updating (i.e., coarse-grained digitization effects, like when trying to display a photograph on a low-resolution display), which the spiking model is very sensitive to.

  • Change g_bar.e back to its default value of .4., and make sure act_fun is set to SPIKE.

An important aspect of spiking in real neurons is that the timing and intervals between spikes can be quite random, although the overall rate of firing remains predictable. This is obviously not evident with the single constant input used so far, which results in regular firing. However, if we introduce noise by adding small randomly generated values to the membrane potential, then we can see some of this kind of effect, although it is still not as dramatic as it would be with multiple spiking inputs coming into the cell. Note that this additional noise plays a similar role as the convolution of noise with the XX1 function in the noisy XX1 function, but in the case of the noisy XX1 we have a deterministic function that incorporates the averaged effects of noise, while here we are actually adding in the random values themselves, making the behavior stochastic.

  • Change the variance of the noise generator (noise_var) in the control panel) from 0 to .005, and press Apply and then Run.

It can be difficult to tell from a single run whether the spike timing is random -- the unit still fires with some regularity.

  • Do many Runs on top of each other in the graph view.

Now you should see that the spike timing was actually so random that there is essentially a uniform distribution of spike times across these different runs (i.e., a spike could occur at any time step), but the rate code equivalent activation (act_eq) nevertheless remained relatively constant (i.e., it had only a few different values at the end of a run). This happens because the precise time at which a spike fires depends greatly on whether the noise happens to move the membrane potential up or down when it approaches the threshold, which can delay or advance the spike timing in a random fashion. Thus, the threshold greatly magnifies small differences in membrane potential by making a large distinction between subthreshold and superthreshold potentials. On average, however, the spikes are equally likely to be early or late, so these random timing differences end up canceling out in the rate code average. This robustness of the rate code in the face of random noise (relative to the detailed spike timing) is one important argument for why it is reasonable to think that neurons rely primarily on rate code information (see section 2.8 in the textbook for more discussion).

Now, let's explore some of the properties of the noisy XX1 rate-code activation function, compared to other possible such functions. We will compare XX1 (equation 2.20 in the text), which is the non-noisy version of noisy XX1, and LINEAR, which is just a threshold-linear function of the difference between the membrane potential and the threshold:

  • y_j = \gamma [V_m - \Theta]_+

where [x]_+ is again the positive component of x or 0 if x is negative (i.e., if the membrane potential is below threshold).

  • Press Defaults. Then, change the excitatory input g_bar.e from .4 to .375, and press Apply and then Run. Then, run XX1 with the same parameters (under act_fun, select XX1, press Apply and then

Run). Next run LINEAR in the same way.

Notice that NOISY_XX1 starts earlier than XX1 or LINEAR, because it has a soft threshold. This results from convolving the XX1 function with noise, such that even at sub-threshold values, there is a certain chance of getting above threshold, as reflected in a small positive activation value in the rate code.

  • Change the excitatory input g_bar.e from .375 to .42, and press Apply and then Run. Then, as in the

previous procedure, run the other two activation functions with the same parameters.

Notice that LINEAR goes up to ceiling (where it is clipped at a maximum of 1), while XX1 and NOISY_XX1 increase but stay below their maximum values. Thus, the two XX1 based functions have a saturating nonlinearity that allows them to gradually approach a maximal value, instead of just being clipped off at this maximum. However, these XX1 functions approximate the threshold-linear function for lower levels of excitation.

You should also notice that XX1 and NOISY_XX1 get closer to each other as g_e gets larger. The noise convolution has much less of an effect when the function gets flatter, as it does in the saturating nonlinearity region. Convolving noise with a linear function gives you back the linear function itself, so wherever the function is approximately linear, noise has much less of an effect.

When you are done with this simulation, you can either close this project in preparation for loading the next project, or you can quit completely from the simulator.

Personal tools