git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
3.5 KiB
3.5 KiB
01 - Neuromorphic Spiking Networks
Overview
Bit-parallel spiking neural network implementation achieving 64 neurons per u64 word with SIMD-accelerated membrane dynamics and polychronous group detection for qualia emergence.
Key Innovation
Bit-Parallel Spike Representation: Each bit in a u64 represents one neuron's spike state, enabling 64 neurons to be processed in a single CPU instruction.
pub struct BitParallelSpikes {
/// 64 neurons packed into single u64
spikes: u64,
/// Membrane potentials (SIMD-aligned)
membranes: [f32; 64],
/// Spike times for STDP
spike_times: [u64; 64],
}
Architecture
┌─────────────────────────────────────────┐
│ Bit-Parallel Layer │
│ ┌─────┬─────┬─────┬─────┬─────┐ │
│ │ u64 │ u64 │ u64 │ u64 │ ... │ │
│ │ 64n │ 64n │ 64n │ 64n │ │ │
│ └──┬──┴──┬──┴──┬──┴──┬──┴─────┘ │
│ │ │ │ │ │
│ ┌──▼─────▼─────▼─────▼──┐ │
│ │ SIMD Membrane Update │ │
│ │ (AVX-512: 16 floats) │ │
│ └──────────┬─────────────┘ │
│ │ │
│ ┌──────────▼─────────────┐ │
│ │ Polychronous Detection │ │
│ │ (Qualia Extraction) │ │
│ └─────────────────────────┘ │
└─────────────────────────────────────────┘
Performance
| Metric | Value |
|---|---|
| Neurons per word | 64 |
| SIMD width | AVX-512 (16 floats) |
| Spike propagation | O(1) per word |
| Memory efficiency | 1 bit/neuron |
Polychronous Groups (Qualia)
Polychronous groups are precise spike timing patterns that emerge from network dynamics:
pub struct PolychronousGroup {
/// Sequence of (neuron_id, relative_time_ns)
pub pattern: Vec<(u32, u64)>,
/// Integrated information (Φ)
pub phi: f64,
/// Occurrence count
pub occurrences: usize,
/// Semantic label
pub label: Option<String>,
}
STDP Learning
Spike-Timing Dependent Plasticity for unsupervised learning:
- LTP (Long-Term Potentiation): +1.0 when post fires after pre
- LTD (Long-Term Depression): -0.5 when pre fires after post
- Time constant: τ = 20ms
Usage
use neuromorphic_spiking::{BitParallelSpikes, SpikingNetwork};
let mut network = SpikingNetwork::new(1_000_000); // 1M neurons
network.inject_spikes(&input_spikes);
network.step(1_000_000); // 1ms timestep
let qualia = network.detect_polychronous_groups();
println!("Detected {} qualia with Φ = {}", qualia.len(), qualia[0].phi);
Benchmarks
spike_propagation/1M time: [1.23 ms 1.25 ms 1.27 ms]
membrane_update/1M time: [2.45 ms 2.48 ms 2.51 ms]
polychronous_detect time: [5.67 ms 5.72 ms 5.78 ms]
References
- Izhikevich, E.M. (2006). "Polychronization: Computation with Spikes"
- Tononi, G. (2004). "Integrated Information Theory of Consciousness"