- Um die Grenze zu überwinden, dass LLMs zwar Probleme auf dem Niveau der Mathematik-Olympiade lösen, aber selbst einfache Addition oder Sudoku ohne externe Tools nicht zuverlässig ausführen können, wird ein Ansatz vorgestellt, bei dem ein echter Computer im Inneren des Transformers aufgebaut wird
- Beliebiger C-Code wird in Tokens umgewandelt, und das Modell erzeugt selbst direkt Ausführungsspuren über Millionen von Schritten; auf der CPU ist Streaming mit mehr als 30.000 Tokens pro Sekunde möglich
- Die Kerntechnik besteht darin, die Dimension der Attention-Heads auf 2D zu beschränken und sie in eine geometrische Suche auf Basis der konvexen Hülle (convex hull) umzuwandeln, wodurch lineare Zeitscans durch logarithmische Zeit ersetzt werden
- Durch die Implementierung eines WebAssembly-Interpreters in den Transformer-Gewichten wird Programmausführung transparent innerhalb der Decoding-Schleife des Modells möglich, ohne Aufrufe externer Tools
- Perspektivisch wird die Möglichkeit aufgezeigt, Programme direkt in Gewichte zu kompilieren und gelernte Repräsentationen sowie kompilierte Algorithmen in einer einzigen Rechenbasis zu integrieren
Die Rechengrenzen von LLMs
- Modernste LLMs können Aufgaben auf Goldmedaillen-Niveau der Internationalen Mathematik-Olympiade lösen oder sich an ungelösten Problemen aus Mathematik und Wissenschaft versuchen, scheitern aber bei reinen Rechenaufgaben weiterhin
- Schon bei einfacher Addition treten Fehler auf, und bei Benchmarks wie Sudoku-Bench ist die Erfolgsquote ohne externe Hilfe sehr niedrig
- Derzeit gibt es zwei Workarounds, um diese Lücke zu überbrücken
- Tool use: Das Modell schreibt Code, ein externer Interpreter führt ihn aus und liefert das Ergebnis zurück
- Agent-Orchestrierung: Eine externe Schleife speichert Zwischenzustände, zerlegt Aufgaben und ruft das Modell wiederholt auf
- Diese Ansätze sind nützlich, machen aber die grundlegende Grenze deutlich, dass die eigentliche Rechenfähigkeit außerhalb des Modells liegt
- Das ist vergleichbar damit, dass Menschen Flugzeuge gebaut haben, ohne deshalb selbst fliegen zu können
- Ein Modell kann über Berechnung nachdenken oder Tools koordinieren, aber wenn es nicht selbst ausführen kann, ist es kein echter Computer
Wie der Transformer zum Computer gemacht wurde
- Die theoretische Universalität der Transformer-Architektur, also ihre Fähigkeit, eine Turing-Maschine zu simulieren, wurde in mehreren Arbeiten gezeigt, doch theoretische Ausdrucksstärke garantiert keine praktische Ausführungseffizienz
- Statt eines rein theoretischen Rechenmodells wird ein moderner RAM-Computer innerhalb des Transformers implementiert, wobei jede Instruktion auf höchstens 5 Tokens abgebildet wird
- Das tiefere Problem liegt jedoch im Decoding-Prozess selbst
- Standardmäßiges autoregressives Decoding interagiert in jedem Schritt mit der ständig wachsenden gesamten Historie
- KV-Caching vermeidet zwar die Neuberechnung früherer Key/Value-Paare, doch die Attention-Kosten wachsen weiterhin proportional zur Cache-Größe
- Um diese Grenze zu überwinden, wird die Dimension der Attention-Heads auf 2D beschränkt und ein effizienter Decoding-Pfad für ausführungsartige Traces eingeführt
- Wichtige Such- und Update-Operationen lassen sich in logarithmischer Zeit bezüglich der Sequenzlänge ausführen
- Dadurch wird die Ausführung von Programmen mit Millionen von Schritten im Inneren des Transformers möglich
Was Rechnen bedeutet — Tool use vs. Ausführung im Modell
- Beim bisherigen Tool-use-Ansatz gibt das Modell Code wie
python -c "print(3+5)" aus → ein externer Interpreter führt ihn aus → das Ergebnis wird in den Token-Stream eingespeist
- In diesem System wird ein WebAssembly-Interpreter in die Transformer-Gewichte implementiert
- WebAssembly ist ein Low-Level-Befehlssatz für schnelle und deterministische Ausführung sowie ein universelles Kompilierungsziel für C/C++
- Für die Berechnung von 3 + 5 gibt das Modell wasm-Instruktionen (
i32.const, i32.add) aus und wechselt dann in einen schnellen Decoding-Modus, um die schrittweise Ausführungsspur direkt zu erzeugen
- Der zentrale Unterschied
- Tool use ist opak: Das Modell gibt die Kontrolle ab und erhält eine Blackbox-Antwort zurück
- Ausführung im Modell ist transparent: Alle Zwischenschritte erscheinen im Trace, und das Modell verlässt seine eigene Decoding-Schleife nicht
Sudoku-Demo — ein Stresstest für exakte Langzeitberechnung
- Gelernte neuronale Ansätze zeigen bei leichtem Sudoku gute Leistung, scheitern aber bei schwierigen Problemen vollständig
- Häufig wird erklärt, autoregressive Modelle seien grundsätzlich ungeeignet für Constraint-Satisfaction-Probleme, doch dieses System ist vollständig autoregressiv und erreicht dennoch 100 % Genauigkeit
- Der eigentliche Flaschenhals ist nicht das autoregressive Paradigma selbst, sondern dass schwierige Sudokus sehr lange Ausführungsspuren erfordern und Standard-Attention die Erzeugung langer Kontexte unpraktisch macht
- Ein vollständig kompilierter Sudoku-Solver wird innerhalb des Transformers ausgeführt; statt gelernter Heuristiken wird ein echter Algorithmus Schritt für Schritt ausgeführt
- Arto Inkalas „schwerstes Sudoku der Welt“ wird in weniger als 3 Minuten korrekt gelöst
- Ist der kompilierte Solver korrekt, dann ist auch die Ausführung im Transformer korrekt — das liefert eine allgemeine Garantie
Wie die Berechnung codiert wird — ein nur anhängbarer Trace
- Ein autoregressiver Transformer wird mit einer Maschine verglichen, die in ihrer eigenen Historie lebt
- Ein traditioneller Computer aktualisiert editierbaren Speicher, doch ein solches Konzept gibt es im Transformer nicht
- Stattdessen gibt es einen festen Prompt (Eingabe/Programm) und einen ständig wachsenden Trace (generierte Tokens)
- Die Analogie eines Notizbuchs, in das nur angehängt werden kann
- Die ersten Zeilen sind die Eingabe (Prompt), jede weitere Zeile protokolliert den nächsten Rechenschritt
- Frühere Zeilen können nicht verändert werden, und in jedem Schritt können nur wenige frühere Positionen referenziert werden
- Viele Algorithmen lassen sich als „nur anhängbarer Trace, der in jedem Schritt auf eine feste kleine Anzahl früherer Positionen verweist“ darstellen
- Die vom Modell erzeugten Tokens repräsentieren in diesem System den sich entwickelnden Zustand der virtuellen Maschine, etwa Instruction Pointer, Speicher-/Stack-Operationen, Arithmetik, Kontrollfluss und Ausgabe
- Attention-Heads arbeiten wie ein gemeinsam genutztes eindimensionales Array und stellen ein Write-then-read-Primitive bereit, bei dem jedes Token an einen Index schreibt und von anderen Indizes liest
- Attention kann auch kumulative Summen (cumulative sums) berechnen, sodass Instruction Pointer, Stack-Tiefe und Ähnliches als kumulative Summen von Delta-Inkrementen verfolgt werden können
Der entscheidende Durchbruch: exponentiell schnellere Attention
- Echte Computer aktualisieren pro Instruktion einen kleinen Zustand mit nahezu konstantem Aufwand, während Standard-Transformer im t-ten Decoding-Schritt mit einem Präfix der Länge t interagieren, wodurch die Gesamtkosten quadratisch wachsen
- Mit HullKVCache wird diese quadratische Explosion gelöst
- In realen Benchmarks erreicht HullKVCache 31.037 Tokens pro Sekunde (6.747 Zeilen/Sekunde), Standard-KVCache dagegen 272 Tokens pro Sekunde (59 Zeilen/Sekunde) — ein Unterschied um etwa den Faktor 114
- Statt Θ(t) Zeit pro Schritt wird die Attention-Suche in O(log t) ausgeführt
-
Der schnelle Pfad für 2D-Attention
- Es geht nicht darum, Transformer allgemein zu beschleunigen oder eine neue Architektur einzuführen, sondern um eine handhabbare Parametrisierung in Vanilla-Transformern mit auf 2D beschränkten Heads
- Mit
d_model = 36 und n_heads = 18 ergibt sich pro Head genau zweidimensional, bei 7 Layern, Standard-nn.MultiheadAttention und einem Gated-Feedforward-Netzwerk
- Das Ganze ist in reinem Vanilla-PyTorch aufgebaut, ohne benutzerdefinierte Attention-Kernel oder Sparse Masks
- Zahl der Layer, Heads und Embedding-Größe können beliebig größer gewählt werden, daher muss das Gesamtmodell nicht klein sein
- Mehr Heads werden mit
n_heads = d_model / 2 verwendet
-
Die geometrische Sicht auf 2D-Attention
- Der Attention-Mechanismus: Frühere Tokens liefern 2D-Key-Vektoren kⱼ und Werte vⱼ, der aktuelle Schritt bildet eine Query q und gibt den Wert des Keys mit maximalem Skalarprodukt zurück (Hardmax-Attention)
- Das ist exakt identisch mit der klassischen „Supporting-Point-Query“ aus der algorithmischen Geometrie: Für eine Richtung q wird der Punkt auf der konvexen Hülle gesucht, der in diese Richtung am weitesten reicht
- Indem beim Generieren der Tokens gleichzeitig eine Datenstruktur für die konvexe Hülle gepflegt wird, ist Suche in logarithmischer Zeit über alle bisherigen Punkte möglich
- Für Speicher-/Stack-Operationen muss der „zuletzt an Index i gespeicherte Wert“ abgefragt werden; genau deshalb werden 2D-Keys benötigt
- Speichert man Index j als 2D-Key kⱼ = (2j, -j²) und fragt mit Richtung q = (i, 1) ab, wirkt der quadratische Term -j² als Strafe, sodass nur exakte Treffer gewinnen
- 2D-Attention reicht für Turing-Vollständigkeit aus, und wie in diesem Blog gezeigt wird, kann damit ein kompletter RAM-Computer dargestellt werden
Ausblick
-
Reichhaltigere Attention-Mechanismen
- Die aktuelle Implementierung nutzt Hardmax-Attention, doch das ist keine grundlegende Einschränkung
- Eine Approximation über k-sparse Softmax-Attention ist möglich: Die besten k Keys werden aus verschachtelten konvexen Hüllen abgerufen und Softmax nur über diese berechnet, mit Kosten von O(k + log n)
- Der geometrische schnelle Pfad ist nicht nur auf Ausführungsstrukturen beschränkt, sondern kann prinzipiell die Decoding-Zeit jedes Transformers mit 2D-Heads beschleunigen
- Auch eine natürliche Erweiterung auf 3D-Heads über 3D-konvexe Hüllen ist möglich, wenngleich die Effizienz in höheren Dimensionen stark abnimmt
-
Große Modelle mit 2D-Heads trainieren
- Die 2D-Head-Parametrisierung ist nicht von Natur aus klein — mit mehr Heads und Layern lässt sich eine Gesamtparameterzahl ähnlich wie bei Standard-Transformern beibehalten
- Mehrere Einsatzmodi sind denkbar
- Ein dedizierter schneller Pfad in Kombination mit einem langsameren, allgemeineren Modell
- Eine Hybridarchitektur aus schnellem und langsamem Pfad innerhalb eines einzelnen Systems
- Speculative Decoding, bei dem ein 2D-Modell Tokens schnell vorschlägt und ein Modell mit normaler Attention sie verifiziert
- Da der Ausführungstrace Teil des Forward-Passes ist, bleibt der gesamte Prozess differenzierbar (differentiable) — grundlegend anders als bei externen Tools und eine lernbare Rechenbasis, die sich direkt in größere Modelle integrieren lässt
-
Programme in Gewichte kompilieren
- Derzeit lernt das Modell einen in die Gewichte codierten Interpreter, doch eine Erweiterung zu einer gewichteerzeugenden Kompilierungsmaschine würde es ermöglichen, beliebige Programme direkt in Gewichte zu kompilieren, ohne Tokensequenzen
- Die Gewichte selbst würden damit zum Deployment-Ziel von Software: Das Modell lernt nicht nur softwareähnliches Verhalten, sondern enthält kompilierte Programmlogik als Teil seiner inneren Schaltkreise
- Wenn sich Logik in Gewichte kompilieren lässt, ist Gradientenabstieg nicht mehr der einzige Weg, ein Modell zu verändern — Struktur, Algorithmen und Garantien könnten direkt in das Netzwerk eingebracht werden
- Langfristig könnten daraus Systeme entstehen, die nicht nur aus Erfahrung lernen, sondern durch Modifikation oder Erweiterung ihrer Gewichte ihre innere Maschine selbst umschreiben
-
KI-Systeme wie Software wachsen lassen
- So wie moderne Software-Ökosysteme durch Module, Abstraktionen und wiederverwendbare Komponenten wachsen, könnte auch innerhalb von KI-Systemen ein ähnlicher Prozess möglich sein, bei dem nach und nach neue Rechenfähigkeiten hinzugefügt werden
- Neue Funktionen würden an bestehende Schaltkreise angeschlossen, ohne das Gesamtsystem neu trainieren zu müssen
- Zukünftige KI-Systeme würden Software nicht nur verwenden, sondern Software in sich selbst enthalten und gelernte Repräsentationen mit kompilierten Algorithmen in einer einzigen Rechenbasis integrieren
1 Kommentare
Hacker-News-Kommentare
Das ist ein deutlich interessanterer Ansatz als bloß Berechnungen auszuführen
Das Modell kann dynamische Attention-Umschaltungen durchführen, die proportional zum Logarithmus der Token-Anzahl sind
Dadurch kann es Programmabläufe nachahmen, indem es als Text dargestellte Register und Stacks verfolgt
Wenn ein LLM in einen „Fokusmodus“ wechseln und sehr schnell Tokens erzeugen könnte, ließe sich die Reasoning-Phase beschleunigen, in der zahlreiche Hypothesen erkundet und sortiert werden
Im Paper wird vorgeschlagen, dass sich das für Hybridstrukturen mit schnellem und langsamem Pfad oder als Modell für speculative execution nutzen ließe
Zuerst dachte ich: „Warum sollte man so etwas tun?“, aber inzwischen sehe ich es aus der Perspektive des Training-Bootstrapping
Man könnte zum Beispiel ein Expertensystem mit 80 % Genauigkeit in das Modell einbauen und dessen Ergebnisse als Trainingsdaten verwenden, um die Genauigkeit zu steigern
Je stärker die Trainingskosten für unterschiedliche Aufgaben sinken, desto niedriger wird die Eintrittsbarriere im AI-Wettbewerb
Anders als Softmax-Attention ist Average-Hard-Attention bezüglich Keys und Queries nicht differenzierbar
Selbst mit Straight-Through-Schätzung wird Backpropagation dadurch nicht schneller
Das menschliche Gehirn ist nicht besonders stark in Berechnungen
Selbst die Multiplikation zweier 10-stelliger Zahlen dauert lange. Solche Rechnungen werden von Logikgattern viel effizienter verarbeitet
Deshalb frage ich mich, ob es nicht besser wäre, wenn ein LLM statt selbst zu rechnen eher externe Module wie eine ALU aufruft
Der Stil wirkt, als wäre er von AI geschrieben, aber die Kernaussage ist unklar
Warum es gut sein soll, dass das Modell Programme intern statt über externe Systeme ausführt, ist nicht eindeutig — ob der Vorteil bei Geschwindigkeit, Backpropagation oder Benchmarks liegt
Manche glauben, symbolische Logik sei unverzichtbar, aber man kann solche Versuche auch einfach als interessantes Experiment sehen
Das unterscheidet sich grundlegend von externen Tool-Calls
Außerdem liegen die Decoding-Kosten bei O(k + log n), und wenn Probleme wie Sudoku damit mit 100 % Genauigkeit gelöst werden, ist das durchaus bedeutsam
Man könnte solche Verfahren auch im MoE-Stil kombinieren oder verschiedene Interpreter ausprobieren, etwa eine eingebettete WASM-basierte VM
Die Idee, Tools in den internen Berechnungspfad des Modells zu integrieren, ist im Hinblick auf Interpretierbarkeit äußerst spannend
Es ist überraschend, dass sich mit einem einfachen Transformer solche Effizienz erreichen lässt
Es gibt Potenzial, aber im jetzigen Zustand ist der praktische Nutzen gering
Gewichte oder „Compiler“-Tools wurden nicht veröffentlicht, daher sind Experimente schwierig
Trotzdem könnte die Idee nützlich bleiben, vordefinierte Berechnungsprimitiven in ein LLM einzubetten
Dieser Satz ist der Kernpunkt:
„Weil der Execution Trace Teil des Forward-Pass ist, können Gradienten durch die Berechnung selbst propagiert werden“
Anders gesagt: Im Unterschied zu externen Tool-Calls ist das eine trainierbare, berechnungsbasierte Grundlage
Zudem bleiben die Trainingsdaten und das Design der Loss-Funktion unklar
Da Tool-Calls jedoch die Batch-Effizienz zerstören, könnte ein interner Rechen-Subnetzpfad große Effizienzgewinne ermöglichen
Dieses Subnetz müsste allerdings nicht zwingend ein Transformer sein; vermutlich würde auch eine GPU-optimierte nicht lernende Schicht genügen
Das Paper versteckt den eigentlichen Kern
Wenn man die Dimension eines Attention-Heads auf 2 beschränkt, kann man Tokens mit logarithmischer Zeitkomplexität suchen und aktualisieren
Warum diese Strategie aber nur auf „Code-Tokens“ angewandt wird, ist unklar
Auch die Wahl von WASM als Ziel wirft Effizienzfragen auf
Zum Beispiel ist es ungenau, Self-Attention als „lookup table“ zu bezeichnen
Im Codebeispiel wird mit
d_model = 36, n_heads = 18eine 2D-Struktur pro Head aufgebaut, aber trotzdem bleibt vieles unklarEs gibt keine konkrete Erklärung, wie der Sudoku-Solver in Transformer-Gewichte kompiliert wurde
Es ist unklar, ob wirklich direkt von Code zu Gewichten kompiliert wurde oder ob das Verhalten angelernt wurde
Interessant ist es, aber die Frage bleibt: „Warum sollte man das überhaupt so machen?“
Auch das menschliche Gehirn kann eine Turing-Maschine simulieren, aber langsam. Deshalb verwenden wir externe Werkzeuge
Für Modelle könnte es ebenso effizienter sein, externe Tools zu nutzen
Man könnte ebenso eine Sprache wie Elixir einbetten und kürzeren Code ausführen
Gemeint ist die Vorstellung, dass das Modell während der Ausführung Code verändern oder Debugging-Fähigkeiten besitzen könnte