Spiking Neural Network
Una red neuronal de impulsos (SNN) transmite información mediante impulsos temporizados, como las neuronas biológicas, para la IA neuromórfica de bajo consumo. Abarca las neuronas y el entrenamiento.
Una red neuronal de impulsos (SNN) es una red neuronal cuyas neuronas se comunican mediante eventos discretos de todo o nada llamados impulsos, más parecidos a la forma en que se transmiten señales entre neuronas biológicas. Cada neurona acumula los impulsos recibidos en un potencial de membrana interno que se disipa lentamente, y solo emite su propio impulso cuando ese potencial supera un umbral. La información reside en qué neuronas se activan y cuándo, por lo que las SNN procesan los datos a medida que llegan y solo realizan operaciones cuando se producen impulsos. Esta dispersión basada en eventos las hace atractivas para la IA en el borde de bajo consumo en chips neuromórficos y las convierte en una opción natural para las cámaras de eventos, que también registran cambios como eventos asíncronos. En 1997, Wolfgang Maass describió las SNN como la tercera generación de modelos de redes neuronales, después de las unidades de umbral y las redes con activaciones continuas.
Cómo funcionan las neuronas de impulsos#
El modelo más utilizado es la neurona de integración y disparo con fuga (LIF). En cada paso temporal, su potencial de membrana decae en una proporción fija, se suman los impulsos de entrada ponderados y, si el potencial alcanza el umbral, la neurona emite un impulso y se reinicia. Una neurona con una entrada débil nunca alcanza el umbral, mientras que una con una entrada intensa se activa a menudo; por tanto, la frecuencia de disparo codifica la intensidad de la entrada. La simulación siguiente alimenta tres neuronas LIF con distintas corrientes de entrada constantes:
import torch
# Three leaky integrate-and-fire neurons, each driven by a constant input current
current = torch.tensor([0.15, 0.3, 0.6])
decay, threshold = 0.8, 1.0 # fraction of potential kept per step, firing threshold
potential = torch.zeros(3)
spike_counts = torch.zeros(3)
for step in range(20):
potential = decay * potential + current # leak, then integrate the input
spikes = (potential >= threshold).float() # fire where the threshold is crossed
potential = potential * (1 - spikes) # reset neurons that fired
spike_counts += spikes
print(f"Spikes in 20 steps: {spike_counts.tolist()}")Muestra Spikes in 20 steps: [0.0, 4.0, 10.0]. Con una entrada de 0.15, el potencial se estabiliza en 0.15 / (1 − 0.8) = 0.75, por debajo del umbral, así que esa neurona nunca se activa. Una entrada de 0.3 produce 4 impulsos, y una entrada de 0.6 supera el umbral cada dos pasos y produce 10 impulsos. Bibliotecas como snnTorch proporcionan capas LIF como esta en forma de módulos de PyTorch que se entrenan en GPU.
Codificación de la información en impulsos#
Antes de que una SNN pueda utilizar los datos, hay que convertirlos en impulsos, y el tipo de codificación afecta tanto a la precisión como a la velocidad:
- Codificación por frecuencia: Un valor se convierte en una frecuencia de disparo, como en la simulación anterior. Es robusta, pero necesita muchos pasos temporales para representar un valor con precisión.
- Codificación temporal: Un valor se convierte en el momento en que se produce un impulso, como cuando los píxeles más brillantes generan impulsos antes; así se transmite información con muy pocos impulsos.
- Sensores de eventos: Las cámaras de visión neuromórfica emiten un evento similar a un impulso cada vez que cambia el brillo de un píxel, con precisión de microsegundos y sin una frecuencia de fotogramas fija, por lo que sus datos pueden alimentar directamente una SNN.
Entrenamiento de SNN#
Un impulso es una función escalón cuya derivada es cero en casi todas partes, por lo que la retropropagación estándar no puede propagar gradientes a través de él. Hay tres métodos para sortear este problema. La conversión de ANN a SNN entrena una red normal con activaciones ReLU y asigna cada activación a una frecuencia de disparo. El entrenamiento con gradientes sustitutos mantiene el impulso abrupto en la pasada hacia delante, pero sustituye su derivada por la de una función suave en la pasada hacia atrás; después, entrena mediante retropropagación a través del tiempo, como una red neuronal recurrente (RNN). La plasticidad dependiente de la temporización de los impulsos (STDP) es una regla local inspirada en la biología que fortalece una sinapsis cuando el impulso de entrada precede al de salida y aprende sin etiquetas. La mayoría de las SNN recientes de alta precisión se entrenan directamente con gradientes sustitutos, que necesitan muchos menos pasos temporales que las redes convertidas; la conversión sigue siendo la forma más sencilla de partir de un modelo existente.
Hardware neuromórfico#
Las SNN ahorran más energía en chips diseñados para ellas. Los procesadores neuromórficos sitúan la memoria junto a muchos núcleos pequeños, se comunican mediante mensajes de impulsos y solo calculan cuando llegan impulsos; además, como los impulsos son binarios, cada evento sináptico requiere una suma en vez de una multiplicación. TrueNorth (2014), de IBM, integró un millón de neuronas en un único chip; SpiNNaker, de la Universidad de Mánchester, utiliza grandes conjuntos de núcleos ARM; y Loihi 2 de Intel impulsa Hala Point, un sistema de investigación de 2024 con 1.152 procesadores Loihi 2 y 1.150 millones de neuronas. En las GPU estándar, diseñadas para operaciones matriciales densas, las SNN suelen funcionar más despacio que las redes convencionales equivalentes.
SNN y redes neuronales convencionales#
- Señales: Las redes convencionales, incluidas las redes neuronales convolucionales (CNN) y los Transformer, transmiten valores continuos a través de todas las neuronas en una sola pasada hacia delante. Las SNN transmiten impulsos binarios durante muchos pasos temporales y, en cada instante, la mayoría de las neuronas permanecen inactivas.
- Precisión: Las redes convencionales siguen liderando en los benchmarks estándar de imágenes, y las SNN han reducido la diferencia sobre todo gracias al entrenamiento con gradientes sustitutos y a arquitecturas adaptadas de modelos convencionales.
- Eficiencia: Las SNN ejecutadas en hardware neuromórfico consumen mucha menos energía con entradas dispersas y basadas en eventos, como las secuencias de cámaras de eventos y el audio siempre activo.
Aplicaciones#
- Visión y robótica basadas en eventos: En un estudio de Science Robotics de 2024, investigadores de TU Delft pilotaron un dron con una red de visión y control totalmente basada en impulsos en Loihi de Intel, que convertía los datos sin procesar de una cámara de eventos en órdenes de movimiento a 200 Hz.
- Detección siempre activa: El reconocimiento de palabras clave, el reconocimiento de gestos y la detección de anomalías en sensores se benefician de las SNN, que apenas consumen energía cuando nada cambia.
- Detección de objetos: SpikeYOLO, un detector de impulsos de ECCV 2024 desarrollado por Xinhao Luo, Man Yao y sus colaboradores, se basa en el código de Ultralytics y simplifica la arquitectura de Ultralytics YOLOv8 con bloques basados en impulsos. Alcanzó un mAP50-95 del 48,9 % en COCO con entrenamiento de valores enteros e inferencia basada en impulsos.










