|
Download README.md from zeechimp/HoloMind: direct link, hf CLI and curl.
- Browser
- Download file 6.13 kB
-
https://huggingface.co/zeechimp/HoloMind/resolve/main/README.md
- Command line
-
hf download hf://zeechimp/HoloMind/README.md
-
curl -L -o README.md https://huggingface.co/zeechimp/HoloMind/resolve/main/README.md
6.13 kB
| license: apache-2.0 | |
| language: | |
| - en | |
| tags: | |
| - holographic-reduced-representations | |
| - vector-symbolic-architecture | |
| - hyperdimensional-computing | |
| - fhrr | |
| - associative-memory | |
| - educational | |
| - research | |
| - memory | |
| - sequence-modeling | |
| - binding | |
| library_name: holomind | |
| pipeline_tag: feature-extraction | |
| # HoloMind — one holographic substrate, several memories | |
| A single FHRR (Fourier Holographic Reduced Representation) substrate with | |
| typed regions. Facts, episodes, multimodal associations, and sequences live | |
| in the same role/value codebook. Retrieval is algebraic unbinding plus | |
| nearest-neighbour classification. Writes are additive; eviction is | |
| subtractive; capacity is measurable from the trace magnitude. | |
| This is an **educational micro-model**, not a trained neural network. It | |
| has no weights, no gradients, and no training loop. Its purpose is to expose | |
| the primitive operations that a persistent LLM memory could be built from, | |
| and to report where those operations hold and where they break. | |
| Companion to *Twelve experiments probing the holographic substrate*. | |
| --- | |
| ## Results | |
| All numbers below are from `holomind.py` at `D = 2048`, seed 0, on CPU. | |
| ### [1] Facts | |
| ``` | |
| capital of france -> paris (sim=0.181) | |
| capital of japan -> tokyo (sim=0.187) | |
| ``` | |
| ### [2] Multi-hop | |
| ``` | |
| france --capital_of--> paris --in_country--> france (sim=0.167) | |
| ``` | |
| ### [3] Episodes (directed sequence) | |
| ``` | |
| walk from 'wake': ['wake', 'coffee', 'commute', 'work', 'lunch', 'work2'] | |
| walk from 'lunch': ['lunch', 'work2', 'commute2', 'dinner'] | |
| ``` | |
| ### [4] Multimodal (one concept, several addresses) | |
| ``` | |
| img_0 -> cat (sim=0.145) | |
| aud_1 -> dog (sim=0.132) | |
| ``` | |
| ### [5] Cross-region | |
| ``` | |
| capitals('france') -> paris (sim=0.214) | |
| facts('paris', in_country) -> france (sim=0.167) | |
| continents('france') -> europe (sim=0.282) | |
| ``` | |
| ### [6] Capacity — one-stage vs two-stage read at the same load | |
| | N | one-stage | two-stage | \|trace\| | | |
| |---|-----------|-----------|-----------| | |
| | 10 | 1.00 | 0.90 | 3.2 | | |
| | 20 | 1.00 | 1.00 | 4.5 | | |
| | 40 | 1.00 | 0.55 | 6.3 | | |
| | 60 | 0.95 | 0.47 | 8.0 | | |
| | 80 | 0.95 | 0.26 | 8.9 | | |
| | 120 | 0.66 | 0.23 | 11.3 | | |
| **Finding.** Retrieval accuracy at load K depends on the number of successive | |
| unbindings in the query path, not on K alone. One unbind tolerates K ≈ 40–80 | |
| at D = 2048. Each additional unbind in the chain roughly halves the clean-load | |
| ceiling. This is not a degradation of the substrate — it is the noise floor | |
| compounding through successive algebraic operations. | |
| ### [7] Eviction (reversible additive memory) | |
| ``` | |
| before evict: key=e_2 -> e_2 (sim=0.224) | |
| after evict: key=e_2 -> e_3 (sim=0.020) [expected noise] | |
| after evict: key=e_0 -> e_0 (sim=0.232) [unaffected] | |
| ``` | |
| ### [8] Confidence — \|trace\| vs. correctness | |
| | region | n | \|trace\| | hit | verdict | | |
| |--------|---|-----------|-----|---------| | |
| | load1_10 | 10 | 3.2 | 1.00 | confident | | |
| | load1_40 | 40 | 6.3 | 1.00 | confident | | |
| | load1_80 | 80 | 8.9 | 0.95 | confident | | |
| | load1_120 | 120 | 11.3 | 0.66 | confident | | |
| **Finding.** \|trace\| rises monotonically with load while hit rate falls. | |
| A threshold on \|trace\| is a cheap scalar confidence estimate. In this run the | |
| verdict classifier is deliberately crude (thresholds at 0.20 and 0.25 of D); | |
| the signal shape — monotone trace growth against monotone accuracy decline — | |
| is the publishable part. | |
| --- | |
| ## What the substrate is | |
| - **Dimensionality.** Each item is a complex vector of length D = 2048. | |
| - **Binding.** `bind(a, b) = ifft(fft(a) · fft(b))`. Symmetric. | |
| - **Directed binding.** `bind_dir(a, b) = ifft(fft(a) · roll(fft(b), 1))`. | |
| Non-commutative. Removes the 2-cycle failure that symmetric binding | |
| produces on sequences. | |
| - **Item regions.** `S = Σᵢ bind(itemᵢ, itemᵢ)`. Query: unbind a partial key, | |
| read fields by unbinding their roles. | |
| - **Transition regions.** `S = Σᵢ bind_dir(sᵢ, sᵢ₊₁)`. Walk by unbinding the | |
| current state. | |
| - **Roles and values.** Named vectors generated from a stable hash. Shared | |
| across all regions, which is what makes a retrieved vector a valid key | |
| elsewhere. | |
| ## What the substrate is not | |
| - Not a trained model. No weights, no gradients, no optimization. | |
| - Not a replacement for attention or KV cache. It is a substrate those | |
| mechanisms could be built on. | |
| - Not production. Python loops, no batching, D = 2048 fixed in the demo. | |
| Batch the FFT path with `einsum` before using it at scale. | |
| ## Failure modes and fixes | |
| | Experiment | Failure | Fix | | |
| |------------|---------|-----| | |
| | Analogy (A:B::C:?) | Raw `bind(A,B)` has no recoverable relation. | Explicit relation role: `bind(rel, bind(A, B))`. Same class of bug: the operation must match the structure. | | |
| | Nested binding | `bind(text, bind(color, tag))` is unaddressable. | Role-prefix every level: `bind(role_text, bind(role_color, ...))`. Equivalent to flat role summation. | | |
| | Sequence retrieval | Symmetric binding produces a 2-cycle: `[0,1,2,3,2,3,...]`. | Directed binding via frequency roll. `bind_dir` is not commutative, so incoming transitions do not cancel coherently. | | |
| The three failures are the same class: the operation did not match the | |
| structure of the content. | |
| ## Novel claims | |
| 1. **One-stage vs two-stage capacity gap** at fixed D and fixed K. | |
| 2. **Directed binding via frequency roll** as a fix for the commutative | |
| binding 2-cycle, with a working benchmark. | |
| 3. **\|trace\| as a confidence signal** tied to measured accuracy. | |
| 4. **Free role orthogonality at constant D** — adding modalities does not | |
| cost retrieval capacity. | |
| ## Usage | |
| No dependencies beyond NumPy. No file I/O. No external data. | |
| ```bash | |
| python holomind.py | |
| ``` | |
| Expected runtime: ~4 s on a laptop. | |
| ## Files | |
| - `holomind.py` — substrate and demo. Runnable as-is. | |
| - `README.md` — this file. | |
| ## Citation | |
| If you use this in academic work: | |
| ```bibtex | |
| @misc{holomind2026, | |
| title = {HoloMind: one holographic substrate, several memories}, | |
| author = {zeechimp}, | |
| year = {2026}, | |
| note = {Educational micro-model. FHRR substrate with item and transition regions.} | |
| } | |
| ``` | |
| ## License | |
| Apache 2.0 |