HDC im Überblick
Nimm einen Vektor mit zehntausend Dimensionen und fülle ihn zufällig. Nimm noch einen. Die beiden stehen fast senkrecht aufeinander, und der nächste auch, und die nächsten tausend. Addiere zwei davon, und die Summe ähnelt immer noch beiden. Binde zwei davon, und du bekommst einen dritten Vektor, der keinem von beiden ähnelt und aus dem du, wenn du einen der beiden hast, den anderen zurückbekommst.1 Das ist hyperdimensionales Rechnen (HDC), auch vektorsymbolische Architekturen (VSA) genannt: Man rechnet mit ganzen Vektoren und ihren Überlagerungen, nicht mit einzelnen Bits.
Ich bin von der Gehirnseite gekommen. Neuronale Ensembles sehen für mich hyperdimensional aus: viele kleine Teile, Mustervervollständigung, Mischungen halb aktiver Ideen [Braitenberg], [Buzsáki]. Geblieben bin ich wegen der Programmierseite, denn Kanerva sagt, man kann daraus ein Lisp bauen.2 Aber kann man das wirklich? Einige der Seiten unten sind mein Versuch, es herauszufinden.
Diese Seite ist der Hub für meine ganze Arbeit zu HDC/VSA: Posts, zwei Notebook-Serien, Code und was als Nächstes kommt.
Posts
- High-Dimensional Computing With Sparse Vectors Using Clojure: der große. Binäre dünn besetzte Blockcodes in Clojure, ein Sparse Distributed Memory (SDM) mit Multi-Value-Modus, ein k-fach-Sequenzspeicher und meine These, dass Kanervas Adressdecoder ein leserzentrierter Zellverband (Cell Assembly) ist, vom Leser aus gesehen: der Decoder ist der Leser, die Eingabemuster innerhalb seines Radius sind seine Verbände.
- Machine Learning Diary: Iris klassifizieren mit einem Sparse Distributed Memory, im Erkundungsmodus.
- Neuronal Ensemble Memetics: der sehr große Notizstapel zu Zellverbänden, in dem HDC zum ersten Mal auftaucht, als der prinzipiellere Zugang zu einigen derselben Ideen.
- Neuronal Memetics Overview: die Kurzfassung. Ensembles als aktive Datenstrukturen, ein Hyperraum als Begriffsraum.
- Current Stuff | November 2024: eine Momentaufnahme, mit einem Abschnitt zu HDC, SDM und assoziativen Modellen.
Serie: A Vector-Symbolic Clojure
Ein kleines Clojure, in dem jeder Wert ein Vektor aus 2048 Zahlen ist: Listen, Maps, Sets, ganze Zahlen, Closures und die Umgebung, in der der Evaluator läuft. Es überträgt Hey Pentti, We Did It! von Tomkins-Flanagan und Kelly, ein Lisp 1.5 aus holographischen reduzierten Repräsentationen, auf Clojure3 und lässt es dann laufen, bis es bricht. Die Übersicht und der Aufbau sind Notebooks, deren Zahlen der Code live berechnet. Code.
- A Vector-Symbolic Clojure: die Übersicht. Das Design, wie robust es ist, Programmieren in Überlagerung und die fünf Fallen, in die ich getappt bin.
- Building a Vector-Symbolic Interpreter: von Zufallsvektoren bis
(fact 5), Schritt für Schritt. - How the Vector-Symbolic Clojure Got Here: was kaputtging, ungefähr in der Reihenfolge, in der ich es fand, und was sich geändert hat.
- Reproducing the Traps in the Original Code: die fünf Fallen, ausgeführt gegen den Code der ursprünglichen Autoren selbst; das zeigt, welche davon dort zutreffen, mit Errata für die Autoren.4
Serie: HDC Time Series
HDC-MiniROCKET ist die Arbeit von Kenny Schlegel, Peer Neubert und Peter Protzel, damals alle an der TU Chemnitz. Schlegel ist noch dort; Neubert ist jetzt an der Universität Koblenz.5 MiniROCKET macht aus einer Zeitreihe etwa 10.000 Merkmale, die ignorieren, wann etwas passiert ist. HDC-MiniROCKET bindet die Merkmale jedes Zeitschritts an einen Vektor, der diesen Zeitpunkt kodiert, und ein Skalenparameter s legt fest, wie fein die Zeitauflösung ist (s = 0 ist einfaches MiniROCKET).6 Ein späteres Paper von Schlegel, Rachkovskij, Kleyko und weiteren Autoren gibt drei reellwertige Varianten der Positionskodierung; eine davon, Sinusoid, hat einen exakten Verschiebungsoperator.7 Die Ideen stammen von ihnen. Diese Serie reproduziert ihre Arbeit und zieht an Fäden, die sie offen gelassen haben. Vier Teile, negative Ergebnisse als negativ benannt:
- Reproducing HDC-MiniROCKET: eine Neuimplementierung im Clean-Room-Verfahren, auf allen 128 UCR-Datensätzen. Die veröffentlichten Genauigkeiten pro Datensatz reproduzieren sich exakt aus dem Code der Autoren, so wie er vor einem Bugfix von 2022 war. Die drei reellwertigen Kodierungen unterscheiden sich nicht signifikant. Der Verschiebungsoperator verschiebt Positionen; er sagt nicht den Vektor eines verschobenen Signals voraus.8
- Choosing the Time Scale: wie man
swählt, ohne in die Testdaten zu schauen. Ein Entwicklungslauf auf 20 Datensätzen mit drei Seeds, in meiner Kodierung und auch in Kodierung und Pipeline der Autoren: Keine Methode, die ich probiert habe, schlägt die automatische Wahl aus ihrem Folgepaper von 2025, und diese Wahl ist auch nicht signifikant besser, als die Zeitkodierung ganz wegzulassen. Mehr als die Hälfte des Orakel-Gewinns ist Auswahl auf dem Rauschen der Testdaten. Die 20 Datensätze neigen zur Zeitkodierung hin, das sind also Entwicklungsergebnisse, keine Schlüsse.9 - Streaming HDC-MiniROCKET: den Sequenzvektor mit dem Verschiebungsoperator in O(D) pro Sample aktuell halten. Er gleicht dem Batch-Vektor des Anfangsstücks, sobald der Rand nachgezogen ist, und bei Fenstern von 256 bis 4096 Samples ist ein Schritt zehn- bis hundertfach billiger als neu zu kodieren, wenn man bei jedem Sample vorhersagt. Negativ: Auf Anfangsstücken einer Reihe ist HDC nicht besser als einfache MiniROCKET-Merkmale, und ein Klassifikator, der auf ganzen Reihen trainiert ist, kann Anfangsstücke nicht lesen.10
- Finding the Shift: zwei Reihen ausrichten, indem man die Verschiebung zwischen ihren Vektoren durchfährt, die ganze Ähnlichkeitskurve in einer Transformation. Negativ: Eine eingepflanzte Kopie in einem Datenstrom findet es seltener als der schlichte MASS-Algorithmus, selbst mit viel mehr Speicher als der Rohdatenstrom, und mit nicht mehr Speicher als der Strom findet es sie in 10 % der Fälle gegen 93 % bei MASS. Das Finden von Reihen derselben Klasse kommt im Mittel nah an MASS heran, aber nicht auf jedem Datensatz.11
Code
Alle diese Repos sind öffentlich auf GitHub.
- vector-symbolic-clj: der Code hinter der Serie A Vector-Symbolic Clojure.
- vsa-binary-sparse-distributed-segments-clj: binäre dünn besetzte segmentierte Vektoren nach Laiho et al.,12 das SDM und kleine Beispiele für Programmieren in Überlagerung: What is the dollar in Mexico?, nichtdeterministische Automaten, Bäume, Analogien.
- hdc-anomaly-skab: Anomalieerkennung auf dem Sensor-Benchmark SKAB. F1 0,71, gegen 0,78 für die besten Methoden der Bestenliste, mit Training in einem Durchgang und einem Modell von 1,2 KB. Mein Schwellwert ist auf dem Test-Split eingestellt, während die Notebooks der Bestenliste ihren ohne die Test-Labels festlegen, also ist die 0,71 optimistisch.13
- clj-hdc-push: eine Clojure-Bibliothek zum Erkunden von HDC auf PyTorch: MAP, HRR, FHRR und Blockcodes, Resonatornetze. Gedacht als HDC-Schicht für genetisches Programmieren im Stil von Push.
- hdc-wolfram: die Anfänge eines HD/VSA-Frameworks für Wolfram, gesteuert aus Clojure über Wolframite, mit Notebooks.
- hyper-substrates: Visualisierung ensembleartiger neuronaler Netze (Blerps), auf dem Weg, ein biologisches Substrat mit HDC und assoziativem Speicher zusammenzubringen.
Geplant
- Zeitskala auf zurückgehaltenen Daten. Die Methoden aus dem Entwicklungslauf einfrieren, dann die 108 zurückgehaltenen UCR-Datensätze mit drei Seeds rechnen. Erst dann zählt irgendeine Aussage über
s. - Streaming auf einem echten Datenstrom. Daten menschlicher Aktivität statt synthetischer Ströme, und eine echte Strategie zur frühen Klassifikation, die aufhört, sobald sie sicher ist, mit ihrem Abwägen zwischen Frühzeitigkeit und Genauigkeit.
- Verschiebungsinvariante Ähnlichkeit. Das Maximum über alle Verschiebungen als Ähnlichkeit zwischen Reihen, für 1-Nächster-Nachbar-Klassifikation, gegen euklidischen Abstand und DTW.
- Bessere Lokalisierung. Den Ausläufer des Verschiebungsschätzers reparieren, der im Median stimmt und zu oft grob danebenliegt.
Offene Fragen
- Ist ein neuronales Ensemble ein Hypervektor, oder sieht es nur von Weitem so aus?
- Die Verschiebungssuche sagt: Die Vektoren tragen das Was gut und das Wo schlecht. Ist das eine Grenze der Dimension, oder eine glatter Signale, die ihre Energie auf wenige Frequenzen legen?
- Ist ein festes
s = 7wirklich so gut, oder spricht da die kleine Entwicklungsmenge? - Braucht frühe Klassifikation einen Klassifikator pro Länge des Anfangsstücks, oder gibt es eine Kodierung, in der ein Anfangsstück nur ein verrauschtes Ganzes ist?
- Wo hört Programmieren in Überlagerung auf, billiger zu sein als schlichtes Suchen?
- Was spielt im Gehirn die Rolle des Cleanup-Speichers?
Fußnoten:
Kanerva, "Hyperdimensional Computing: An Introduction to Computing in Distributed Representation with High-Dimensional Random Vectors", Cognitive Computation 1(2), 2009: Zwei zufällige 10.000-Bit-Vektoren unterscheiden sich in etwa 5.000 ± 50 Bits, "we run out of time before we run out of vectors"; eine Summe ähnelt den addierten Vektoren, ein Produkt ähnelt den multiplizierten Vektoren nicht. Den anderen Faktor zurückzubekommen ist exakt bei selbstinverser Bindung (XOR, bipolare Multiplikation) und näherungsweise bei HRR (Plate 1995), wo ein Cleanup-Speicher das Ergebnis auf den nächsten bekannten Vektor zieht. doi:10.1007/s12559-009-9009-8
Kanerva, "Computing with 10,000-bit words", Allerton 2014, diskutiert, wie ein vektorsymbolisches Lisp gebaut werden könnte (doi); das Zitat "We could implement Lisp" oben in meinem Post zu dünn besetzten Vektoren stammt aus seinem Stanford-Seminar "Computing with High-Dimensional Vectors" (Video). Tomkins-Flanagan und Kelly haben eins gebaut (siehe unten).
Eilene Tomkins-Flanagan und Mary A. Kelly, "Hey Pentti, We Did It!: A Fully Vector-Symbolic Lisp", ein Abstract bei MathPsych/ICCM 2024, seit Oktober 2025 auf arXiv. Es baut die elementaren Funktionen von Lisp 1.5 aus holographischen reduzierten Repräsentationen (Plate 1995) und einem Cleanup-Speicher. D = 2048 ist der Standardwert in vector-symbolic-clj und lässt sich ändern. arXiv 2510.17889
Der Originalcode ist holis (eilene-ftf/holis, Commit db208d7), aus "Hey Pentti, We Did It!", und residuelisp (hanleyc01/residuelisp, Commit 09864c7), aus dem Nachfolger "Hey Pentti, We Did (More of) It!" (arXiv 2511.08767). Nicht jede Falle trifft auf ihren Code zu; die Seite sagt, welche.
Schlegel, Neubert, Protzel, "HDC-MiniROCKET: Explicit Time Encoding in Time Series Classification with Hyperdimensional Computing", IJCNN 2022; das Paper führt alle drei an der TU Chemnitz. Schlegels spätere Paper nennen weiter Chemnitz. Neubert leitet eine Gruppe an der Universität Koblenz. arXiv 2202.08055, Neubert, Koblenz
Dasselbe Paper, Abschnitte III und IV: Der Mittelungsschritt von MiniROCKET (PPV) ist eine Art Bündelung, die die globale Zeitinformation wegwirft. HDC-MiniROCKET bindet den 9.996-dimensionalen Merkmalsvektor jedes Zeitschritts an einen Zeitstempelvektor aus fraktionaler Bindung und summiert über die Zeit. Mit s = 0 sind alle Zeitstempel gleich, und es ist wieder MiniROCKET.
Schlegel, Rachkovskij, Kleyko, Loutfi, Streif, Osipov, "Real-Valued Hyperdimensional Sequence Representations with Hadamard Product Binding and Shift Equivariance", August 2026. Die drei Varianten sind eine Basisvariante über die inverse Fourier-Transformation, Sinusoid und Cosine-only; nur Sinusoid verschiebt eine kodierte Sequenz, ohne sie neu zu kodieren. arXiv 2608.28334
Details in Teil 1; die Quellen liegen in seinem Repo hdc-ts-core, docs/ERRATA.md E3 und E8, results/summary.json. Die Zahlen pro Datensatz sind die veröffentlichte Tabelle der Autoren: Alle 896 Zellen aus Datensatz und Skala stimmen überein. Tabelle II des Papers liegt nah daran, ist aber nicht gleich. "Nicht signifikant verschieden" ist ein Friedman/Nemenyi-Test mit dem besten s pro Datensatz.
Details in Teil 2; die Quellen liegen in seinem Repo hdc-ts-scale, docs/DESIGN.md §6, results/ucr_subset20_summary.json und results/ucr_subset20_p2code_summary.json. Mittlere Genauigkeit über 20 Datensätze und die Seeds 0 bis 2, zuerst in meiner Neuimplementierung (Kodierung A, die Ridge-Pipeline von 2022), dann mit der Kodierung der Autoren und der Pipeline von 2025: ohne Zeitkodierung 0,8730 / 0,8724, die automatische Wahl von 2025 0,8743 / 0,8727, alle Skalen aneinandergehängt 0,8817 / 0,8707, Orakel 0,8877 / 0,8848. Die Regel von 2025 ist die Leave-one-out-Wahl von Schlegel, Rachkovskij, Kleyko, Gayler, Protzel, Neubert, Data Mining and Knowledge Discovery 39(6), 2025 (doi). Die Rauschschätzung wählt s nach der Testgenauigkeit auf einem Seed und bewertet es auf einem anderen.
Details in Teil 3; die Quellen liegen in seinem Repo hdc-ts-streaming, docs/DESIGN.md und results/exp2_cost.json. Die Zeiten sind numpy auf einer geteilten Maschine und schwankten zwischen zwei Läufen um bis zu das 2,6-Fache, es zählt also nur ihre Größenordnung; bei kurzen Fenstern oder kleinem D kann ein Schritt langsamer sein als neu zu kodieren. Ein gleitendes Fenster gleicht nicht der Batch-Kodierung des Fensters, weil der Batch vor dem Fensteranfang Nullen sieht. Der nachgezogene Strom gleicht dem Batch-Vektor bis auf 6e-8. Pro Länge des Anfangsstücks neu trainiert, liegen HDC und einfaches MiniROCKET auf 20 UCR-Datensätzen innerhalb von etwa einem Punkt voneinander, ein Seed.
Details in Teil 4; die Quellen liegen in seinem Repo hdc-ts-shift-search, docs/DESIGN.md §5 und results/exp2_motif_location.json (6 UCR-Datensätze). Die geschlossene Form der Kurve ist die übliche FHRR-Ähnlichkeit; was der Teil beiträgt, ist, alle Verschiebungen auf einmal mit einer nicht-uniformen FFT zu berechnen und zu messen, wie gut das etwas findet. Die 10 % gegen 93 % sind die Konfigurationen bei Rauschen 0,3, die nicht mehr Zahlen speichern als der Rohdatenstrom. Auf dem Datensatz Trace bleibt das Finden derselben Klasse mehr als 10 Punkte hinter MASS.
Laiho, Poikonen, Kanerva, Lehtonen, "High-dimensional computing with sparse vectors", IEEE BioCAS 2015: segmentierte dünn besetzte binäre Vektoren mit einem aktiven Bit pro Segment. PDF
Bestenliste: waico/SKAB, Ausreißererkennung: Conv-AE und MSET F1 0,78, T²+Q 0,76, LSTM-AE 0,74. Die Referenz-Notebooks setzen ihren Schwellwert aus Trainingsresiduen mal einem festen Faktor oder als Konstante (MSET), z. B. ConvAE.ipynb. Im eigenen Nachlauf des Repos erreicht Conv-AE ebenfalls 0,71, und das HDC-Modell trainiert in einem Durchgang (163 ms) auf 1,2 KB binarisiert.
Generiert von Claude im Auftrag von Benjamin Schwerdtner.