CNV: Push/pull Feedforward inhibition

This page describes one of the possible project options for assignment 2; please read the general project description first before looking at this specific project option.

Background

Nearly all long-range (e.g. centimeter) connections in the brain are excitatory, including those from the eye to the LGN, and from the LGN to V1. However, in all three of these regions there are local inhibitory cells, and the long-range excitatory projections have been found to target both inhibitory and excitatory cells in V1. The inhibitory cells in turn connect to other local cells, thus implementing disynaptic inhibition. This "feedforward inhibition" has not been studied nearly as well as feedforward excitation, and it is not yet clear how important it is for visual function. Some researchers have suggested that feedforward inhibition works in a "push/pull" configuration with feedforward excitation, with complementary receptive field shapes and opposite signs that can help achieve higher selectivity and contrast-invariant tuning. For instance, with only feedforward excitation, a cell may be excited by ON cells in part of the RF, and by OFF cells in the other part of the RF. In a push/pull configuration, the cell would be excited by ON cell activation and inhibited by OFF cell activation in that part of the RF, and vice versa for the other part. For more background, see the CMVC book section 17.1.2, Troyer, et al. J. Neurosci (1989), Kayser and Miller (2002), or hopefully some more recent papers as well.

GCAL with feedforward anti-Hebbian projections

In GCAL and LISSOM, the RGC/LGN cells (assumed primarily to be constructed in the retina) are hardwired to a Difference of Gaussians shape, which effectively gives them feedforward inhibition (as either the center or the surround has negative weights). But the cells that have plasticity currently include only feedforward excitation, because the Hebbian rule alone would not develop suitable push/pull weights -- using Hebbian learning on a single pair of activity patterns, the "pull" weights would simply be a copy of the "push" weights, while they need to be complementary to have a useful push/pull effect.

Hebb (1949) did not discuss inhibitory cells, and various researchers have proposed different "anti-Hebbian" learning rules. Some researchers call the inhibitory learning rule in LISSOM and GCAL "anti-Hebbian", but we argue that it makes more sense to consider it truly Hebbian, because neurons that covary still get a larger (inhibitory) weight magnitude in those models. Here we will instead consider a learning rule to be anti-Hebbian if correlated activities lead to weaker weights. I've now added a new learning function in topo/learningfn/__init__.py AntiHebbian, which is identical to Hebbian apart from the sign of the weight change. This function isn't highly optimized like the standard Hebbian one we use elsewhere, but that shouldn't much matter since the learning step is only a small fraction of the computation time.

There is also now an example model using this rule, in /group/teaching/cnv/topographica/pushpull.ty, and an example notebook in /group/teaching/cnv/topographica/pushpull.ipynb. The output of this notebook is temporarily available here.

The difference between pushpull.ty and examples/gcal_oo_or.ty (described in Stevens et al., 2013) is simply to make the cortex a bit smaller to be faster):

