-
Notifications
You must be signed in to change notification settings - Fork 0
Inhibition and Reflex Gating

Generated with Grok Build: Grok 4.5 · xAI Imagine (/imagine)
How LiquidCortex modulates excitability and learning rate without baking domain-specific sensors into the core.
After PR #12, the package no longer reads market telemetry, GPU temperature, or FPGA buffer load inside the reservoir. Instead:
- Inhibition is a caller-provided scalar that raises the spike threshold.
- Reflex gating is a caller-provided scalar that can boost Fast-lobe learning.
This is the “proprioception at the edge” model: hardware or application monitors stay outside LiquidCortex; they map their stress / surprise signals into inhibition and reflex_signal.
Constants:
| Constant | Value | Role |
|---|---|---|
V_THRESH |
−50 mV | Baseline spike threshold |
INHIBITION_GAIN |
15.0 mV | Threshold lift per unit inhibition |
MAX_INHIBITION |
3.0 | Clamp on the inhibition input |
Each SparseBrain step:
inhib = clamp(inhibition, 0, MAX_INHIBITION)
v_thresh_dynamic = V_THRESH + inhib * INHIBITION_GAIN
Examples:
inhibition |
Effective threshold |
|---|---|
| 0.0 | −50.0 mV (baseline) |
| 0.5 | −42.5 mV |
| 1.0 | −35.0 mV |
| ≥ 3.0 | −5.0 mV (max clamp) |
Higher inhibition → harder to spike → lower instantaneous spike rate and quieter reservoir. Tests assert v_thresh_dynamic > V_THRESH after a non-zero inhibition step.
Suggested (non-prescriptive) mappings for integrators:
| External signal | Suggested mapping |
|---|---|
| Thermal / power budget | Scale into [0, 1] then clamp via MAX_INHIBITION
|
| Queue / buffer pressure | Same; keep dynamics outside the package |
| Risk / volatility | Feed strategy-side scalar; do not hardcode venues |
Only active on EnsembleBrain paths (ensemble_step! / step!(::EnsembleBrain, ...)).
| Parameter | Default | Meaning |
|---|---|---|
reflex_eta |
ETA (0.001) |
Base STDP / Hebbian rate for all lobes |
reflex_signal |
0.0 | Caller “shock” or surprise magnitude |
Logic:
if |reflex_signal| > 0.1
Fast lobe eta = reflex_eta * 5
else
Fast lobe eta = reflex_eta
other lobes always use reflex_eta
The Fast lobe (index 1, τ_m = 10 ms) is the only lobe that receives the 5× boost. That accelerates W_out Hebbian updates on the lobe that already carries the largest aggregation weight (0.4).
step!(brain::SparseBrain, u; inhibition, reflex_eta) accepts reflex_eta directly but has no reflex_signal gate — you choose the rate each call.
The dense reference path uses a different mechanism: gain control on the recurrent drive,
gain = 1.0 - inhibit_val * 0.4
x ← tanh(gain * (W x + W_in u))
so inhibition shrinks recurrence rather than raising a LIF threshold. See Reference LSM.
Last updated: July 28, 2026
Updated by: Grok Build: Grok 4.5
Package tip reference: 4e2698c (main)