Spiking Neural Networks
De la neurona biológica a la computación neuromórfica: modelos de neurona spiking (LIF, Izhikevich, Hodgkin-Huxley), codificación temporal, plasticidad sináptica (STDP), entrenamiento con surrogate gradients, hardware neuromórfico (Loihi, TrueNorth, SpiNNaker), frameworks (snnTorch, Norse, SpikingJelly) y aplicaciones reales con código en Python y PyTorch.
De la biología a la computación
Las Spiking Neural Networks (SNNs) son la tercera generación de redes neuronales artificiales. A diferencia de las ANNs clásicas que procesan valores continuos, las SNNs comunican información mediante impulsos eléctricos discretos (spikes), imitando cómo el cerebro biológico realmente funciona.
La neurona biológica
Para entender las SNNs, primero necesitamos entender la neurona real. Una neurona biológica tiene cuatro partes fundamentales:
El potencial de acción (spike)
El potencial de acción es un pulso eléctrico de ~1 ms de duración que viaja por el axón. Es un evento todo-o-nada: o dispara con amplitud completa, o no dispara en absoluto.
| Fase | Potencial | Qué ocurre |
|---|---|---|
| Reposo | ~−70 mV | La neurona está en equilibrio. Canales Na⁺ cerrados. |
| Umbral | ~−55 mV | Si se alcanza, se dispara un potencial de acción. |
| Despolarización | → +30 mV | Canales Na⁺ se abren masivamente. Subida rápida. |
| Repolarización | → −70 mV | Canales K⁺ se abren, Na⁺ se cierran. El potencial cae. |
| Hiperpolarización | ~−80 mV | Periodo refractario: la neurona no puede disparar de nuevo brevemente. |
Spike trains: la información está en el tiempo
A diferencia de las ANNs que transmiten valores continuos (como 0.73), las neuronas biológicas transmiten trenes de spikes: secuencias de pulsos en el tiempo. La información se codifica en el patrón temporal de estos spikes.
ANN vs SNN: diferencias fundamentales
| Propiedad | ANN (2ª generación) | SNN (3ª generación) |
|---|---|---|
| Señal | Valores continuos (floats) | Spikes binarios en el tiempo |
| Activación | ReLU, sigmoid, softmax | Dinámica del potencial de membrana |
| Dimensión temporal | No inherente (excepto RNNs) | Intrínseca: cada spike tiene un timestamp |
| Computación | Multiply-accumulate (MAC) | Accumulate (AC) — solo cuando llega un spike |
| Consumo energético | Alto (todas las neuronas activas) | Bajo (sparse: solo las que disparan) |
| Hardware nativo | GPUs, TPUs | Chips neuromórficos (Loihi, TrueNorth, SpiNNaker) |
| Entrenamiento | Backprop (diferenciable) | Surrogate gradients, STDP, conversión ANN→SNN |
| Potencia teórica | Aproximador universal | Turing-completo (Maass, 1997) |
Leaky Integrate-and-Fire (LIF)
El modelo LIF es el caballo de batalla de las SNNs: suficientemente simple para ser eficiente, suficientemente rico para capturar la dinámica esencial del spiking.
Donde \( V \) es el potencial de membrana, \( \tau_m \) la constante de tiempo de membrana, \( V_{\text{rest}} \) el potencial de reposo, \( R \) la resistencia de membrana e \( I(t) \) la corriente de entrada.
⚡ Regla de disparo
Cuando \( V(t) \geq V_{\text{th}} \) (umbral):
- La neurona emite un spike en el instante \( t \).
- El potencial se resetea: \( V \leftarrow V_{\text{reset}} \).
- Opcionalmente, entra un periodo refractario \( \Delta t_{\text{ref}} \) donde no puede volver a disparar.
LIF discreto (para simulación)
En la práctica, simulamos con pasos de tiempo discretos \( \Delta t \):
Donde \( \beta = e^{-\Delta t / \tau_m} \) es el factor de leak (decaimiento). Si \( V[t] \geq V_{\text{th}} \), spike y reset.
🔬 Widget: Simulador de neurona LIF
Ajusta los parámetros y observa cómo el potencial de membrana evoluciona y cuándo la neurona dispara.
import torch
import snntorch as snn
# Crear neurona LIF
beta = 0.85 # factor de decaimiento (leak)
lif = snn.Leaky(beta=beta, threshold=1.0)
# Simular 100 pasos de tiempo
num_steps = 100
input_current = torch.ones(num_steps) * 0.3 # corriente constante
# Inicializar estado
mem = lif.init_leaky() # V = 0
spikes = []
membrane = []
for t in range(num_steps):
spk, mem = lif(input_current[t], mem)
spikes.append(spk.item())
membrane.append(mem.item())
spike_count = sum(spikes)
print(f"Spikes: {spike_count} en {num_steps} pasos")
print(f"Tasa de disparo: {spike_count/num_steps:.2%}")
Otros modelos de neurona spiking
| Modelo | Ecuaciones | Realismo | Coste | Uso |
|---|---|---|---|---|
| IF (Integrate-and-Fire) | \( \frac{dV}{dt} = I(t) \) (sin leak) | ⭐ | Muy bajo | Pruebas teóricas |
| LIF | Con leak exponencial | ⭐⭐ | Bajo | SNNs prácticas, neuromórfico |
| Izhikevich | 2 ecuaciones, 4 parámetros | ⭐⭐⭐⭐ | Medio | Simulaciones a gran escala |
| AdEx | LIF + adaptación exponencial | ⭐⭐⭐ | Medio | Modelado de neocorteza |
| Hodgkin-Huxley | 4 ecuaciones diferenciales | ⭐⭐⭐⭐⭐ | Muy alto | Neurociencia detallada |
| SRM (Spike Response) | Kernel-based (filtros) | ⭐⭐⭐ | Medio | Análisis teórico |
El modelo de Izhikevich (2003) es un compromiso brillante: con solo 2 ecuaciones y 4 parámetros reproduce todos los patrones de disparo conocidos (regular, bursting, chattering, etc.):
Con reset: si \( v \geq 30 \): \( v \leftarrow c, \; u \leftarrow u + d \).
Los parámetros (a, b, c, d) determinan el tipo de neurona:
| Tipo | a | b | c | d |
|---|---|---|---|---|
| Regular spiking | 0.02 | 0.2 | −65 | 8 |
| Intrinsically bursting | 0.02 | 0.2 | −55 | 4 |
| Chattering | 0.02 | 0.2 | −50 | 2 |
| Fast spiking | 0.1 | 0.2 | −65 | 2 |
Hodgkin & Huxley (1952) modelaron los canales iónicos del axón gigante del calamar. Premio Nobel en 1963.
Donde \( m, h, n \) son variables de gating que siguen sus propias ecuaciones diferenciales. Extremadamente preciso pero costoso de simular.
Hodgkin, A.L. & Huxley, A.F. (1952). A quantitative description of membrane current. J. Physiology.Sinapsis: conexiones entre neuronas spiking
Cuando una neurona pre-sináptica \( j \) dispara un spike en el instante \( t_j^f \), genera una corriente post-sináptica (PSC) en la neurona \( i \):
Donde \( w_{ij} \) es el peso sináptico y \( \kappa(t) \) es el kernel post-sináptico (PSP kernel), típicamente:
con \( \Theta(t) \) la función escalón de Heaviside y \( \tau_s \) la constante de tiempo sináptica.
Codificación de información con spikes
Un reto clave de las SNNs: ¿cómo representar datos del mundo real (imágenes, audio, sensores) como trenes de spikes? Los esquemas principales son:
El valor de la señal se codifica como la frecuencia de disparo: señal alta → tasa de spikes alta.
En la práctica, para convertir un píxel \( x \in [0,1] \) a spike train, cada paso de tiempo se genera un spike con probabilidad \( x \) (proceso de Bernoulli / Poisson).
import snntorch.spikegen as spikegen
import torch
# Imagen MNIST normalizada [0, 1] → spike train
pixel_values = torch.tensor([0.2, 0.8, 0.5, 0.1])
num_steps = 100
# Cada paso: spike con prob = pixel_value
spike_train = spikegen.rate(pixel_values, num_steps=num_steps)
print(f"Shape: {spike_train.shape}") # (100, 4)
print(f"Tasa real pixel 0.8: {spike_train[:, 1].mean():.2f}")
La información se codifica en el tiempo exacto del spike: señal alta → spike temprano; señal baja → spike tardío.
Time-to-first-spike (TTFS) es la variante más popular: solo se necesita un spike por neurona, haciéndolo extremadamente eficiente.
import snntorch.spikegen as spikegen
import torch
pixel_values = torch.tensor([0.9, 0.5, 0.1, 0.7])
num_steps = 50
# Mayor valor → spike más temprano
spike_train = spikegen.latency(
pixel_values,
num_steps=num_steps,
tau=5.0, # constante de tiempo
normalize=True,
linear=False # codificación logarítmica
)
for i, val in enumerate(pixel_values):
first = (spike_train[:, i] == 1).nonzero()
t = first[0].item() if len(first) > 0 else "∞"
print(f"Pixel {val:.1f} → primer spike en t={t}")
Solo se emite un spike cuando la señal cambia significativamente. Ideal para señales temporales (video, sensores DVS):
Las cámaras de eventos (DVS) usan exactamente este principio: solo transmiten cambios de brillo a nivel de píxel, a velocidades de >1 MHz con latencia de μs.
Un valor se codifica distribuyendo la actividad entre un grupo de neuronas, cada una sintonizada a un rango distinto. Inspirada en los campos receptivos del cortex visual:
Las neuronas con centro \( \mu_i \) más cercano al valor \( x \) disparan más. Alta precisión y robustez al ruido, pero usa más neuronas.
| Esquema | Spikes/neurona | Latencia | Eficiencia | Mejor para |
|---|---|---|---|---|
| Rate | Muchos | Alta | ⭐⭐ | Compatibilidad ANN |
| Temporal (TTFS) | 1 | Baja | ⭐⭐⭐⭐⭐ | Clasificación rápida |
| Delta | Variable | Muy baja | ⭐⭐⭐⭐ | Señales temporales / DVS |
| Population | Distribuidos | Media | ⭐⭐⭐ | Alta precisión |
STDP: Spike-Timing-Dependent Plasticity
La STDP es la regla de aprendizaje biológico más importante para las SNNs. Descubierta experimentalmente por Bi & Poo (1998), formaliza la regla de Hebb: "neurons that fire together, wire together", pero con una dependencia temporal precisa.
Donde \( \Delta t = t_{\text{post}} - t_{\text{pre}} \), y \( A_+, A_- \) son las amplitudes de potenciación/depresión, y \( \tau_+, \tau_- \) las constantes de tiempo (típicamente ~20 ms).
🧠 Interpretación intuitiva
- Pre dispara antes que post (\( \Delta t > 0 \)): la sinapsis se refuerza (LTP). "La neurona pre causó el disparo de la post".
- Post dispara antes que pre (\( \Delta t < 0 \)): la sinapsis se debilita (LTD). "La neurona pre no contribuyó".
- Cuanto más cercanos en tiempo, mayor es el cambio \( |\Delta w| \).
🔬 Widget: Ventana STDP
Ajusta \( \Delta t \) y observa cómo cambia el peso sináptico.
Más allá de STDP: otras formas de plasticidad
El problema del gradiente en SNNs
El entrenamiento de SNNs mediante backpropagation tiene un obstáculo fundamental: la función de disparo (spike) es una función escalón de Heaviside, cuyo gradiente es cero en todas partes excepto en el umbral, donde es infinito (delta de Dirac):
Esto hace que el backprop estándar no funcione: los gradientes son exactamente 0 o ∞. ¿Soluciones?
Surrogate Gradients
La técnica más exitosa: en el forward pass se usa la función escalón real (Heaviside), pero en el backward pass se sustituye el gradiente por una función suave:
| Nombre | Fórmula del surrogate gradient | Notas |
|---|---|---|
| Fast sigmoid | \( \frac{1}{(1 + k|V - V_{\text{th}}|)^2} \) | Rápida, popular en snnTorch |
| Sigmoid | \( k \cdot \sigma(k(V-V_{\text{th}})) \cdot (1-\sigma(\cdot)) \) | Clásica, buena convergencia |
| Arctan | \( \frac{1}{\pi} \cdot \frac{k}{1 + (k(V-V_{\text{th}}))^2} \) | Colas largas, gradientes más suaves |
| Triangular | \( \max(0, 1 - k|V - V_{\text{th}}|) \) | Compacta, eficiente |
| Gaussian | \( k \cdot \exp(-k^2(V-V_{\text{th}})^2) \) | SpikingJelly, muy localizada |
El parámetro \( k \) controla la pendiente: valores altos → más parecida a Heaviside pero gradientes más localizados; valores bajos → más suave pero menos fiel.
Neftci, E.O. et al. (2019). Surrogate Gradient Learning in Spiking Neural Networks. IEEE Signal Processing Magazine.import torch
import torch.nn as nn
import snntorch as snn
from snntorch import surrogate
# Usar fast sigmoid como surrogate
spike_grad = surrogate.fast_sigmoid(slope=25)
class SpikingNet(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 256)
self.lif1 = snn.Leaky(beta=0.9, spike_grad=spike_grad)
self.fc2 = nn.Linear(256, 10)
self.lif2 = snn.Leaky(beta=0.9, spike_grad=spike_grad)
def forward(self, x, num_steps=25):
mem1 = self.lif1.init_leaky()
mem2 = self.lif2.init_leaky()
spk2_rec = []
for _ in range(num_steps):
cur1 = self.fc1(x)
spk1, mem1 = self.lif1(cur1, mem1)
cur2 = self.fc2(spk1)
spk2, mem2 = self.lif2(cur2, mem2)
spk2_rec.append(spk2)
# Contar spikes de salida
return torch.stack(spk2_rec, dim=0)
# La loss: contar spikes por clase
# La clase con más spikes gana
net = SpikingNet()
optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)
Backpropagation Through Time (BPTT) para SNNs
Las SNNs procesan información a lo largo del tiempo, similar a las RNNs. El entrenamiento despliega la red en el eje temporal y aplica BPTT con surrogate gradients:
- Rate loss: CrossEntropy sobre conteo de spikes de salida.
- Max membrane: CrossEntropy sobre el máximo \( V_{\text{mem}} \) de las neuronas de salida.
- Latency loss: penalizar tiempo hasta primer spike de la neurona correcta.
Conversión ANN → SNN
Enfoque alternativo al entrenamiento directo: entrenar una ANN convencional y convertirla a SNN post-entrenamiento.
| Aspecto | Entrenamiento directo | Conversión ANN→SNN |
|---|---|---|
| Accuracy | Alta (con suficientes pasos) | Muy alta (hereda de la ANN) |
| Latencia (pasos temporales) | Baja (5–25 pasos) | Alta (100–2500 pasos) |
| Eficiencia energética | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ (muchos spikes) |
| Codificación temporal | Sí (puede usar TTFS) | No (solo rate coding) |
| Facilidad | Complejo (surrogates, BPTT) | Simple (usar ANN entrenada) |
| Biologicidad | Mayor | Menor (rate-based) |
Otras estrategias de entrenamiento
Hardware neuromórfico
Las SNNs alcanzan su máximo potencial cuando se ejecutan en hardware neuromórfico: chips diseñados para emular neuronas y sinapsis directamente en silicio, con eficiencia energética de órdenes de magnitud superior a las GPUs.
Davies, M. et al. (2018). Loihi: A Neuromorphic Manycore Processor. IEEE Micro.
Merolla, P.A. et al. (2014). A million spiking-neuron IC. Science.
Furber, S. et al. (2014). The SpiNNaker Project. Proc. IEEE.
Pehle, C. et al. (2022). The BrainScaleS-2 accelerated neuromorphic system. arXiv:2201.11063.
| Chip | Neuronas | Sinapsis | Consumo | Aprendizaje on-chip | Tipo |
|---|---|---|---|---|---|
| Loihi 2 | 1M | 120M | ~1W | ✅ STDP, surrogates | Digital |
| TrueNorth | 1M | 256M | 70 mW | ❌ Solo inferencia | Digital |
| SpiNNaker 2 | ~1B (sim) | Variable | ~10W | ✅ Flexible (ARM) | Digital+ARM |
| BrainScaleS-2 | 512 | 131K | ~1W | ✅ Analógica | Analógico |
| GPU (A100) | N/A (software) | N/A | 300W | N/A | von Neumann |
Frameworks de software para SNNs
Aunque el hardware neuromórfico está en fase de maduración, podemos simular SNNs en GPUs convencionales usando frameworks especializados. Los principales:
El framework más popular para investigación en SNNs. Integración nativa con PyTorch, surrogate gradients automáticos, modelos de neurona pre-construidos (LIF, Synaptic, Recurrent, etc.).
- Ventajas: curva de aprendizaje suave si conoces PyTorch, excelentes tutoriales, activamente mantenido.
- Repo:
github.com/jeshraghian/snntorch - Paper: Eshraghian et al. (2023). Training Spiking Neural Networks Using Lessons From Deep Learning.
import torch
import torch.nn as nn
import snntorch as snn
from snntorch import surrogate
spike_grad = surrogate.fast_sigmoid(slope=25)
beta = 0.9
class SpikingCNN(nn.Module):
def __init__(self):
super().__init__()
# Capa convolucional spiking
self.conv1 = nn.Conv2d(1, 16, 3, padding=1)
self.lif1 = snn.Leaky(beta=beta, spike_grad=spike_grad)
self.pool = nn.MaxPool2d(2)
self.conv2 = nn.Conv2d(16, 32, 3, padding=1)
self.lif2 = snn.Leaky(beta=beta, spike_grad=spike_grad)
self.fc = nn.Linear(32 * 7 * 7, 10)
self.lif3 = snn.Leaky(beta=beta, spike_grad=spike_grad)
def forward(self, x, num_steps=25):
mem1 = self.lif1.init_leaky()
mem2 = self.lif2.init_leaky()
mem3 = self.lif3.init_leaky()
spk_out = []
for _ in range(num_steps):
spk1, mem1 = self.lif1(self.pool(self.conv1(x)), mem1)
spk2, mem2 = self.lif2(self.pool(self.conv2(spk1)), mem2)
spk3, mem3 = self.lif3(self.fc(spk2.flatten(1)), mem3)
spk_out.append(spk3)
return torch.stack(spk_out)
model = SpikingCNN()
print(f"Parámetros: {sum(p.numel() for p in model.parameters()):,}")
Framework bio-inspirado con modelos de neurona más detallados (LIF, LI, Izhikevich, etc.) y soporte para codificación temporal avanzada.
- Ventajas: modelos más biológicos, soporte nativo para recurrencia, buen rendimiento.
- Repo:
github.com/norse/norse
import torch
import norse.torch as norse
# Parámetros de la neurona LIF
params = norse.LIFParameters(
tau_mem_inv=100.0, # 1/τ_mem
v_th=torch.tensor(1.0),
v_leak=torch.tensor(0.0),
)
# Crear celda recurrente LIF
cell = norse.LIFRecurrentCell(
input_size=784,
hidden_size=128,
p=params
)
# Simular
state = None
for t in range(50):
x = torch.randn(32, 784) # batch=32
output, state = cell(x, state)
# output contiene spikes (0 o 1)
Desarrollado por OpenI / PKU (Pekín). Optimizado para rendimiento en GPU con backend CUDA custom. Soporta modo step-by-step y multi-step vectorizado.
- Ventajas: CuPy backend para máximo rendimiento, neuromorphic datasets integrados (DVS-CIFAR10, N-MNIST).
- Repo:
github.com/fangwei123456/spikingjelly
Frameworks de neurociencia computacional, no de ML. Diseñados para simular modelos biológicos detallados de redes neuronales con alta fidelidad.
- Brian2: define modelos con ecuaciones en texto plano. Extremadamente flexible. Ideal para investigación.
- NEST: optimizado para redes masivas (millones de neuronas). Usado en Human Brain Project.
from brian2 import *
# Definir neurona LIF con ecuaciones
eqs = '''
dv/dt = (I - v) / (10*ms) : 1
I : 1
'''
# Crear grupo de 100 neuronas
G = NeuronGroup(100, eqs, threshold='v > 1',
reset='v = 0', method='exact')
G.I = '0.5 + 1.5 * rand()' # corriente aleatoria
# Monitor de spikes
M = SpikeMonitor(G)
run(1*second)
print(f"Total spikes: {M.num_spikes}")
print(f"Tasa media: {M.num_spikes/100:.1f} Hz")
| Framework | Backend | Enfoque | GPU | Complejidad |
|---|---|---|---|---|
| snnTorch | PyTorch | ML / DL | ✅ Nativo | ⭐⭐ |
| Norse | PyTorch | Bio-ML | ✅ Nativo | ⭐⭐⭐ |
| SpikingJelly | PyTorch+CuPy | ML rendimiento | ✅✅ CuPy | ⭐⭐⭐ |
| BindsNET | PyTorch | Bio-ML | ✅ Nativo | ⭐⭐ |
| Brian2 | NumPy/C++ | Neurociencia | ❌ | ⭐⭐⭐⭐ |
| NEST | C++/MPI | Neurociencia | ❌ | ⭐⭐⭐⭐⭐ |
| Lava (Intel) | Python/Loihi | Neuromórfico | Loihi | ⭐⭐⭐ |
Datasets neuromórficos
Los datasets convencionales (MNIST, CIFAR) se pueden convertir a spikes, pero existen datasets nativamente event-driven capturados con cámaras de eventos (DVS):
| Dataset | Tipo | Clases | Fuente | Tamaño |
|---|---|---|---|---|
| N-MNIST | Dígitos (DVS) | 10 | Cámara DVS moviendo MNIST | 70K samples |
| DVS-CIFAR10 | Objetos (DVS) | 10 | Monitor + cámara DVS | 10K samples |
| DVS-Gesture | Gestos manuales | 11 | Cámara DVS nativa | 1.5K samples |
| SHD | Audio (dígitos hablados) | 20 | Modelo coclear → spikes | 10K samples |
| SSC | Audio (comandos) | 35 | Modelo coclear → spikes | 100K samples |
| N-Caltech101 | Objetos (DVS) | 101 | Cámara DVS moviendo Caltech | 9K samples |
Aplicaciones de las Spiking Neural Networks
SNNs vs ANNs: comparativa exhaustiva
| Dimensión | ANNs (convencionales) | SNNs (spiking) |
|---|---|---|
| Señal | Valores continuos (float32) | Spikes binarios (0/1) en el tiempo |
| Computación | MAC (multiply-accumulate) | AC (accumulate solo cuando hay spike) |
| Dimensión temporal | No inherente (se añade con RNN) | Nativa — los spikes son tiempo |
| Energía (inferencia) | ~5–300 mJ/imagen (GPU) | ~10–100 μJ/imagen (neuromórfico) |
| Latencia | ms (limitada por clock GPU) | μs–ms (event-driven) |
| Hardware | GPU/TPU | Neuromórfico (Loihi, TrueNorth) |
| Entrenamiento | Backprop maduro, bien comprendido | Surrogate gradients, STDP (en desarrollo) |
| Accuracy (ImageNet) | ~90%+ (SOTA) | ~75–80% (mejorando rápidamente) |
| Ecosistema | Masivo (PyTorch, TF, JAX) | Creciente (snnTorch, Norse, Lava) |
| Biologicidad | Baja (inspiración lejana) | Alta (emula mecanismos reales) |
| Mejor para | Tareas estáticas, alta accuracy | Edge, tiempo real, bajo consumo |
Estado del arte: resultados recientes
| Benchmark | Método | Accuracy | Pasos T | Año |
|---|---|---|---|---|
| MNIST | SNN directo (snnTorch) | 99.5% | 25 | 2023 |
| CIFAR-10 | SEW-ResNet (SpikingJelly) | 95.5% | 4 | 2022 |
| CIFAR-100 | Spikformer | 79.1% | 4 | 2023 |
| ImageNet | Spike-driven Transformer | 78.2% | 4 | 2023 |
| DVS-Gesture | SNN nativa | 97.6% | 16 | 2023 |
| SHD (audio) | SRNN | 92.4% | 100 | 2022 |
| N-Caltech101 | SNN-ResNet | 83.7% | 10 | 2022 |
📈 Tendencia 2023-2024
La brecha de accuracy entre SNNs y ANNs se está cerrando rápidamente, especialmente con Spiking Transformers (Spikformer, SpikingBERT) que combinan la arquitectura transformer con neuronas spiking, alcanzando accuracy competitiva con solo 4 pasos temporales.
Referencias académicas y recursos
📄 Papers fundacionales
| Paper | Autores | Año | Contribución |
|---|---|---|---|
| Networks of spiking neurons: the third generation | Maass, W. | 1997 | Definición formal de SNNs como tercera generación. Prueba de Turing-completitud. |
| A quantitative description of membrane current | Hodgkin, A.L. & Huxley, A.F. | 1952 | Modelo biofísico completo del potencial de acción. Premio Nobel 1963. |
| Simple model of spiking neurons | Izhikevich, E.M. | 2003 | Modelo de 2 ecuaciones que reproduce todos los patrones de disparo. |
| Synaptic modifications in cultured hippocampal neurons | Bi, G.Q. & Poo, M.M. | 1998 | Descubrimiento experimental de STDP. |
| Surrogate Gradient Learning in SNNs | Neftci, E.O. et al. | 2019 | Tutorial completo sobre surrogate gradients para entrenamiento de SNNs. |
| A solution to the learning dilemma for recurrent networks of spiking neurons | Bellec, G. et al. | 2020 | E-prop: regla de aprendizaje biológicamente plausible. |
📄 Papers recientes destacados
| Paper | Autores | Año | Contribución |
|---|---|---|---|
| Training SNNs Using Lessons From Deep Learning | Eshraghian, J.K. et al. | 2023 | Tutorial snnTorch + mejores prácticas de entrenamiento. |
| Spikformer: When Spiking Neural Network Meets Transformer | Zhou, Z. et al. | 2023 | Spiking self-attention. SOTA en CIFAR y DVS datasets. |
| Spike-driven Transformer | Yao, M. et al. | 2023 | Transformer full-spiking para ImageNet. 78.2% top-1. |
| SEW ResNet | Fang, W. et al. | 2021 | Spike-Element-Wise ResNets. Resolver degradación en SNNs profundas. |
| Deep Continuous Local Learning (DECOLLE) | Kaiser, J. et al. | 2020 | Aprendizaje local continuo sin BPTT completo. |
🔗 Repositorios y recursos
github.com/jeshraghian/snntorchPyTorch-based. Tutoriales excelentes. +2.5K ⭐
github.com/norse/norseModelos bio-realistas con PyTorch. +800 ⭐
github.com/fangwei123456/spikingjellyAlto rendimiento, CuPy backend. +2.7K ⭐
github.com/lava-nc/lavaFramework oficial para Intel Loihi. +600 ⭐
github.com/BindsNET/bindsnetML + aprendizaje biológico (STDP). +1.5K ⭐
github.com/brian-team/brian2Simulador de neurociencia. Ecuaciones en texto. +900 ⭐
📚 Recursos de aprendizaje
- snnTorch Tutorials:
snntorch.readthedocs.io/en/latest/tutorials— Curso completo de SNNs con PyTorch (8 tutoriales). - Neuromatch Academy:
compneuro.neuromatch.io— Curso de neurociencia computacional con módulo de SNNs. - Neuromorphic Computing Textbook: Schuman, C.D. et al. (2022) — Survey completo del campo.
- TU Graz SNNs course: materiales del grupo de Wolfgang Maass (creador del concepto de SNNs como 3ª generación).