$ diff pushpull.ty examples/gcal_oo_or.ty 
53c70
<     cortex_density=param.Number(default=30.0,bounds=(0,None),

>     cortex_density=param.Number(default=48.0,bounds=(0,None),
and to add two new projections:

63,65d79
<     anti_strength=param.Number(default=0.0,bounds=(0.0,None),doc="""
<         Overall strength of the anti-Hebbian projections to V1."""),
< 
192,212d205
< 
< topo.sim.connect(
<     'LGNOn','V1',delay=0.05,strength=-1.0*p.anti_strength,name='LGNOnAntiAfferent',
<     dest_port=('Activity','JointNormalize','AntiAfferent'),
<     connection_type=projection.CFProjection,learning_rate=p.aff_lr,
<     nominal_bounds_template=sheet.BoundingBox(radius=0.27083),
<     weights_generator=pattern.random.GaussianCloud(gaussian_size=2*0.27083),
<     weights_output_fns=[transferfn.optimized.CFPOF_DivisiveNormalizeL1()],
<     learning_fn=learningfn.projfn.CFPLF_Plugin(single_cf_fn=learningfn.AntiHebbian()))
< 
< 
< topo.sim.connect(
<     'LGNOff','V1',delay=0.05,strength=-1.0*p.anti_strength,name='LGNOffAntiAfferent',
<     dest_port=('Activity','JointNormalize','AntiAfferent'),
<     connection_type=projection.CFProjection,learning_rate=p.aff_lr,
<     nominal_bounds_template=sheet.BoundingBox(radius=0.27083),
<     weights_generator=pattern.random.GaussianCloud(gaussian_size=2*0.27083),
<     weights_output_fns=[transferfn.optimized.CFPOF_DivisiveNormalizeL1()],
<     learning_fn=learningfn.projfn.CFPLF_Plugin(single_cf_fn=learningfn.AntiHebbian()))

(be sure to do a diff yourself to make sure!).

Here the two new projections have been set to have zero strength for now, so that they have no effect on self-organization. They simply learn alongside the feedforward excitation, without affecting how the network activates or develops. This allows you to see how they work in the final organized network (by setting their strength to a non-zero value), before worrying about how they might affect the developing network. Note that p.anti_strength is a local variable, and only affects how those projections are defined; pushpull.ipynb shows how to change their strengths at any later time.

Also note that I have joint-normalized these two projections together, but separately from the feedforward excitation. That's my best guess, but you can remove the dest_port if you want them independent from each other, or change AntiAfferent to Afferent if you want them normalized together with the existing afferent excitatory projections.

Possible questions to investigate

pushpull.ipynb already shows that the anti-Hebbian rule does develop complementary RFs. It's up to you to figure out what do to with those -- Do they do anything useful? Does this mechanism seem plausible, based on a literature review? Does it make clear predictions?

You'll first need to find a good balance of afferent strength and inhibitory strength, starting with the possibilities listed in pushpull.ipynb -- pick a parameter regime where the feedforward inhibition might have some effect (i.e., at least where it is nonzero and the resulting activation is nonzero!). Possible questions you could then consider investigating:

  1. How does the feedforward inhibition affect self-organization? You'll need to uncomment the bit labeled Force rebuild to make sure you organize the network fully rather than loading the previously saved snapshot, if you change anything that affects development.

  2. Does the feedforward inhibition do anything useful? How would you show that? Is it realistic? How would you show that? You could e.g. consider contrast invariant orientation tuning -- measure some tuning curves for regular GCAL, then see if they change when you enable feedforward inhibition. Can you now get contrast-invariant tuning without the LGN's gain control mechanism (which in GCAL is based on inhibition at the LGN level)?

  3. How does this compare to Miller's simulations? Here we're using an extremely simple configuration, with a single population of V1 cells compared to his reciprocally connected separate inhibitory and excitatory cells. Is our approach basically still doing the same thing? Or do they make different predictions, or require different anatomy?

  4. Can you take pushpull.ipynb as an example, delete the new projections, and instead build the LGN using this approach? You could even delete V1 altogether and focus on whether you can learn the LGN difference-of-Gaussian RF shapes, as in Linsker (1989). Does this let you have a single architecture (same activation function, same learning rules, etc.) for both the LGN and V1? Is it plausible? What constraints do you have to put in to get difference-of-Gaussian RFs out?

  5. Are there other better ways of implementing push/pull connectivity beyond the simple anti-Hebbian rule suggested here?

Anything else scientifically interesting is also fine; it's completely open. You should be able to use HoloViews to visualize the results in any of these cases, as in the previous tutorials, and you may want to use Lancet if you are exploring parameter spaces.

Whether the results you find were as expected or not, you should think about your network, observe the patterns of activity and connectivity, and decide if you believe it is an appropriate model for what you're looking at. Basically, you're trying to (a) build a decent model that includes the mechanisms that at least might result in the phenomenon you're investigating, (b) determine whether it does so, and (c) analyse what those results depend on -- why they occur.

Whatever you end up investigating, in your report, you'll need to make it clear what question(s) you were addressing, demonstrate that the model was a reasonable first approach to investigating those questions, explain how the model's mechanisms relate to processes in animal V1, and explain why the results you observe (whether they match previous data or not) occur. Once you're ready, you can report and submit your results as outlined in the general project description.

Last update: assignment2pushpull.html,v 1.2 2015/03/05 11:16:58 jbednar Exp


Home : Teaching : Courses : Cnv : 2014-2015 : Coursework 

Informatics Forum, 10 Crichton Street, Edinburgh, EH8 9AB, Scotland, UK
Tel: +44 131 651 5661, Fax: +44 131 651 1426, E-mail: school-office@inf.ed.ac.uk
Please contact our webadmin with any comments or corrections. Logging and Cookies
Unless explicitly stated otherwise, all material is copyright © The University of Edinburgh