Neurons II CA6 – Theoretical Neuroscience Romain Brette
Today 1. The integrate-and-fire model 2. Simulation of neural networks 3. Dendrites
Books Principles of Computational Modelling in Neuroscience, by Steratt, Graham, Gillies, Willshaw, Cambridge University Press Theoretical neuroscience, by Dayan & Abbott, MIT Press Spiking neuron models, by Gerstner & Kistler, Cambridge Univerity Press Dynamical systems in neuroscience, by Izhikevich, MIT Press Biophysics of computation, by Koch, Oxford University Press Introduction to Theoretical Neurobiology, by Tuckwell, Cambridge University Press
The integrate-and-fire model
The Hodgkin-Huxley model Model of the squid giant axon Nobel Prize 1963
The Hodgkin-Huxley model
The spike threshold spike threshold action potential or « spike » postsynaptic potential (PSP) temporal integration
The sodium current max. conductance (= all channels open) reversal potential (= 50 mV)
Triggering of an action potential The time constant of the sodium channel is very short (fraction of ms): we approximate
Triggering of an action potential V f(V) 0 V 1 ≈ E l V2V2 V 3 ≈ E Na fixed points stable unstable What happens when the neuron receives a presynaptic spike? V -> V+w Below V 2, we go back to rest, above V 2, the potential grows (to V 3 ≈ E Na ) V 2 is the threshold
The integrate-and-fire model spike threshold action potential PSP « Integrate-and-fire »: If V = V t (threshold) then: neuron spikes and V → V r (reset) (phenomenological description of action potentials) « postsynaptic potential »
Is this a sensible description of neurons?
A phenomenological approach Injected current Recording Model (IF with adaptive threshold fitted with Brian + GPU) Fitting spiking models to electrophysiological recordings Rossant et al. (Front. Neuroinform. 2010)
Results: regular spiking cell Winner of INCF competition: 76% (variation of adaptive threshold IF) Rossant et al. (2010). Automatic fitting of spiking neuron models to electrophysiological recordings (Frontiers in Neuroinformatics)
Good news Adaptive integrate-and-fire models are good phenomenological models! (response to somatic injection)
The firing rate T = interspike interval (ISI) Firing rate F= 10 spikes/ 100 ms = 100 Hz (T n = t n+1 -t n )
Constant current Firing condition: Time to threshold: threshold V t reset V r from reset « Rheobase current »
Current-frequency relationship
Refractory period Δ = refractory period from reset max 1/Δ
Simulating neural networks with Brian
Who is Brian? briansimulator.org
Example: current-frequency curve from brian import * N = 1000 tau = 10 * ms eqs = ''' dv/dt=(v0-v)/tau : volt v0 : volt ''' group = NeuronGroup(N, model=eqs, threshold=10 * mV, reset=0 * mV, refractory=5 * ms) group.v = 0 * mV group.v0 = linspace(0 * mV, 20 * mV, N) counter = SpikeCounter(group) duration = 5 * second run(duration) plot(group.v0 / mV, counter.count / duration) show()
Simulating neural networks with Brian
Synaptic currents synaptic current postsynaptic neuron synapse I s (t)
Idealized synapse Total charge Opens for a short duration I s (t)=Q δ(t) Dirac function ELEL Spike-based notation: at t=0
Example: a fully connected network from brian import * tau = 10 * ms v0 = 11 * mV N = 20 w =.1 * mV group = NeuronGroup(N, model='dv/dt=(v0-v)/tau : volt', threshold=10 * mV, reset=0 * mV) W = Connection(group, group, 'v', weight=w) group.v = rand(N) * 10 * mV S = SpikeMonitor(group) run(300 * ms) raster_plot(S) show()
Example: a fully connected network from brian import * tau = 10 * ms v0 = 11 * mV N = 20 w =.1 * mV group = NeuronGroup(N, model='dv/dt=(v0-v)/tau : volt', threshold=10 * mV, reset=0 * mV) W = Connection(group, group, 'v', weight=w) group.v = rand(N) * 10 * mV S = SpikeMonitor(group) run(300 * ms) raster_plot(S) show() R.E. Mirollo and S.H. Strogatz. Synchronization of pulse-coupled biological oscillators. SIAM Journal on Applied Mathematics 50, (1990).
Example 2: a ring of IF neurons from brian import * tau = 10 * ms v0 = 11 * mV N = 20 w = 1 * mV ring = NeuronGroup(N, model='dv/dt=(v0-v)/tau : volt', threshold=10 * mV, reset=0 * mV) W = Connection(ring, ring, 'v') for i in range(N): W[i, (i + 1) % N] = w ring.v = rand(N) * 10 * mV S = SpikeMonitor(ring) run(300 * ms) raster_plot(S) show()
Example 2: a ring of IF neurons from brian import * tau = 10 * ms v0 = 11 * mV N = 20 w = 1 * mV ring = NeuronGroup(N, model='dv/dt=(v0-v)/tau : volt', threshold=10 * mV, reset=0 * mV) W = Connection(ring, ring, 'v') for i in range(N): W[i, (i + 1) % N] = w ring.v = rand(N) * 10 * mV S = SpikeMonitor(ring) run(300 * ms) raster_plot(S) show()
Example 3: a noisy ring from brian import * tau = 10 * ms sigma =.5 N = 100 mu = 2 eqs = """ dv/dt=mu/tau+sigma/tau**.5*xi : 1 """ group = NeuronGroup(N, model=eqs, threshold=1, reset=0) C = Connection(group, group, 'v') for i in range(N): C[i, (i + 1) % N] = -1 S = SpikeMonitor(group) trace = StateMonitor(group, 'v', record=True) run(500 * ms) subplot(211) raster_plot(S) subplot(212) plot(trace.times / ms, trace[0]) show()
Example 3: a noisy ring from brian import * tau = 10 * ms sigma =.5 N = 100 mu = 2 eqs = """ dv/dt=mu/tau+sigma/tau**.5*xi : 1 """ group = NeuronGroup(N, model=eqs, threshold=1, reset=0) C = Connection(group, group, 'v') for i in range(N): C[i, (i + 1) % N] = -1 S = SpikeMonitor(group) trace = StateMonitor(group, 'v', record=True) run(500 * ms) subplot(211) raster_plot(S) subplot(212) plot(trace.times / ms, trace[0]) show()
Example 4: topographic connections from brian import * tau = 10 * ms N = 100 v0 = 5 * mV sigma = 4 * mV group = NeuronGroup(N, model='dv/dt=(v0-v)/tau + sigma*xi/tau**.5 : volt', threshold=10 * mV, reset=0 * mV) C = Connection(group, group, 'v', weight=lambda i, j:.4 * mV * cos(2. * pi * (i - j) * 1. / N)) S = SpikeMonitor(group) R = PopulationRateMonitor(group) group.v = rand(N) * 10 * mV run(5000 * ms) subplot(211) raster_plot(S) subplot(223) imshow(C.W.todense(), interpolation='nearest') title('Synaptic connections') subplot(224) plot(R.times / ms, R.smooth_rate(2 * ms, filter='flat')) title('Firing rate') show()
Example 4: topographic connections from brian import * tau = 10 * ms N = 100 v0 = 5 * mV sigma = 4 * mV group = NeuronGroup(N, model='dv/dt=(v0-v)/tau + sigma*xi/tau**.5 : volt', threshold=10 * mV, reset=0 * mV) C = Connection(group, group, 'v', weight=lambda i, j:.4 * mV * cos(2. * pi * (i - j) * 1. / N)) S = SpikeMonitor(group) R = PopulationRateMonitor(group) group.v = rand(N) * 10 * mV run(5000 * ms) subplot(211) raster_plot(S) subplot(223) imshow(C.W.todense(), interpolation='nearest') title('Synaptic connections') subplot(224) plot(R.times / ms, R.smooth_rate(2 * ms, filter='flat')) title('Firing rate') show()
A more realistic synapse model Electrodiffusion: ionic channel conductance synaptic reversal potential g s (t) presynaptic spike open closed « conductance-based integrate-and-fire model »
Example: random network from brian import * taum = 20 * msecond taue = 5 * msecond taui = 10 * msecond Ee = 60 * mvolt Ei = -80 * mvolt eqs = ''' dv/dt = (-v+ge*(Ee-v)+gi*(Ei-v))*(1./taum) : volt dge/dt = -ge/taue : 1 dgi/dt = -gi/taui : 1''' P = NeuronGroup(4000, model=eqs, threshold=10 * mvolt, reset=0 * mvolt, refractory=5 * msecond) Pe = P.subgroup(3200) Pi = P.subgroup(800) we = 0.6 wi = 6.7 Ce = Connection(Pe, P, 'ge', weight=we, sparseness=0.02) Ci = Connection(Pi, P, 'gi', weight=wi, sparseness=0.02) P.v = (randn(len(P)) * 5 - 5) * mvolt P.ge = randn(len(P)) * P.gi = randn(len(P)) * S = SpikeMonitor(P) run(1 * second) raster_plot(S) show()
Example: random network from brian import * taum = 20 * msecond taue = 5 * msecond taui = 10 * msecond Ee = 60 * mvolt Ei = -80 * mvolt eqs = ''' dv/dt = (-v+ge*(Ee-v)+gi*(Ei-v))*(1./taum) : volt dge/dt = -ge/taue : 1 dgi/dt = -gi/taui : 1''' P = NeuronGroup(4000, model=eqs, threshold=10 * mvolt, reset=0 * mvolt, refractory=5 * msecond) Pe = P.subgroup(3200) Pi = P.subgroup(800) we = 0.6 wi = 6.7 Ce = Connection(Pe, P, 'ge', weight=we, sparseness=0.02) Ci = Connection(Pi, P, 'gi', weight=wi, sparseness=0.02) P.v = (randn(len(P)) * 5 - 5) * mvolt P.ge = randn(len(P)) * P.gi = randn(len(P)) * S = SpikeMonitor(P) run(1 * second) raster_plot(S) show()
Temporal coding
Reliability of spike timing Mainen & Sejnowski (1995) The same constant current is injected 25 times. The timing of the first spike is reproducible The timing of the 10 th spike is not
Reliability of spike timing Time of spike n: Constant current: Similar constant current: I+ δ the distance between spikes grows linearly
Reliability of spike timing Constant current + noise: Variance: the distance between spikes grows as
But Mainen & Sejnowski (1995) The same variable current is injected 25 times The timing of spikes is reproductible even after 1 s. (cortical neuron in vitro, injection at soma)
In the integrate-and-fire model and if V m =V t : V m → V r in silicoin vitro Spikes are precise if the injected current is variable
Dendrites
The dendritic tree So far we assumed the potential is the same everywhere on the neuron (« point model » or « isopotential model ») Not true!
Electrical model of a dendrite outside inside Assumptions: Extracellular milieu is conductor (= isopotential) Intracellular potential varies mostly along the dendrite (not across) dx Let V(x) = V intra (x) - V extra
Electrical model of a dendrite V(x) V(x+dx)
Electrical model of a dendrite dx Capacitance: d specific membrane capacitance Membrane resistance: specific membrane resistance Axial resistance:intracellular resistivity
The cable equation Kirchhoff’s law at position x: membrane time constant space constant or « electrotonic constant »
Synapses I s (t) = synaptic current at position x Discontinuity of longitudinal current at position x:
Stationary response Let E L =0 (reference potential) Solutions: We need boundary conditions to determine a and b
Stationary response: infinite cable I = (constant) current at x=0 V(x) is bounded Exponential solution on each half-cylinder:
Green function I(t) = current at position x=0 bounded V(x) Let G(x,t) the solution of the cable equation with condition LV= δ (t). Then: G = Green function (convolution)
Green function I(t) = current at position x=0 bounded V(x) (Fourier transform) (Gaussian for x)
Dendritic delay t V time to maximum = t*(x) simpler (and equivalent:) (Pseudo) propagation speed: proportional to
The dendritic tree not really a cylinder but almost: connected cylinders
Cable equation on the dendritic tree On each cylinder k: At each branching point: Continuity of potential: Kirchhoff’s law L
Cable equation on the dendritic tree At endings: At the soma: Kirchhoff’s law: No current across: 0 0 isopote ntial transmembrane current
Cable equation on the dendritic tree Synapses: I s (t) = synaptic current at position x
Cable equation on the dendritic tree Summary: Linear homogeneous PDEs Synapses: Linear homogeneous conditions: L j (V)=0 linear operator
Superposition principle Postsynaptic potential PSP j (t): solution at soma of Solution for multiple spikes at all synapses: L j (V)=0 synaptic current at synapse j for a spike at time 0 PSP j (t)=V(0,t) cable equation homogeneous conditions (branchings, etc) k th spike at synapse j
Dendrites: summary Membrane equation ⟶ partial differential equation « the cable equation » Linearity ⇒ superposition principle Different story with non-linear conductances! See: Biophysics of computation, by Christof Koch, Oxford University Press
Variations around the integrate- and-fire model
The « perfect integrator » Neglect the leak current: Or more precisely: replace V m by
The perfect integrator Normalization V t =1, V r =0 and if V=V t : V → V r = change of variable for V: V* = (V-V r )/(V t -V r ) idem for I
The perfect integrator Constant current Integration: Time to threshold: Firing rate: if I>0
The perfect integrator Variable threshold Integration: Firing rate: if otherwise Hz
Comparison with integrate-and-fire: constant current R Good approximation far from threshold (proof: Taylor expansion)
Spike timing: the perfect integrator is not reliable 2 different initial conditions: 2 slightly different inputs (ex. noise): constant difference modulo 1 the difference grows as(modulo 1) if ε(t) = noise
The quadratic IF model Comes from bifurcation analysis of HH model, i.e., for constant near-threshold input. More realistic current-frequency curve (contant input) But not realistic in fluctuation-driven regimes (noisy input) Resting potentialThreshold Spikes when V>V max (possibly infinity)
The exponential integrate-and-fire model Boltzmann function V a =-30 mV, k a =6 mV (typical values) (Fourcaud-Trocmé et al., 2003) The exponential integrate-and-fire model Spike initiation is due to the sodium (Na) channel I Na (spike when V diverges to infinity)
The exponential integrate-and-fire model (Fourcaud-Trocmé et al., 2003) Na + current (fast activation) Brette & Gerstner (J Neurophysiol 2005) Gerstner & Brette (Scholarpedia 2009) With adaptation, it predicts output spike trains of Hodgkin-Huxley models Badel et al. (J Neurophysiol 2008) V The exponential I-V curve fits in vitro recordings
Izhikevich model Fig. from E. M. Izhikevich, IEEE Transactions on Neural Networks 14, 1569 (2003). Many neuron types by changing a few parameters Comes from bifurcation analysis of HH equations with constant inputs near threshold → not correct for fluctuation-driven regimes
Adaptive exponential model Same as Izhikevich model, but with exponential initiation Spike: V → V r w → w + b More realistic for fluctuation-driven regimes Brette, R. and W. Gerstner (2005). J Neurophysiol 94: