The Exponential Leaky-Integrate-and-Fire Neuron Model

Compared to the standard LIF model, the exponential leaky-integrate-and-fire model adds an exponential term (see Chapter 5, Section 2):

\begin{align} C\frac{\operatorname{d} V}{\operatorname{d} t} &= -g_\text{l} \left( V - E_\text{l} \right) \,+\, g_\text{l} \Delta_\text{T} \operatorname{exp} \left( \frac{V - V_\text{T}}{\Delta_\text{T}} \right) \,+\, I_\text{stim} \,. \end{align}

This exponential term introduces strong positive feedback once the membrane potential crosses the exponential threshold \(V_\text{T}\). The steepness of this feedback is controlled by the exponential slope factor \(\Delta_\text{T}\).

As before, we use a step current to study the neuron dynamics. In contrast to earlier experiments, we now vary both the amplitude and the duration of the step current and determine, for each duration, the minimum amplitude that elicits a spike. We begin by configuring suitable LIF parameters. Next, we enable the exponential term and adjust the exponential threshold \(V_\text{T}\). Finally, we record a strength-duration curve, which shows the minimum current amplitude required to evoke a spike as a function of stimulus duration.

Setting Everything Up

We again establish the connection to the BrainScaleS-2 system and import the required packages.

from _static.common.helpers import setup_hardware_client
setup_hardware_client()
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import quantities as pq

import pynn_brainscales.brainscales2 as pynn

Setting the LIF Parameters

We start by defining an experiment that injects a step current into a single neuron and by configuring the LIF parameters. You can use the exercises in Parameters of a Leaky-Integrate-and-Fire Neuron Model as a reference and reuse appropriate values.

Exercises

  • Task 1: Configure a leaky integrator (LI, spiking disabled) neuron with a leak potential around 300 and a membrane time constant of approximately 100 us. You may reuse values from Parameters of a Leaky-Integrate-and-Fire Neuron Model. Note: to obtain long time constants, it may be necessary to set leak_enable_division=True.

  • Task 2: Stimulate the neuron with a step current and plot the membrane voltage. Choose an amplitude of 100 and a duration of 0.1 ms. Leave 0.2 ms before and after the stimulus. What do you expect? How will the membrane potential evolve during and after the step?

  • Task 3: Enable spiking and choose a relatively high threshold such that the neuron spikes at a membrane potential of around 750. Use a refractory period of 255, a reset potential close to the leak potential, and the maximum reset conductance. The currents of the exponential term can become quite high. Therefore, we want to disable them during the reset by setting refractory_period_enable_pause=True. Why do we intentionally choose such a high threshold?

Rheobase Current

Next, we enable the exponential term and configure it such that it just elicits a spike for the chosen parameter set. This introduces two additional parameters: the exponential slope factor \(\Delta_\text{T}\) and the exponential threshold \(V_\text{T}\). On BrainScaleS-2, these correspond to exponential_i_bias and exponential_v_exp. While exponential_i_bias mainly controls the slope factor and exponential_v_exp mainly determines the exponential threshold, both parameters are not fully independent and influence each other on BrainScaleS-2. In this exercise, we keep exponential_i_bias fixed and vary exponential_v_exp until a single spike is elicited.

Exercises

  • Task 1: Enable the exponential term by setting exponential_enable=True and choose exponential_i_bias=200. Begin with a relatively large value for exponential_v_exp and decrease it step by step until the neuron reliably emits a spike. Then, increase exponential_v_exp again and determine the largest value for which a spike still occurs. Pay attention to the timing of the spike and how it changes as you vary exponential_v_exp.

  • Task 2: Determine the rheobase current, i.e. the minimum constant current amplitude that causes the neuron to spike. Use a long stimulus duration of 10 ms and vary the current amplitude accordingly. (Optionally) Implement a binary search to find the value automatically.

Recording a Strength-Duration Curve

We now record a strength-duration curve. For each stimulus duration, we determine the minimum current amplitude that produces a spike.

Exercises

  • Task 1: What qualitative shape do you expect for the strength-duration curve?

  • Task 2: Modify the code below to record the strength-duration curve. Use the previously determined rheobase current as a starting point and increase the amplitude up to 120. Limit the amplitude range to 5 values. Keep in mind that the hardware is shared among users; therefore, we will implement a more efficient protocol in the next task. Does the measured curve roughly match your expectations?

  • Task 3: Improve the efficiency of the code by exploiting the assumption that the required strength increases for shorter durations. Start with long durations and increase the amplitude until a spike occurs. For the next (shorter) duration, begin the search from the last successful amplitude. You can now increase the number of tested durations and amplitudes. Does the resulting curve better match your expectations? If not, what could explain possible deviations?

durations = np.logspace(-1, 0.1, 5)
amplitudes = np.linspace(50, 120, 5)

min_amplitudes = []

# TASK: loop over each duration and determine the minimal amplitude
# ...

# TASK: plot the strength-duration curve (minimum amplitude vs. duration)
# ...