The Sparse And Independent Local network (SAILnet: link to download code at the bottom of this page) is a network of leaky integrate-and-fire neurons that uses synaptically local plasticity rules to learn sparse representations of natural images. It is a putative model of the mammalian visual cortex, and improves over (previously) existing models by being more biophysically realistic. The model, and its relevance to neurobiology, are described in our 2011 PLoS Computational Biology paper A Sparse Coding Model with Synaptically Local Plasticity and Spiking Neurons Can Account for the Diverse Shapes of V1 Simple Cell Receptive Fields . We also used the model to explore how sparseness changes during development (in model systems), in our 2013 PLoS Computational Biology paper Sparse Coding Models Can Exhibit Decreasing Sparseness while Learning Sparse Codes for Natural Images .

Paul King, Mike DeWeese, and I also recently published a follow-up, in which the model was expanded to include a separate population of inhibitory neurons, thus increasing the biophysical realism even further. We then asked how many inhibitory cells were needed for the model to "work" properly, and used those results to help understand the relative numbers of excitatory and inhibitory cells in the mammalian visual cortex. This work was published in a 2013 Journal of Neuroscience paper Inhibitory Interneurons Decorrelate Excitatory Cells to Drive Sparse Code Formation in a Spiking Model of V1

The code associated with that work is available from Paul King's website

Excitingly, engineers from the University of Michigan recently constructed my SAILnet architecture on a chip for massively parallel low-power signal processing applications. You can read more about their work here.

At the bottom of this page, you will find a .zip file containing everything you need to run SAILnet. Below is a description of each file, the hierarchy of files, etc. Please do cite our PLoS paper for any work derived from use of this code. Also, if you have any questions, don't hesitate to ask.

File details:
- The IMAGES.mat file contains 10 whitened natural images, from Olshausen and Field (1996), and is loaded by init.m
- The init.m file initializes all of the simulation parameters. NOTE: this script contains a "clear all" command, so save your work before running it (or comment out that line).
- the SAILnet.m file runs the SAILnet simulation, calling activities.m to get neuronal activities in response to randomly selected image patches, updating network parameters, etc.
- SAILnet.m also calls show_network.m, which displays network statistics periodically, so you can see the solution converging.
- activities.m solves numerically the differential equation for leaky integrate-and-fire neuron dynamics, and returns spike counts
- show_network.m calls showrfs.m, which displays just the neuronal receptive fields.

To run SAILnet in matlab:
>> init
>> SAILnet
You can then hit ctrl+c at any time to stop the simulation (the network parameters at that time will still be accessible from memory). Alternatively, after a time defined by num_trials (a parameter in the init.m file), the simulation will end.

Here is the code. It is provided as-is, with no guarantees. Please alert me to any issues / bugs that you encounter!