HomeEngineering InsightsSpiking Neural Networks
Spiking Neural Networks

Advanced SNNs: Recurrent Spik in g Networks and Temporal Dynamics

Feedforward SNNs have limited memory. Recurrent SNNs maintain state across timesteps, enabling temporal pattern learning. Understand LSTM-like mechanisms in spiking networks.

SS
Soham Sharma
AI Engineer, Botmartz · July 17, 2026 · 2 min read
Read Time
2 min
Failure Modes
5
Code Snippets
3
Runnable Notebook
1
Advanced SNNs: Recurrent Spiking Networks and Temporal Dynamics

Feedforward SNNs process one timestep at a time (no inter-step communication). Recurrent SNNs have connections between timesteps, enabling temporal dynamics. Add gating mechanisms (inspired by LSTMs) to SNNs, and you get powerful temporal learning with neuromorphic efficiency.

Recurrent SNN Architecture

Standard SNN:

x_t → Neuron → spike_t (no memory between timesteps)

Recurrent SNN: x_t + hidden_{t-1} → Neuron → spike_t, hidden_t (hidden state carries information forward)

Implementation: Spiking LSTM-like Unit

import torch

import torch.nn as nn

class RecurrentLIFCell(nn.Module): def __init__(self, input_size, hidden_size, leak=0.99): super().__init__() self.input_size = input_size self.hidden_size = hidden_size self.leak = leak

# Input to hidden self.W_x = nn.Linear(input_size, hidden_size)

# Hidden to hidden (recurrence) self.W_h = nn.Linear(hidden_size, hidden_size)

# Membrane potential self.V = None

def forward(self, x, hidden=None): """ x: (batch, input_size) hidden: (batch, hidden_size) previous state

Returns: spike (batch, hidden_size), new_hidden """ if hidden is None: hidden = torch.zeros(x.size(0), self.hidden_size, device=x.device)

if self.V is None: self.V = torch.zeros_like(hidden)

# Input current + recurrent input current = self.W_x(x) + self.W_h(hidden)

# Integrate self.V = self.leak * self.V + current

# Generate spike spike = (self.V >= 1.0).float()

# Reset self.V = self.V * (1 - spike)

return spike, spike # spike becomes new hidden state

class RecurrentSNN(nn.Module): def __init__(self, input_size, hidden_size, output_size, num_layers=2): super().__init__() self.num_layers = num_layers self.hidden_size = hidden_size

# Recurrent layers self.cells = nn.ModuleList([ RecurrentLIFCell( input_size if i == 0 else hidden_size, hidden_size, leak=0.99 ) for i in range(num_layers) ])

# Output layer self.output = nn.Linear(hidden_size, output_size)

def forward(self, x): """ x: (batch, seq_len, input_size)

Returns: (batch, output_size) """ batch_size, seq_len, input_size = x.shape

# Process sequence hidden = [torch.zeros(batch_size, self.hidden_size) for _ in range(self.num_layers)] outputs = []

for t in range(seq_len): x_t = x[:, t, :] # (batch, input_size)

# Forward through layers for layer_idx, cell in enumerate(self.cells): spike, hidden[layer_idx] = cell(x_t if layer_idx == 0 else spike, hidden[layer_idx])

# Decode output output = self.output(spike) outputs.append(output)

# Average over time final_output = torch.stack(outputs, dim=1).mean(dim=1) return final_output

# Training snn = RecurrentSNN(input_size=28*28, hidden_size=128, output_size=10, num_layers=2) optimizer = torch.optim.Adam(snn.parameters(), lr=1e-3) criterion = nn.CrossEntropyLoss()

for epoch in range(10): for images, labels in train_loader: # Convert image to spike train (Poisson) spike_train = (torch.rand(images.size(0), 20, 28*28) < images.unsqueeze(1) / 255.0).float()

output = snn(spike_train) loss = criterion(output, labels)

optimizer.zero_grad() loss.backward() optimizer.step()

Temporal Pattern Learning

Recurrent SNNs can learn patterns like:

  • Sequences (speech, time series)
  • Spatiotemporal events (video, action)
  • Context-dependent decisions

Conclusion

Recurrent SNNs add temporal dynamics to spiking networks. Combining recurrence with surrogate gradients enables training complex temporal models with neuromorphic efficiency. These networks are the future of event-based sensor processing. Next: neuromorphic hardware (Intel Loihi, IBM TrueNorth).

Closing Takeaways

Measure retrieval precision and recall in isolation before touching the model.
Chunk along document structure, not arbitrary character counts.
Combine vector and keyword search — hybrid retrieval beats either alone.
Treat evaluation as continuous infrastructure, not a launch-week report.
Try It Yourself
A runnable Google Colab notebook with the eval harness and hybrid search code from this post.
#SNNs#Recurrent Networks#Temporal Processing#Memory
0 views
SS
Soham Sharma
AI Engineer at Botmartz, building enterprise RAG and agent systems in production. Contributing to open-source libraries.

Discussion (0)

No approved comments yet. Be the first to share your thoughts!

Leave a Comment

Your email address will not be published. Required fields are marked *

More Engineering Insights
TensorFlow>-
Soham Sharma · 8 min read
GeneralPlaywright E2E Test Post
Integration Bot · 5 min read