Author: Donald Doherty

  • Polychronization: Play To Understand

    The best way to understand a theory or a set of data or even a mathematical equation is to play with them. A couple of days ago my blog post “Polychronization: Playing with the Code” began looking at the standard C++ polychronization program spnet.cpp and the newer program poly_spnet.cpp implemented with a more precise algorithm. The poly_spnet.cpp file also includes code for finding polychronous groups. In today’s post I provide a few more bits of information about the code in these two files and their data output that hopefully makes it easier for you to play with them.

    Figure 1. Spike raster plots of the average firing rates of excitatory (bottom) and inhibitory neurons (top) across an 18,000 second (x-axis; 5 hours) simulation using the polychronization model poly_spnet.cpp. At each second the average firing rate of the excitatory or inhibitory neurons is plotted in Hertz (y-axis). Notice that the excitatory neurons plot has a maximum firing rate of 10 Hertz in contrast to the inhibitory neurons plot with a maximum firing rate of 70 Hertz.

    Note: C++ and MATLAB versions of the computational model are available from the SenseLab’s ModelDB repository in the “Polychronization: Computation With Spikes (Izhikevich 2005)” record. For more about polychronization and the paper associated with this model please see my earlier blog post “Spontaneously Formed Neuronal Groups Far Exceed the Number of Neurons.”

    The spnet.cpp model is set to run for 24 simulation hours or 86,400 seconds (60 seconds/minute * 60 minutes/hour * 24 hours) and the program automatically saves the previous second of simulation data to the spikes.dat file. Each earlier second is overwritten as the latest second is saved.

    The poly_spnet.cpp model is set to run for 5 simulation hours or 18,000 seconds (60 seconds/minute * 60 minutes/hour * 5 hours) and the program automatically saves data in five files: all.dat, dat.dat, s.dat, spikes.dat, and polyall.dat. I’ll address the contents of the all.dat and polyall.dat files at a future date. Below the contents of the dat.dat, s.dat, and spikes.dat files are briefly explained.

    The first column of the dat.dat file contains the simulation time in seconds. The second column contains the average firing rate of the population of excitatory neurons and the third column seems to contain the average excitatory neuron to excitatory neuron synaptic strength across the population. The forth column of numbers contains the average firing rate of the population of inhibitory neurons. Figure 1 above contains an x-y plot of the first and second columns (bottom plot), which contains 18,000 points with each point representing the excitatory neuron population’s firing rate in Hertz during a particular second of the simulation. The figure also contains an x-y plot of the first and forth columns (top plot), which contains 18,000 points with each point representing the inhibitory neuron population’s firing rate in Hertz during a particular second of the simulation.

    The first column of the s.dat file contains the number identifiers for 1,000 simulated neurons. The second column contains the total synaptic weight onto the postsynaptic neuron identified in the first column. Synaptic weights change over time due to synaptic plasticity. In the file we can see the total synaptic weight change for any one neuron. However, for some reason time stamp data are not saved to s.dat. Of course, this can be easily changed in the code.

    The spikes.dat file contains the number identifiers for 1,000 simulated neurons in its first column and associated times (in milliseconds) of spike occurrence in its second column. The format is the same as in the spikes.dat output of the spnet.cpp code and so is the way the data are saved. Only the most recent second of data are saved in the file.

    Other related blog posts:

    Spontaneously Formed Neuronal Groups Far Exceed the Number of Neurons

    Polychronization: Playing with the Code

  • Polychronization: Playing with the Code

    Last month I reviewed the paper “Polychronization: Computation with Spikes” (published February 2006 in Neural Computation) that described a highly simplified computational model of cerebral cortex containing 1,000 neurons that included axon conductance delays and spike timing dependent plasticity (STDP). The model exhibited the spontaneous formation of neuronal groups defined as “small collectives of neurons having strong connections with matching conduction delays and exhibiting time-locked but not necessarily synchronous spiking activity” (they may fire at many different times). The author called this process polychronization (poly means many and chronous means time) and the neuronal groups it forms polychronous groups.

    Figure 1. This is a spike raster plot of data from the polychronization model spnet.cpp. The model included 1,000 neurons (y-axis) and was run for 24 hours simulation time. The plot shows the last second (in milliseconds; x-axis) of the 24 hour simulation. Neurons 0 through 799 are excitatory and 800 through 999 are inhibitory (these are fast spiking inhibitory neurons). This plot is similar to the bottom plot in Figure 5 of “Polychronization: Computation with Spikes” (published February 2006 in Neural Computation) except that in the paper the 1 second time period is extracted from the 3,600 second time point or at 1 hour of simulation time.

    C++ and MATLAB versions of the computational model are available from the SenseLab’s ModelDB repository in the “Polychronization: Computation With Spikes (Izhikevich 2005)” record. The C++ code of the standard model described in the paper is in the spnet.cpp file. Compiling the code was straight forward. I did need to modify the main() method so that it returned an int to comply with C++ coding standards. No other modifications were necessary.

    Running the spnet.cpp code resulted in a spike.dat file that, when graphed, reproduced the bottom graph in Figure 5 (see Figure 1 above) of Dr. Eugene Izhikevich’s paper “Polychronization: Computation with Spikes” (published February 2006 in Neural Computation). I created the graph by reading the contents of the spikes.dat file into an OpenOffice.org spreadsheet by using the Insert menu’s Sheet From File… command. In the Text Import dialog box use the Separated by Space option under Separator options. Delete column B, highlight all of the data, and graph by clicking on the Chart button and selecting the XY (Scatter) chart type with Points Only.

    Note: For more on the paper associated with this model please see my earlier blog post “Spontaneously Formed Neuronal Groups Far Exceed the Number of Neurons.”

    The computational model in poly_spnet.cpp is the same as in spnet.cpp. However, poly_spnet.cpp includes code for finding polychronous groups. By default the cerebral cortex simulation in poly_spnet.cpp runs for a simulated 18,000 seconds (60 seconds/minute * 60 minutes/hour * 5 hours). The program then finds the polychronous groups for you. Compiling and running poly_spnet.cpp was also straight forward. Make the same modification to the main() method. Change its return value from void to int so that it complies with C++ coding standards. I also had to remove the malloc.h header. Next we’ll take a look at the data set produced by poly_spnet.cpp.

    Other related blog posts:

    Spontaneously Formed Neuronal Groups Far Exceed the Number of Neurons

  • Memory is Replayed in the Awake and Sleeping Brain

    The hippocampus is essential in the initial encoding and subsequent consolidation and retrieval of long term memories. Both consolidation and retrieval are thought to depend on the reactivation of previously stored patterns of neural activity. Memory consolidation, however, has been primarily associated with sleep and the retrieval of memory has been primarily associated with waking behavior. A new paper “Hippocampal replay in the awake state: a potential substrate for memory consolidation and retrieval” (published February 11, 2011 in Nature Neuroscience) reviews research that has established the replay of memories during awake and behaving animals.

    Neurons in the hippocampal formation fire when an animal visits a particular place defined by a small region (firing field) and are known as place cells. An individual place cell may respond to more than one location (firing field) each known as a place field. The sequential reactivation of hippocampal place cells reflects an animal’s memory of movement through an ordered set of place fields that together form a cognitive map of locations the animal has visited.

    Much has been made of the reactivation of stored hippocampal representations during sleep since 1) the phenomenon was first observed during sleep and 2) sleep seems like an ideal time for memory consolidation to occur. The main thrust of the current review is to point to current evidence that shows sharp wave ripples and the replay of spatial memories occurs in awake and behaving animals. Replay has been shown to be most prevalent immediately after an experience in the awake animal and to decay with time. Nevertheless, the replay of a spatial memory may persist at above chance levels even 18–24 hours after an experience. Even more surprising, the awake replay of a remote environment has been shown to be a higher fidelity recapitulation of past experiences than when a replay was seen during quiescent, sleep­-like states.

    The authors point out that forward replay during both behavior and subsequent sleep seems well suited for consolidation of memories related to experienced trajectories and they speculate that forward replay during behavior may enable the retrieval of future paths to aid memory­ guided decision making. Reverse replay during behavior may link recently experienced sequences to their outcome.

    Other related blog posts:

    Sensation and Location in the Hippocampal Formation