Auf dem Weg zu relationalem hyperdimensionalem Rechnen

Mein core.logic-Fork, Teil 6 von 9. Übersicht · ← Einordnung: die Literatur und Parität mit miniKanren · Sets →

Das ist eine Design-Skizze, keine Implementierung.

Die Datenstrukturen, die dieser Fork relational macht, sind Maps, Sequenzen und Sets. Genau diese Strukturen kann hyperdimensionales Rechnen (HDC, auch Vector Symbolic Architectures) kodieren:

Struktur Logik-Term in diesem Fork Hypervektor-Kodierung
Set (lset #{a b} | r) Bundle: a + b + c
Map / Record (lmap {k v ...} | r) Bundle von Bindings: k1⊗v1 + k2⊗v2 + ...
Sequenz (lvec [f ...] | m | [b ...]) Bundle permutierter Elemente: ρ⁰(x0) + ρ¹(x1) + ..., oder verschachteltes Binding mit Positionsvektoren
offener Teil Rest-Variable ein unbekannter Summand: Rauschen, das man noch nicht identifiziert hat

get auf einem Record ist Unbinding plus Cleanup: k⊗(k1⊗v1 + k2⊗v2) ≈ v1 + noise, wenn k = k1 und das Binding selbstinvers ist, und eine Nächste-Nachbarn-Suche im Codebook liefert v1 zurück. Das ist schon ein Lookup, der in mehr als eine Richtung läuft: Man kann mit dem Wert unbinden und fragen, welcher Key ihn hält. Die Operationen von HDC sind von Natur aus relational. Was fehlt, ist ein Framework, das sie auch so behandelt.

Die Operationen als Relationen

Binding ist der saubere Fall. Mit selbstinversem Binding (elementweise Multiplikation bipolarer Vektoren in MAP, XOR in Binary Spatter Codes) bestimmt c = a ⊗ b jedes der drei aus den anderen beiden, und zwar exakt. Also ist (bindo a b c) eine Relation in jedem Modus mit zwei bekannten Argumenten, so wie pluso in CLP(FD). Mit einem oder keinem bekannten wartet sie. In HRR (zirkuläre Faltung) ist die Inverse nur approximativ, und die Relation damit auch.

Permutation ist eine Bijektion, also ist (permo x n y) in allen Modi exakt, wenn n bekannt ist. Ist n unbekannt, zählt sie auf oder wartet.

Bundling ist der interessante Fall. s = a + b + c bestimmt seine Summanden nicht. Rückwärts ausgeführt fragt (bundleo xs s): "Welche Elemente stecken in dieser Superposition?" Das ist eine Suche. Die Antworten sind nach Ähnlichkeit geordnete Kandidaten, keine feste Menge.

Cleanup, (cleanupo codebook noisy x), setzt einen verrauschten Vektor in Relation zu den Codebook-Einträgen, denen er nahe ist. Sie zählt diese nach Ähnlichkeit geordnet auf.

Faktorisierung, s = a ⊗ b ⊗ c mit allen drei unbekannt, aber jeweils aus einem Codebook, ist das, was Resonator-Netzwerke lösen (Frady, Kent, Olshausen und Sommer, 2020). In Logik-Begriffen ist ein Resonator-Netzwerk ein Constraint-Solver für eine Konjunktion von bindo- und cleanupo-Goals: Es iteriert seine Schätzungen, bis sie sich einpendeln, was sie innerhalb seiner Kapazität meistens tun. Das legt nahe, es so einzubinden, wie CLP(FD) in core.logic eingebunden ist: als Constraint-Domäne mit eigenem Propagator.

Zwei Designs

A. Hypervektoren als Constraint-Domäne. Logikvariablen laufen über Hypervektoren, so wie FD-Variablen über ganze Zahlen laufen. bindo, permo und bundleo sind Constraints. Exakte Operationen propagieren, sobald genug bekannt ist. Approximative (Bundling rückwärts, Cleanup, Faktorisierung) verzweigen über geordnete Kandidaten oder lassen ein Resonator-Netzwerk als Solver der Domäne laufen.

B. Hypervektoren als Orakel für symbolische Suche. Die symbolischen Terme bleiben die Wahrheit: Maps, Vektoren, exakte Unifikation. Jeder Term hat zusätzlich eine Kodierung, (encodeo term hv), und die Suche nutzt Ähnlichkeit, um ihre Zweige zu ordnen: geto mit unbekanntem Key probiert Keys in der Reihenfolge, wie gut sie gegen einen Hypervektor, den man in der Hand hat, unbinden. Antworten werden weiterhin symbolisch geprüft, sie sind also nie falsch, nur früher oder später gefunden. Das ist derselbe Zug wie bei Neural-Guided miniKanren, mit HDC als Führung.

B ist der sicherere erste Schritt. Es hält die Regel dieses Forks, dass Antworten nie stillschweigend falsch sind, weil HDC nur die Reihenfolge bestimmt. A ändert die Semantik: Gleichheit wird zu Ähnlichkeit über einer Schwelle, und die ist nicht transitiv. Aus a ≈ b und b ≈ c folgt nicht a ≈ c, also kann sie nicht die Äquivalenz sein, die eine Substitution braucht. A braucht einen eigenen Begriff von Antwort, etwa Antworten, die ungefähr wahr sind, mit einer Konfidenz dazu.

Wo die offenen Maps hineinpassen

Eine offene Map (lmap {:a 1} | r) und ein Record-Hypervektor mit unbekanntem Rest haben dieselbe Form: bekannte Bindings plus ein Summand, den man noch nicht identifiziert hat. In HDC zeigt sich der Rest als Rauschen, wenn man einen bekannten Key unbindet. Der Lacks-Constraint ("r hat kein :a") wird zu "r mit :a unbinden ergibt nichts, das einem Codebook-Eintrag nahe ist": eine probabilistische Abwesenheit.

Der Preis ist die Kapazität. Ein Bundle aus n Elementen in D Dimensionen liefert Elemente nur zuverlässig zurück, solange n klein gegenüber D ist. "Der Rest enthält irgendetwas" ist also nicht gratis, so wie es eine ungebundene Variable ist.

Suche, die weiß, wie nah sie dran ist

Die verschränkte Suche von miniKanren ist fair, aber blind: Sie nimmt Zweige der Reihe nach. HDC gibt jedem Zweig eine Bewertung. Ein relationales HDC-Framework würde Antwort-Streams nach Bewertung geordnet wollen, Best-First statt Breadth-First, mit der Vollständigkeit von miniKanren als Rückfallebene: Schlecht bewertete Zweige werden zurückgestellt, nie verworfen.

Offene Fragen

  • Welche Familie? MAP oder BSC, mit exaktem selbstinversem Binding, machen bindo exakt. HRR und FHRR liefern kontinuierliche Ähnlichkeit; die Inverse von HRR ist approximativ, die von FHRR (die komplexe Konjugation) exakt, aber dessen Binding ist nicht selbstinvers.
  • Codebooks als Relationen. Ein Codebook ist eine Faktentabelle: eine pldb-Relation von Symbolen zu Hypervektoren. Geseedet, damit Wiederholungen reproduzierbar sind.
  • Lernen. Die Frage, welches Codebook diese Kodierungen passend macht, ist relationales Lernen, rückwärts ausgeführt. Gehört das dazu, oder setzt das Framework feste Codebooks voraus?
  • Exakte vs. approximative Antworten. Design B hält Antworten exakt. Design A braucht abgestufte Antworten. Passen beide in einen run?
  • Wer ordnet die Suche? Design B kann Zweige innerhalb eines Goals ordnen, zum Beispiel indem es die Alternativen eines conde nach Bewertung sortiert. Eine globale Best-First-Suche über alle offenen Zweige braucht den Suchbaum als Daten. In core.logic besteht der Stream aus Closures, die eine Führung von außen nicht inspizieren kann, und Neural-Guided miniKanren stieß auf dieselbe Einschränkung.
  • Wo Resonator-Netzwerke sitzen. Als Constraint-Domäne in core.logic, als eigener Stream oder als externer Solver hinter einem einzigen Goal?

Literatur

  • T. A. Plate, Holographic Reduced Representations, CSLI Publications, 2003.
  • P. Kanerva, "Hyperdimensional Computing: An Introduction to Computing in Distributed Representation with High-Dimensional Random Vectors", Cognitive Computation 1, 2009.
  • R. W. Gayler, "Vector Symbolic Architectures answer Jackendoff's challenges for cognitive neuroscience", ICCS/ASCS Joint International Conference on Cognitive Science, 2003.
  • E. P. Frady, S. J. Kent, B. A. Olshausen, F. T. Sommer, "Resonator Networks, 1: An Efficient Solution for Factoring High-Dimensional, Distributed Representations of Data Structures", Neural Computation 32(12), 2020.
  • D. Kleyko, D. A. Rachkovskij, E. Osipov, A. Rahimi, "A Survey on Hyperdimensional Computing aka Vector Symbolic Architectures", ACM Computing Surveys, 2022/2023 (zwei Teile).

Generiert von Claude im Auftrag von Benjamin Schwerdtner.

Datum: 2026-10-28 Wed 00:00

Email: Benjamin.Schwerdtner@gmail.com

About
Contact