# Réseau de neurones à impulsions

Les réseaux de neurones à impulsions (SNNs : Spiking Neural Networks, en anglais) sont un raffinement des réseaux de neurones artificiels (ANNs : Artificial Neural Networks, en anglais) où l’échange entre neurones repose sur l’intégration des impulsions et la redescente de l’activation, à l’instar des neurones naturels. L’encodage est donc temporel et binaire.
Le caractère binaire pose une difficulté de continuité au sens mathématique (cela empêche notamment l’utilisation des techniques de rétropropagation des coefficients - telle que la descente de gradient - utilisées classiquement dans les méthodes d'apprentissage). L’encodage en temps pose de même des problèmes d’interprétation.
Ces inconvénients sont aussi des avantages dans une perspective spatio-temporelle : l’intégration limite l’activation aux neurones voisins (espace) et tolère la perte d’information (temps).
Ces éléments rendent les SNNs théoriquement plus puissants que d’autres types d’ANNs globalement dérivés de l'algorithme du perceptron. Les difficultés d’implémentation matérielle et de méthode d’apprentissage semblent toutefois des freins à l’émergence des SNNs; l'industrie présente cependant des solutions commerciales depuis 2017$^,$ avec diverses annonces évoquant un intérêt pratique en termes de complexité adressable et d'efficacité énergétique$^,$$^,$.

## Historique

L'idée de s'inspirer des processus biologiques du cerveau pour créer un modèle informatique est apparue assez tôt dans l'histoire de l'informatique. Wolfgang Maass identifie trois générations de réseau de neurones en se basant sur le type de modèle de neurones.

### Modèle de neurone sans impulsion
#### Premier réseaux

L'un des premiers modèle de réseaux de neurones est le perceptron proposé par Frank Rosenblatt en 1958. Dans sa version la plus simplifiée, le perceptron est mono-couche et n'a qu'une seule sortie à laquelle toutes les entrées sont connectées. De plus, c'est un classifieur binaire, c'est-à-dire que les entrées ainsi que la sortie sont de type booléen.
Cependant, Minsky et Papert montrèrent des limitations théoriques du perceptron, notamment sur l'impossibilité de traiter des problèmes non-linéaires (par exemple, le cas de la fonction XOR). Ils généralisèrent implicitement ce constat à tous les modèles d'ANNs. De ce fait, une partie de la communauté IA les délaissa au profit d'autres techniques.

#### Neurone formel et deuxième génération

La deuxième génération de réseaux de neurones est basée sur des unités neuronales qui utilisent une fonction d'activation réelle. Elle prend en paramètre une somme pondérée des entrées et génère un ensemble continu de valeurs de sortie possibles. Cette fonction doit avoir certaines propriétés, l'une d'entre elles est la dérivabilité. C'est une condition nécessaire si on veut que l'algorithme d'apprentissage soit celui de la descente du gradient, qui est le plus utilisé à l'heure actuelle. Cet algorithme cherche à minimiser l'erreur entre la prédiction déterminée par le réseau et la valeur réellement attendue. Pour cela, la méthode cherche à déterminer la correction en se basant sur la sortie et la dérivée de la fonction d'activation des neurones. Cette correction est alors appliquée sur les poids synaptiques, ceux qui contribuent à engendrer une erreur importante se verront modifiés de manière plus significative que les poids qui ont engendré une petite erreur.
Les fonctions d'activation les plus communes sont la fonction ReLU (la plus populaire à l'heure actuelle), la fonction sigmoïde ainsi que la fonction identité.
Ces réseaux de deuxième génération sont également plus réalistes d'un point de vue biologique que la première génération, en ce sens que la sortie d'une unité peut être interprétée comme une représentation de la fréquence ou du taux d'émission d'impulsions à un instant t d'un neurone biologique (codage neuronal : codage fréquentiel)$^,$.
Les architectures profondes adoptées à l'heure actuelle qui contribuent au succès du machine learning utilisent ce type de neurones. Ces approches ont notamment permis des progrès importants et rapides dans les domaines de l'analyse du signal sonore ou visuel et particulièrement sur la reconnaissance visuelle.
On peut citer par exemple le challenge ImageNet de 2012 qui a propulsé ces solutions en mettant en avant des résultats exceptionnels (de 25% pour les meilleures solutions en 2011 à 16% pour les premières approches ANNs de 2012). Pour autant, des limites dans ce modèle existent, la principale d'entre elles est le nombre d'exemples nécessaires lors de l'apprentissage. Plus le problème est complexe et plus la quantité de données nécessaires est importante, si bien qu'il existe des jeux de données de plusieurs millions d'images dont plus de la moitié est annotée manuellement. Il faut en moyenne deux à trois semaines avec 8 cartes graphiques (GPU) pour faire converger le réseau entraînant des coûts énergétiques importants.

