git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
103 lines
3.5 KiB
Markdown
103 lines
3.5 KiB
Markdown
# 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.
|
|
|
|
```rust
|
|
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:
|
|
|
|
```rust
|
|
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
|
|
|
|
```rust
|
|
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"
|