Spiking Networks on the Cusp of Chaos

From Santa Fe Institute Events Wiki


As the name implies, the goal of the project is to investigate what small networks of idealized spiking neurons look and behave like at the edge of chaos. Specifically "edge of chaos" here means that special boundary between the regions where we observe orderly periodic behavior on one side and chaotic non-periodic behavior on the other. (both have been observed previously in this dynamical system)

This project is exploratory in nature. We will probe adaptively, charting territory that seems most interesting and relevant to those involved. There is much to discover. Here are a few questions that will get the ship sailing:

(assume: fixed network size, dynamics; external input only at t=0)

  • Can we find network connectivity patterns which cause a network to settle down into periodic behavior for some initial states and into chaotic behavior for other states? If so what does the distribution of initial conditions which produce the respective behaviors look like?
  • What is the maximum number of edges we can add or remove from a network which exhibits chaotic behavior before that behavior becomes periodic?
  • Do we see any networks which exhibit NON-periodic behavior but are not chaotic (e.g. they aren't sensitive to initial conditions)?
  • How can we accurately characterize in the properties and patterns we see in the class of network connectivity which admits chaotic behavior?


Initial Status (6/23)

I have previously written code which simulates spiking neural networks in Python: [1] [2]

We will build upon this to probe the interesting regions of configuration space where we see transitions to/from chaotic behavior.

I have recently been reading about NetworkX out of LANL, which is a fairly new package for Python which provides some basic tools necessary for network analysis and visualization. With some efforts in modification I should be able to get this up and running with my existing code. See below for a relevant paper introducing this software.


Ideally, I would like to see task participation from at least one or two others. Experience writing code is highly desirable but not necessary. The project will be scaled in scope according to participants' available time and abilities to contribute.

Here are some specific points this project could use input / assistance on:

  • Analysis of networks structure. Example: can we use spectral clustering as a way to group and classify connectivity patterns? Can it be applied to the dynamic "functional" connectivity observed in the behavior?
  • An efficient periodicity detection algorithm
  • Further thoughts on "edge of chaos" ... does it make sense? See "wedge of chaos" article listed below
  • Ideas for batch arrays of "experiments" we can run to probe conceptual areas of interest.


In addition to the links to my webpage provided above, which provide a good introduction to modeling and analyzing neural structure and behavior with simple spiking networks, the following papers are of interest:

  • This is an introductory examination of computational power of dynamical systems on the "edge of chaos" (with extra emphasis on neural systems). Great speedy overview of important aspects dynamics is included in sections 1.1 and 1.2. Sections of possibly strong relevance to this project are 1.6, 1.7 and 1.9.
  • NetworkX - Simple introduction, advertisement and primer
  • Spectral Clustering Tutorial (updated version)
  • "Wedge of Chaos" paper by Feldman, Crutchfield et al. Does it actually make sense to talk about an "edge of chaos" or should we use a more precise metaphor? How does the analysis here carry over to our neural system?


  • Directions on downloading Python and two other necessary packages.
  • My code for the Spiking Network software we're starting with.
  • NetworkX, which we'll eventually use.

Polyrhythmic Music

Initially I had planned to realize network behavior in a novel way: by laying the progression of musical structure in correlation with spiking activity in the network. The basic idea is this:

  • Start with a fairly simple polyrhythmic structure. One sound "ta" playing four beats in a measure. Another sound "ti" playing at three beats in the same measure. Find or create a small network which carries this out in the spiking of two particular observed neurons in the network.
  • Modify the network slightly by adding, moving or removing an edge.
  • How does this change the sound? Is it still periodic? Partially periodic? Is it chaotic? How does hearing the output help us analyze it?

As things stand, I cannot take this on by myself. However, I will enthusiastically support anyone willing to put in time towards this with coding help, troubleshooting, ideas etc. If there is exceptional interest we may even consider shifting the project focus this direction. This would be a *lot* of fun if we could get it up and running. And I believe its doable within the time given.


6/23 Dinner Meeting

Dinner meeting today at 6:15 for anyone who would consider participating. Just find me in the dining room or before. I don't expect this meeting to go longer than a half hour.


Good meeting today. Glad to see some interest. Plans to meet tomorrow morning to go over code.

To get the code yourself, head up to the code section above. My code is of course a miniscule download. The most important (and smallest!) bit of code to understand is the file. MATLAB users: see the file for a link to some documentation online that helps understand the equivalent ways of doing most things in both languages.

Downloading python is more involved and the two packages you'll need in addition to the base install (which you already have if you have OSX) are ~13 MB total.

6/24 Morning Meeting @ SFI

Meet at SFI at 10:45 to go over code and hash out some ideas for experiments and conceptualize desired/possible outcomes.

Notes from watson

Angela, Max, Andrew and myself met to go over the current code. I didn't have it up and running on my new laptop but do now. See new notes on installing on OSX linked from #Code section above.

Today I also had a really good chat with Greg L. on how to think about characterizing/clustering the structure of networks. For example if we determine that 16 particular networks have very similar behavioral properties then how do we check to see if they also have structural properties in common? One way is to do some eigenanalysis on the adjacency matrix and pay attention to the first couple of eigenvectors (since the networks are so small). Plotting the first couple of eigenvectors of each network adjacency matrix in phase space, do those 16 cluster together? There are still many questions in my mind about the specific method and how to best utilize it (e.g. would we still run a Laplacian? Do we run a separate analysis on each individual network or somehow on all of them?), but this is an inspiring start to understanding ways to characterize the structural nature of the networks and compare across several networks of the same size. (or of different sizes? Greg also pointed out that eigenanalysis methods can scale up to larger matricies pretty naturally)

6/25 Dinner Meeting: 6PM

Let's meet to discuss some specific experiments we want to run. And exactly how we want to run them. These should be informed by desired/possible outcomes. I can lead this discussion. I should be able to show you the code in action with a GUI and everything as well. We can chat about the spectral analysis stuff that Greg and I were discussing too. Corinne and others: maybe you have some insight into this method now? watson

Notes from watson

Demoed the software to the group and went over some of the code with Rosemary. Generated some ideas but we need another meeting to decide on specific experiments and tools etc.

6/26 Lunch Meeting: 12:45 in Dining Hall

Agenda: decide on some experiments we're interested in running, figure out the tools/machinery/configurations we need for that and set a work time (probably later in the day) where we can all be in the same place and when I will be available to you for questions about my code, the model and python generally. watson