### L'essor des réseaux à impulsions

D'un point de vue conceptuel, les réseaux impulsionnels (SNNs) constituent la génération qui est la plus proche du modèle biologique. Les neurones reçoivent et émettent, cette fois-ci, une suite d'impulsions (spike, en anglais) chronologiquement ordonnée, ce qui induit une notion temporelle en plus. Par contre le modèle ne prend pas en compte l'amplitude et la durée de l'impulsion, c'est surtout le moment où celle-ci a été émise qui est défini comme pertinent. L'état d'un neurone est décrit par son potentiel, qui est modélisé par une variable dynamique. Le neurone fonctionne comme un intégrateur fuyant, c'est-à-dire un composant qui augmente son potentiel lorsqu'il reçoit des impulsions en les accumulant au cours du temps et qui diminue si celui-ci n'est pas stimulé. De plus, lorsqu'une impulsion est émise, on prend en compte le concept de période réfractaire qui permet un réglage sur le pas de temps minimal entre deux impulsions.
L'une des premières motivations ayant poussé les chercheurs à développer ce modèle est que l'on a observé que l'information pertinente résidait dans l'instant d'émission d'impulsions plutôt que dans la fréquence. C'est pourquoi, contrairement aux réseaux de neurones de seconde génération qui sont largement utilisés, les neurones à impulsions ne se déclenchent pas à chaque cycle de propagation, mais seulement lorsque leur niveau d'activation atteint une valeur seuil spécifique. Par conséquent, le réseau est asynchrone et susceptible de bien gérer les données temporelles telles que la vidéo.
Ce modèle est donc plus généraliste car il peut prendre en compte les deux encodages : fréquentiel et temporel. Le codage fréquentiel est déterminé par le nombre d'impulsions dans une période donnée d'un neurone, on revient dans une configuration plus classique comme pour les neurones de seconde génération. Le codage temporel est déterminé par le moment d'émission d'une impulsion, il n y a pas d'équivalent avec la seconde génération, les SNNs sont donc un modèle plus général. Des travaux ont montré que l'on pouvait émuler les principaux modèles classiques (MLP, etc.) avec des SNNs.
Les SNNs ne reposent pas sur la descente de gradient stochastique et la rétropropagation. Au lieu de cela, les neurones sont reliés par des synapses, qui mettent en œuvre un mécanisme d'apprentissage inspiré de la biologie : il repose sur la plasticité fonction du temps d'occurrence des impulsions (STDP : Spike-timing-dependent plasticity, en anglais), une règle mettant à jour les poids synaptiques en fonction des temps de spikes, et augmente le poids lorsqu'un neurone pré-synaptique envoie une impulsion un peu avant le neurone post-synaptique (de l'ordre de quelques millisecondes). Par conséquent, le processus d'apprentissage n'est intrinsèquement pas supervisé, et le SNN peut être utilisé avec succès pour détecter des modèles de données de manière non supervisée.
Malgré tout, plusieurs travaux essayent de reproduire les mécanismes faisant le succès des réseaux profonds. L'apprentissage supervisé par l'algorithme de rétropropagation, les architectures profondes de types convolutifs sont autant d'aspects qui suscitent un grand intérêt.
Les SNNs sont utilisés depuis longtemps dans la communauté neuroscientifique comme modèle fiable pour simuler avec précision la biologie et comprendre les mécanismes du cerveau.
En outre, les SNNs sont de plus en plus utilisés dans le traitement des données en raison de leur mise en œuvre sur du matériel à faible consommation d'énergie$^,$.
Les SNNs ont été utilisés dans des tâches liées à la vision, notamment, pour de la reconnaissances d'objets. Concrètement, il existe des travaux sur la classification d'image$^,$, des travaux sur la reconnaissance d'action en temps réel par exemple.

## Simulation de réseaux de neurones à impulsions

Ces programmes simulent des modèles neuronaux complexes avec un haut niveau de détail et de précision, en utilisant des modèles neuronaux :
* GENESIS (le système de simulation GEneral NEural SImulation System) - développé dans le laboratoire de James Bower à Caltech;
* NEURON - principalement développé par Michael Hines, John W. Moore et Ted Carnevale à l'université Yale et l'université Duke;
* Brian - développé par Romain Brette et Dan Goodman à l'École normale supérieure ;
* NEST - développé par l'initiative NEST ;
* BindsNET - développé par le laboratoire Biologically Inspired Neural and Dynamical Systems (BINDS) de l'université du Massachusetts à Amherst.
* SpykeTorch - un framework basé sur PyTorch optimisé spécifiquement pour les SNNs convolutifs (CSNNs) avec au plus une impulsion par neurone. Fonctionne sur les GPU.
* N2D2 - un framework développée par le CEA LETI permettant l’entraînement de Réseaux de Neurones Artificiels par Rétropropagation, la conversion de ses réseaux vers le domaine impulsionnel, ainsi que l’entraînement de Réseaux de Neurones à Impulsions par la règle d’apprentissage impulsionnelle non-supervisée STDP. Le framework permet également l’inférence dans les domaines formels (classique) et impulsionnels.
* SpikingJelly - un framework permettant l’entraînement de Réseaux de Neurones à Impulsions par la méthode de « Surrogate Gradient Learning », une variante de la Rétropropagation du gradient adaptée aux Réseaux Récurrents (Rétropropagation Temporalisée) permise par une approximation de la fonction de seuillage des neurones impulsionnels par une fonction Sigmoïde. Le framework permet l’inférence dans le domaine impulsionnel, ainsi que l’accélération de l’entraînement et de l’inférence sur GPU.

## Processeurs neuromorphiques

Un processeur neuromorphique (emprunté à l'anglais neural processing unit, NPU) - ou processeur neuronal est un processeur dont l'architecture est basée sur le fonctionnement des réseaux de neurones biologiques. Ainsi, ces processeurs sont constitués de plusieurs neurones artificiels physiques dont le comportement suit un modèle de neurone.
Le tableau suivant résume les réalisations existantes :
Comparaison des différents circuits neuromorphique à impulsion$^,$ :
| Puce | Apprentissage en direct | Signal | Gravure | Concepteur | Densité d'intégration | Densité d'intégration | Performance clé | Performance clé | Article initial |
| Puce | Apprentissage en direct | Signal | Gravure | Concepteur | neurones | synapses | Comportement de Izhikevich | Énergie par opération | Article initial |
| HICANN | STDP | Signal mixe | 180nm CMOS | | 512 | 112k | 20 | | |
| BrainScales | | Signal mixe au niveau du wafer | 180nm CMOS | Human Brain project | 180K par wafer | 40M par wafer | | | |
| Neurogrid | Non | Signal mixe | 28nm CMOS | Université Stanford | 4096 neurones | 64K | | | |
| ROLLS | SDSP | Signal mixe | 180nm CMOS | | 256 | 128k | 20 | | |
| DYNAP-SE$^,$ | Non | Signal mixe | 180nm CMOS | Institut de neuro-informatique de Zürich | 1024 | 64K | 20 | | |
| SpiNNaker | Programmable | logique | 130nm CMOS | Université de Manchester | 1K neurones par cœur, 1M cœur | - | Programmable | | |
| TrueNorth | Non | logique | 28nm CMOS | IBM | 1M | 256M | 11 | | |
| Loihi | Programmable | logique | 14nm CMOS | Intel | 130k | 130M | 6 | | |
| ODIN$^,$ | SDSP | logique | 28nm CMOS | Université catholique de Louvain | 256 | 64K | 20 | | |
| Akida | | | | Brainchip | 1,2M | 10M | | | |
| Loihi 2 | Programmable | | | Intel | 1M | 120M | | | |