theoretical neuroscientist, which means that I build computer simulations of brains. Today, I want to tell you how we use Python to create and run those simulations. It’s worth first talking about why we want to model the brain. The first reason is to understand it. Shortly before his passing, Richard Feynman wrote: “What I cannot create, I do not understand.” We think that the best way to understand how the brain works is to try to do what the brain does, under the same types of constraints that the brain works under. The second reason to model the brain is to build better artificial intelligences. There are both optimistic and pessimistic examples of AIs in science fiction. I think what worries most people, and what makes things like Hal and Skynet seem plausible, is that these intelligences are not brain-like; they’re magic, mysterious, different types of intelligence that we can’t reason with or about. I hope to convince you that this type of emergent superintelligence is not realistic; we have to engineer intelligence, it won’t just happen, and that means we know a lot about it and can reason with it. 2 Neural simulators 0. Emulate neurobiology. 1. Operate in continuous time. 2. Communicate with spikes. We’re not going to build a physical brain, we’re going to simulate it. Programs that simulate neural systems like the brain are called neural simulators. The main goal of a neural simulator is to emulate neurobiology, at some level of abstraction. In order to do that, these simulations happen in continuous time, and they communicate with spikes. I’ll explain more what that means shortly, but first I want to contrast neural simulators to the artificial neural networks employed in AI. ANNs have evolved into multilayered so-called Deep Learning networks that Facebook and Google are using now for image and speech recognition. Artifical Neural Networks are sophisticated statistical tools, but they do not attempt to emulate neurobiology; they work in discrete rather than continuous time; and they don’t use spikes to communicate. http://www.ais.uni-bonn.de/deep learning/ In [85]: !neurondemo NEURON -- VERSION 7.3 ansi (1078:2b0c984183df) 2014-04-04 Duke, Yale, and the BlueBrain Project -- Copyright 1984-2014 See http://www.neuron.yale.edu/neuron/credits loading membrane mechanisms from /usr/local/Cellar/neuron/7.3/share/nrn/demo/release/x86 64/.libs/libnrn Additional mechanisms from files cabpump.mod cachan1.mod camchan.mod capump.mod invlfire.mod khhchan.mod mcna.mod nacaex.mod nachan.mod oc> I want to begin with one of the first neural simulators, which is still actively developed and used today, called NEURON. It’s implemented mostly in C with Python bindings. NEURON was how I was introduced to a lot of the elements of neuroscience, since it does a very good job of emulating real biological neurons. Let’s start with the demo that comes with NEURON. You can see right off the bat, this is an old program, copyright 1984, which is before I was born. Let’s start with the Pyramidal demo to get introduced to neurobiology. Here we can see some of the parts of a neuron. These processes around the outside here are called dendrites, and they are essentially the inputs to the cell; there can be many dendrites for each cell. The dendrites all converge onto the body of the cell, which is called the soma. And then every cell has a single output process called an axon, which can also branches out. So, you can think of a neuron essentialy as a function that takes in many inputs – through its dendrites – and produces a single output, through its axon. Right now, NEURON is doing a “current clamp” experiment, so you can see the “IClamp” here, “I” stands for current, which mimics actual neuroscientific experiments. There is a simulated electrode, here in 2