{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A quick (and over-simplified) introduction to spiking neurons\n", "\n", "Author: Sadique Sheik\n", "\n", "Spiking neural networks are considered to be the `third generation` of neural networks preceeded by McCUlloch-Pitts threshold neurons (`first generation`) which produced digital outputs and Artificial Neural Networks with continuous activations, like sigmoids and hyperbolic tangets, (`second generation`) that are commonly used these days.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Artificial Neuron (AN) Model\n", "\n", "The transfer function of a neuron in ANNs can be expressed as follows.\n", "\n", "$$\\vec{y} = f(W.\\vec{x} + b)$$\n", "\n", "where $f$ is typically a non linear activation function such as a `signoid` or `hyperbolic tangent` function.\n", "\n", "\n", "> Note that the output directly depends on the inputs. The neuron does not have an internal state that would affect its output.\n", "\n", "\n", "This is where spiking neurons and spiking neural networks (SNNs) come into play. They add an additional dependence on the current `state` of the neuron." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Leaky Integrate and Fire (LIF) model\n", "\n", "One of the simplest models of spiking neurons is the Leaky Integrate and Fire (LIF) neuron model, where the state of the neuron, typically the `membrane potential` $v$, is dependent on its previous state in addition to its inputs. The dynamics of this state can be described as follows.\n", "\n", "$$\\tau \\dot{v} = - v(t) + R \\cdot \\big(I_{syn} + I_{bias}\\big)$$\n", "\n", "where $\\tau$ is the membrane time constant, which determines how much the neuron depends on its previous states and inputs and therefore defines the neuron's memory. The linear equation above describes the dynamics of a system with `leaky` dynamics ie over time, the membrane potential $v$ slowly `leaks` to $0$. This is why the neuron model is referred to as a `Leaky Integrate and Fire Neuron model`.\n", "\n", "\n", "> Note that there is an additional notion of time, which does not occor explicitly in an artificial neuron model.\n", "\n", "\n", "$I_{syn} := W.\\vec{x}$ is the weighted sum of all the input snaptic contributions and $I_{bias}$ is a constant bias. The constant resistance $R$ has unity value and only serves to match units between membrane potential and currents.\n", "\n", "The output of this neuron is binary and instantaneous. It is $1$ only when $v$ reaches a threshold value $v_{th}$ upon which the membrane potential is immediately reset to a reset value $v_{reset} < v_{th}$. The dynamics of $v$ can be expressed as:\n", "\n", "$$\n", "v(t+\\delta) = \n", "\\left\\{\n", "\\begin{array}{}\n", "v_{reset},& \\text{if } v(t) \\geq v_{th} \\\\ \n", "v(t),& \\text{otherwise} \n", "\\end{array}\n", "\\right.\n", "$$\n", "\n", "\n", "This instantanious output of $1$ is typically referred to as `spike` at time $t$. A series of such spikes will hence forth be referred to as $s(t)$.\n", "\n", "$$\n", "s(t) = \n", "\\left\\{\n", "\\begin{array}\n", "1,& \\text{if } v(t)\\geq v_{th}\\\\\n", "0,& \\text{otherwise}\n", "\\end{array}\n", "\\right.\n", "$$" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Neuron spikes 2 times at the following simulation time steps :[47, 94]\n" ] } ], "source": [ "# A simple LIF neuron simulation for `t_sim=100` time steps\n", "\n", "import numpy as np\n", "\n", "t_sim = 100 # ms\n", "tau = 20 # ms\n", "v_th = 10.0 # Membrane spiking threshold\n", "v_reset = 0 # Resting potential\n", "vmem = [0] # Initial membrane potential\n", "i_syn = 11 # unit free, assuming constant synaptic input\n", "st = [] # Spike train\n", "for t in range(t_sim):\n", " # Check threshold\n", " if vmem[t] >= v_th:\n", " vmem[t] = v_reset\n", " st.append(t)\n", " # Membrane dynamics\n", " dv = (1/tau)*(-vmem[t] + i_syn)\n", " # Save data\n", " vmem.append(vmem[t] + dv)\n", " \n", "print(f'Neuron spikes {len(st)} times at the following simulation time steps :{st}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can plot the membrane potential trace to see how it evolves over time." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "# Plot membrane potential\n", "import matplotlib.pyplot as plt\n", "plt.figure()\n", "plt.plot(range(t_sim+1), vmem)\n", "plt.title('LIF membrame dynamics')\n", "plt.xlabel('$t$')\n", "_=plt.ylabel('$V_{mem}$')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Constant-leak Integrate and Fire (IAF) model\n", "\n", "The LIF model describes a dynamical system where $v$ is continually being updated. While this is a realistic description of most systems in the real world, for the sake of simplicity (and ease of computation on a digital system like a PC), if we assume that there is only a constant `leak` or (no `leak` if = 0) in its membrane potential, such a model will hence forth be referred to as an `IAF` mode and is described by the following equation:\n", "\n", "$\\tau \\dot{v} = - v_{leak} + R \\cdot \\big(I_{syn} + I_{bias}\\big)$\n", "\n", "with $v_{leak}$ being the constant `leak`. Because it is a constant, it can be joined with the bias, such that the equation for $v$ can be simplified to\n", "\n", "$\\tau \\dot{v} = R \\cdot \\big(I_{syn} + \\tilde{I}_{bias}\\big)$\n", "\n", "with $\\tilde{I}_{bias} := I_{bias} + \\frac{v_{leak}}{R}$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "## IAF model in SINABS\n", "import torch\n", "import sinabs.layers as sl\n", "\n", "\n", "# Define a neuron in 'SINABS'\n", "neuron = sl.SpikingLayer()\n", "\n", "\n", "# Set a constant bias current to excite the neuron\n", "inp = torch.zeros(t_sim, 1)+0.025\n", "\n", "# Membrane potential trace\n", "vmem = [0]\n", "\n", "# Output spike raster\n", "st = [] # Spike train\n", "for t in range(t_sim):\n", " with torch.no_grad():\n", " out = neuron(inp[t:t+1])\n", " # Check if there is a spike\n", " if (out!=0).any():\n", " st.append(t)\n", " # Record membrane potential\n", " vmem.append(neuron.state[0])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot membrane potential\n", "plt.figure()\n", "plt.plot(range(t_sim+1), vmem)\n", "plt.title('IAF membrame dynamics')\n", "plt.xlabel('$t$')\n", "plt.ylabel('$V_{mem}$');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Activation function\n", "\n", "The activation functions for artificial neuron models are fairly straight forward to understand. Given an input $x$ and an activation function $\\Phi$ the output $y$ of this neuron would be:\n", " \n", "$$y = \\Phi (W.x + b)$$\n", "\n", "For a spiking neuron model such as `IAF`, what would this activation function look like? Defining such a function is fairly complex because the output $y$ doesn't just depend on input $x$ but also its state. More over the output of these neurons is a series of spikes $s(t)$ ie series of Dirac delta functions.\n", "\n", "One way to interpret the resonse of the spiking neuron to its inputs is to look at the number of spikes the neuron produces within a time window. For instance, in the example above we can say that the neruon produces an output of $2$ for a `bias` of $0.025$ (which was our choice of `bias` parameter) and input `zero`. \n", "\n", "```\n", "We will refer to this `interpretation` of spikes as `rate coding` because we are looking at spike rate of neurons as our information medium.\n", "```\n", "\n", "With this `rate coding` interpretation of spiking neurons let us look at what the transfer function $\\Phi$ looks like for `IAF` neuron model." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# IAF neuron activation function\n", "import numpy as np\n", "\n", "# Define a neuron in 'SINABS'\n", "neuron = sl.SpikingLayer()\n", "\n", "# Simulation time\n", "t_sim = 100\n", "\n", "\n", "spike_rates_out = []\n", "\n", "biases = np.arange(-5, 5, 0.2) # Range of inputs to iterate over\n", "\n", "for bias in biases:\n", " # Reset the neuron\n", " neuron.reset_states()\n", " # Set a constant bias current to excite the neuron\n", " inp = torch.zeros(t_sim,1)+bias\n", " # Output spike raster\n", " with torch.no_grad():\n", " # Simulate neuron for t_sim timesteps\n", " out = neuron(inp)\n", " \"\"\"\n", " Notice that we can do the entire simulation in one line,\n", " unlike the code block earlier where we had a for loop to iterate over all time steps.\n", " \"\"\"\n", " spike_rates_out.append(out.sum())\n", "\n", "plt.figure()\n", "plt.plot(biases, spike_rates_out)\n", "plt.title(\"IAF neuron activation funciton $\\Phi$\")\n", "plt.ylabel(\"Output spike count\")\n", "plt.xlabel(\"Input current\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## IAF neuron's transfer function is equivalent to ReLU\n", "\n", "The above figure must look familiar if you have worked with ANNs, especially deep learning models; the activation function of a `IAF neuron` can be interpreted as that of a `Rectified Linear Unit (ReLU)`'s activation function.\n", "\n", "__This observation is the entry point to porting Deep Learning (DL) models consisting of layers with ReLU (which is a majority) activations to SNNs.__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References\n", "\n", "- Farabet C, Paz R, Pérez-Carrasco J, Zamarreño C, Linares-Barranco A, LeCun Y, Culurciello E, Serrano-Gotarredona T, Linares-Barranco B. Comparison between frame-constrained fix-pixel-value and frame-free spiking-dynamic-pixel convNets for visual processing. Frontiers in neuroscience. 2012 Apr 12;6:32.\n", "- Neil D, Pfeiffer M, Liu SC. Learning to be efficient: Algorithms for training low-latency, low-compute deep spiking neural networks. InProceedings of the 31st annual ACM symposium on applied computing 2016 Apr 4 (pp. 293-298). ACM.\n", "- Rueckauer B, Lungu IA, Hu Y, Pfeiffer M, Liu SC. Conversion of continuous-valued deep networks to efficient event-driven networks for image classification. Frontiers in neuroscience. 2017 Dec 7;11:682.\n", "- Sengupta A, Ye Y, Wang R, Liu C, Roy K. Going deeper in spiking neural networks: VGG and residual architectures. Frontiers in neuroscience. 2019;13.\n", " " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }