# Rete neurale spiking

Una rete neurale spiking o rete neurale a impulso, in sigla SNN (dall'inglese spiking neural network), è una rete neurale artificiale che tenta di mimare più precisamente le reti neurali naturali.
Oltre allo stato sinaptico e neuronale una rete di questo tipo incorpora anche il concetto di tempo nel suo modello operativo. L'idea è che i neuroni artificiali non attivino in automatico ognuno un ciclo di propagazione come nelle reti multistrato con percettrone, ma piuttosto quando un potenziale di membrana - una intrinseca qualità del neurone correlata alla carica della sua membrana elettrica - raggiunge uno specifico valore. Quando un neurone si attiva genera un segnale che viaggia verso altri neuroni, che a turno incrementano o decrementano i loro potenziali in accordo a questo segnale.
Per le SNN, l'attuale livello di attivazione (modellato come una equazione differenziale) è normalmente considerato uno stato del neurone, che con impulsi in arrivo spinge questo valore più in alto e poi si attiva o decade nel tempo. Esistono vari "metodi di codifica" per interpretare l'uscita del "treno di impulsi" come numero reale, facendo affidamento sulla frequenza dei picchi o sul tempo tra i picchi, per codificare le informazioni.

## Programmi

Una vasta gamma di software applicativi può simulare SNN sia per CPU Intel, AMD, ARM, che per GPU con supporto CUDA e OpenCL.

### Simulatori SNN

Questi simulano modelli neurali complessi con un alto livello di dettaglio e precisione. Le grandi reti di solito richiedono un'elaborazione lunga. I candidati includono:
* BindsNET – sviluppato dal laboratorio sui sistemi dinamici e neurali biologicamente ispirati (BINDS) dell'Università del Massachusetts - Amherst.
* NeuralLead – è un kit di sviluppo grafico gratuito scritto completamente dalla società SJRiddix, è il più biologicamente plausibile poiché è possibile emulare i neurotrasmettitori e quindi eseguire simulazioni che coinvolgono le emozioni, inoltre vengono simulati diversi modelli neurali tra cui LIF, Izhikevich, Hodgkin Huxley, con la capacità di creare script con i seguenti linguaggi Python, C# o C++ come è possibile fare su Unity o Unreal Engine.
* CARLsim libreria aperta per lo sviluppo di SNN per CPU e GPU scritta in C++.
* Brian – sviluppato da Romain Brette and Dan Goodman alla Scuola normale di Parigi;
* GENESIS (the GEneral NEural SImulation System) – sviluppato nel laboratorio di James Bower alla Caltech;
* NEST – sviluppato dall'iniziativa NEST
* NEURON – principalmente sviluppato da Michael Hines, John W. Moore and Ted Carnevale presso l'Università Yale e l'Università Duke;
* Norse – una libreria di apprendimento profondo per neuroni biologici costruita su PyTorch che si integra con hardware neuromorfico. Norse è sviluppato all'Università di Heidelberg e al KTH Royal Institute of Technology;
* snnTorch - libreria basata su PyTorch sviluppata da Jason K. Eshraghian all'Università della California, Santa Cruz;
* SpykeTorch - un framework basato sulla libreria PyTorch ottimizzata specificatamente per SNN convoluzionali con almeno uno spike per neurone. Può essere eseguita su GPU.
* SpikingJelly: un framework libero di apprendimento profondo per reti SNN basato su PyTorch. Multimedia Learning Group, Institute of Digital Media (NELVT), Università di Pechino e Peng Cheng Laboratory sono i principali sviluppatori.