Scalable Memristive-Friendly Reservoir Computing for time series classification using Memristive-Friendly Echo State Networks (MF-ESN). Combines memristive device physics with reservoir computing for efficient time-series classification. Trigger words: memristive reservoir computing, MF-ESN, echo state network, memristor time series, hardware reservoir, memristive ESN, time series classification, reservoir computing classification.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add hiyenwong/ai_collection --skill scalable-memristive-reservoir-computing --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Scalable Memristive Reservoir Computing?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hiyenwong-scalable-memristive-reservoir-computing-ai-collection)More formats (shields.io, HTML) on the badges page.
---
name: scalable-memristive-reservoir-computing
description: "Scalable Memristive-Friendly Reservoir Computing for time series classification using Memristive-Friendly Echo State Networks (MF-ESN). Combines memristive device physics with reservoir computing for efficient time-series classification. Trigger words: memristive reservoir computing, MF-ESN, echo state network, memristor time series, hardware reservoir, memristive ESN, time series classification, reservoir computing classification."
---
# Scalable Memristive-Friendly Reservoir Computing
## Overview
Memristive-Friendly Echo State Networks (MF-ESN) leverage memristive device physics for efficient reservoir computing, particularly suited for time series classification tasks.
## Key Concepts
### Echo State Network (ESN) Basics
ESNs are recurrent neural networks with:
- **Fixed random reservoir** — weights are not trained
- **Trainable readout** — only output weights are learned
- **Echo state property** — network state depends on input history
### Memristive-Friendly Design
Memristors provide:
- **Analog weight storage** — conductance = weight
- **In-memory computation** — Ohm's law for multiplication
- **Non-volatility** — weights persist without power
- **High density** — crossbar arrays
## Architecture
```
Input → [Memristive Reservoir] → Readout Layer → Output
↑
Fixed random weights
(memristive crossbar)
```
### MF-ESN Formulation
```
x(t+1) = (1 - α)x(t) + α·f(W_in·u(t) + W_res·x(t))
y(t) = W_out·x(t)
```
Where:
- `x(t)`: reservoir state
- `u(t)`: input
- `W_in`: input weights (fixed)
- `W_res`: reservoir weights (fixed, memristive)
- `W_out`: output weights (trained)
- `α`: leaking rate
- `f`: activation (tanh)
## Training Procedure
### 1. Reservoir Initialization
```python
import numpy as np
def initialize_mf_esn(n_inputs, n_reservoir, spectral_radius=0.9,
sparsity=0.1, leaking_rate=0.3):
"""Initialize MF-ESN reservoir with memristive constraints."""
# Random sparse reservoir matrix
W_res = np.random.randn(n_reservoir, n_reservoir)
mask = np.random.rand(n_reservoir, n_reservoir) < sparsity
W_res = W_res * mask
# Scale to target spectral radius
eigenvalues = np.linalg.eigvals(W_res)
spectral_radius_actual = max(abs(eigenvalues))
W_res = W_res * (spectral_radius / spectral_radius_actual)
# Input weights
W_in = np.random.randn(n_reservoir, n_inputs) * 0.5
return W_res, W_in, leaking_rate
```
### 2. State Collection
```python
def collect_states(W_res, W_in, input_sequence, leaking_rate,
washout=100):
"""Run reservoir and collect states for training."""
n_steps = input_sequence.shape[0]
n_reservoir = W_res.shape[0]
states = np.zeros((n_steps, n_reservoir))
x = np.zeros(n_reservoir)
for t in range(n_steps):
u = input_sequence[t]
x_new = (1 - leaking_rate) * x + leaking_rate * np.tanh(
W_in @ u + W_res @ x
)
x = x_new
if t >= washout:
states[t] = x
return states[washout:]
```
### 3. Readout Training
```python
def train_readout(states, target_sequence, reg=1e-6):
"""Train output weights with ridge regression."""
# Ridge regression: W_out = Y·X^T·(X·X^T + λI)^(-1)
X = states.T
Y = target_sequence.T
W_out = Y @ X.T @ np.linalg.inv(X @ X.T + reg * np.eye(X.shape[0]))
return W_out
```
## Memristive Implementation
### Crossbar Array Mapping
```
Bit Lines (BL)
↓ ↓ ↓
┌───┬────┬────┬────┐
W0 │ M │ M │ M │ M │ ← Word Line 0
├───┼────┼────┼────┤
W1 │ M │ M │ M │ M │ ← Word Line 1
├───┼────┼────┼────┤
W2 │ M │ M │ M │ M │ ← Word Line 2
└───┴────┴────┴────┘
↑ ↑ ↑
Input Voltages (V)
Output Currents (I) = V × G (Ohm's law)
where G = memristor conductance = weight
```
### Device Constraints
| Constraint | Impact | Mitigation |
|---|---|---|
| Conductance range [G_min, G_max] | Weight clipping | Normalize weights |
| Device variability | Noise in computation | Redundancy, calibration |
| Nonlinearity | Non-ideal V-I curve | Pre-distortion, calibration |
| Sneak paths | Current leakage | Selection devices, 1T1R |
| Write endurance | Limited programming cycles | Infrequent reprogramming |
## Time Series Classification Pipeline
```python
class MemristiveESNClassifier:
def __init__(self, n_reservoir=500, spectral_radius=0.9,
sparsity=0.1, leaking_rate=0.3, reg=1e-6):
self.n_reservoir = n_reservoir
self.spectral_radius = spectral_radius
self.sparsity = sparsity
self.leaking_rate = leaking_rate
self.reg = reg
self.W_res = None
self.W_in = None
self.W_out = None
def fit(self, X_train, y_train):
"""Train on multiple time series."""
# Initialize reservoir
n_inputs = X_train[0].shape[1]
self.W_res, self.W_in, _ = initialize_mf_esn(
n_inputs, self.n_reservoir,
self.spectral_radius, self.sparsity, self.leaking_rate
)
# Collect states from all training sequences
all_states = []
all_labels = []
for x, y in zip(X_train, y_train):
states = collect_states(
self.W_res, self.W_in, x, self.leaking_rate
)
# Pool states (e.g., mean pooling)
pooled = states.mean(axis=0)
all_states.append(pooled)
all_labels.append(y)
X = np.array(all_states)
Y = np.array(all_labels)
# Train readout
self.W_out = train_readout(X, Y, self.reg)
def predict(self, X_test):
"""Predict labels for test sequences."""
predictions = []
for x in X_test:
states = collect_states(
self.W_res, self.W_in, x, self.leaking_rate
)
pooled = states.mean(axis=0)
pred = self.W_out @ pooled
predictions.append(pred.argmax())
return predictions
```
## Performance Characteristics
- **Training speed**: O(N·T) where N = reservoir size, T = sequence length
- **Inference speed**: O(N) per timestep (matrix-vector multiply)
- **Memory**: O(N²) for reservoir weights
- **Accuracy**: Competitive with LSTM/GRU on many time series tasks
- **Hardware efficiency**: Memristive implementation enables O(1) matrix-vector multiply
## When to Use
1. **Time series classification** with limited training data
2. **Edge deployment** where training speed matters
3. **Memristive hardware** implementation
4. **Quick prototyping** of recurrent networks
5. **Low-power applications** requiring analog computation
## Hyperparameter Tuning
| Parameter | Range | Effect |
|---|---|---|
| n_reservoir | 100-2000 | Capacity vs. overfitting |
| spectral_radius | 0.5-1.2 | Memory depth |
| sparsity | 0.05-0.3 | Connectivity density |
| leaking_rate | 0.1-0.9 | Timescale of dynamics |
| reg (ridge) | 1e-8 to 1e-2 | Overfitting control |
## Reference
arXiv: 2604.19343 (2026-04-21)
Authors: Horuz, Ceni, Gallicchio
URL: https://arxiv.org/abs/2604.19343
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!