*Die Geschichte einer Forschung: von der Geometrie der Embeddings — über Googles TurboQuant — zur Asymmetrie zwischen Gewichten und Aktivierungen und zu einem unerwarteten Verständnis des Modells als dynamischem System.

  • 3 Modelle — SmolLM-135M · Qwen2.5-0.5B · TinyLlama-1.1B — drei Architekturen, ein Muster
  • 124 Experimente — mit Technik-Flags; Korrelationsanalyse „was wirklich funktionierte“
  • 4.2875 bit/weight — gleiches Bit-Budget für CHMC und GPTQ — fairer Vergleich, ohne versteckte Boni
  • v1 → v6: 4894× → ~1.18× — Evolution des PPL-Ratios auf SmolLM; der Wendepunkt war die Methodologie, nicht die Geometrie

Prolog. Die Frage, die keine Ruhe gab

Vor einiger Zeit schrieb ich einen Artikel über die Geometrie der Embedding-Räume. Das Hauptergebnis war einfach und, wie mir schien, wichtig:

Die Repräsentationen von Sprachmodellen sind nicht gleichmäßig über den Raum verteilt, sondern in einem schmalen Kegel gesammelt.

Sie sind anisotrop, niedrigdimensional; ihre innere Dimension ist deutlich kleiner als die formale.

Das war keine bloße theoretische Konstruktion — Messungen auf mehreren Modellen zeigten,

dass 90% der Aktivierungsenergie in einem winzigen Anteil der Dimensionen konzentriert sind und der mittlere Kosinus zwischen Vektoren etwa 0,75 beträgt statt des für einen isotropen Raum erwarteten Nullwerts.

Ein Monat nach der Veröffentlichung brachte Google TurboQuant heraus (ICLR 2026).

Die Methode nimmt genau diese Ideen — Kegelformgeometrie, Anisotropie, niedrige innere Dimension — und wendet sie auf den KV-Cache und die Embeddings an.

Ergebnis: 6–8-fache Kompression ohne Qualitätsverlust. Meine Theorie erhielt eine starke industrielle Bestätigung.

Aber es blieb eine Frage übrig, auf die TurboQuant keine Antwort gab: Was ist mit den Gewichten? Wenn Geometrie für Aktivierungen funktioniert, vielleicht auch für die Parameter des Modells selbst?

Und breiter: Kann geometrische Kompression nicht nur auf die Daten angewendet werden, die das Modell produziert (Aktivierungen, Embeddings, KV-Cache), sondern auch auf das Modell selbst, auf seine Gewichte?

So begann dieses Projekt. Vorab eine Klarstellung: Ich habe nicht versucht, GPTQ zu übertreffen.

Mein Ziel war es zu verstehen, wo die Grenze der Anwendbarkeit des geometrischen Ansatzes verläuft und warum er so glänzend für Aktivierungen funktioniert und sich, wie sich herausstellte, für Gewichte als völlig nutzlos erwies.

Die Antwort erwies sich als schöner als „noch eine Quantisierungsmethode“ — und genau darum geht es in diesem Artikel.


Methodik. Was ist CHMC

CHMC — Covariance/Hessian-Aware Manifold Compression. Die Idee in einem Satz: Jede Gewichtsmatrix wird in zwei Teile zerlegt — einen niedrigrangigen Teil,

der den „Kegel“ der Aktivierungen einfängt (die Richtungen, in denen die Daten tatsächlich leben), und einen Rest, der mit spaltweiser Fehlerkompensation nach GPTQ quantisiert wird; der Rang jeder Schicht wird so gewählt,

dass das Gesamt-Bit-Budget exakt dem Budget von GPTQ entspricht. Das ist nicht „noch ein weiterer Quantisierer“ — es ist eine geometrische Frontend-Schicht über den Optimizern von GPTQ.

Die Eingangsdaten sind dieselben wie bei GPTQ: eine Kalibrierungsstichprobe (2048 Token aus WikiText) und die Aktivierungen X jeder Schicht darauf.

Alles Weitere wird aus den Gewichten und diesen Aktivierungen in drei Schritten berechnet.### Schritt 1. Niedrigrangiger Teil entlang des Kegels

Wir berechnen gedämpfte Aktivierungsenergien entlang der Eingangsrichtungen und führen einen abgeschnittenen SVD in der gewichteten Norm durch — so, dass der Fehler genau dort klein ist, wo die Aktivierungen groß sind:

c_{j} = (1/n) · Σ_{t} x²_{t,j} + λ · mean(c), λ = 0.05min_{W_lr} ‖(W − W_lr) · diag(√c)‖²_{F} ⇒ W̃ = W · diag(√c), (U, S, Vᵀ) = svd_lowrank(W̃, q=r, niter=5), W_lr = (U·S)Vᵀ · diag(1/√c)

Schritt 1 aus dem Code (v6/chmc_v6.py + v5/stabilizers.py): c — gedämpfte diagonale Kovarianz der Aktivierungen; svd_lowrank — randomisierter SVD mit Power-Iterationen (niter=5). Genau hier tritt die Kegel-Hypothese in die Methode ein:

Richtungen mit hoher Aktivierungsenergie werden genauer approximiert.

Schritt 2. Rest — spaltweise Kompensation nach GPTQ

R = W − W_lr wird mit einem Algorithmus quantisiert, der mit GPTQ übereinstimmt: Hesse-Matrix aus den Kalibrierungsaktivierungen,

Invertierung über die Cholesky-Zerlegung, Spalten in absteigender Reihenfolge der Wichtigkeit (act-order); nachdem jede Spalte quantisiert wurde, wird ihr Fehler von den verbleibenden Spalten subtrahiert:

H = XᵀX / n + λ · mean(diag(H)) · I, H⁻¹ — über die Cholesky-Zerlegungfür Spalte j (in act-order): q_{j} = round(col_{j}/scale)_{g} · scale_{g}, err_{j} = (col_{j} − q_{j}) / H⁻¹[j,j], R[:, j+1:] ← R[:, j+1:] − err_{j} · H⁻¹[j, j+1:]

Schritt 2 aus dem Code (quantize_with_compensation_strict): group_size = 128 — eine gemeinsame Skala pro Gruppe von Ausgabekanälen; strict_sequential=true bedeutet „eine Spalte nach der anderen, vollständige Zeile von H⁻¹“

— das ist genau der echte Aktualisierungsschritt von GPTQ.

Schritt 3. Gleiches Bit-Budget

Jede Schicht speichert: den niedrigrangigen Teil (U, V in FP16), den INT4-Rest und die Gruppenskalen.

Die Bits pro Gewicht werden explizit gezählt, und der Rang r_layer wird so gewählt, dass das Gesamt-BPW 4,2875 nicht überschreitet — dem Niveau von GPTQ:

BPW_{CHMC} = [16·r·(o+i) + b·o·i + 16·⌈o/gs⌉·i] / (o·i) vs BPW_{GPTQ} = [b·o·i + 16·o·⌈i/gs⌉] / (o·i)r_{layer} = floor( (BPW_{tgt} · o·i − b·o·i − 16·⌈o/gs⌉·i) / (16·(o+i)) )

Schritt 3 aus dem Code (v6/bpw.py): o, i — Schichtgrößen; b = residual_bits = 4; gs = group_size = 128. Bei CHMC laufen die Skalen-Gruppen entlang der Ausgabekanäle (⌈o/gs⌉·i), bei GPTQ entlang der Eingangskanäle (o·⌈i/gs⌉).

Der einzige freie Parameter des Budgets ist der Rang r.

Ergebnis: W_comp = W_lr + R_q. Und der Hauptunterschied zu GPTQ:

GPTQ CHMC v6
Was gespeichert wird INT4-Indizes + Gruppenskalen Niedrigrangiger Teil (U, V in FP16) + INT4-Rest + Gruppenskalen
Fehlerminimierung Spaltweise Kompensation über die Hesse-Matrix der Aktivierungen Derselbe Algorithmus (strict_sequential=true — buchstäblich ein GPTQ-Schritt)
Rolle der Kalibrierungsdaten Nur die Hesse-Matrix H = XᵀX/n Hesse-Matrix + gewichteter SVD des niedrigrangigen Teils (Aktivierungsenergien c_j)
Niedrigrangiger Teil Nein Ja: SVD entlang des Kegels, Rang pro Schicht aus dem Bit-Budget
Bit-Budget 4.2875 BPW (GPTQModel, 4-bit / group-128) Exakt 4.2875 BPW — die Ränge werden auf dieses Zielniveau verteilt
Tabelle 1. CHMC v6 gegen GPTQ: Gemeinsames und Unterschiede. Die Reststufe von CHMC verwendet denselben Optimizer wie GPTQ; der Unterschied liegt im niedrigrangigen Frontend, das die Kegel-Hypothese kodiert.

Genau dieses Frontend haben wir auf Festigkeit geprüft.


Teil 1. Die Kegel-Hypothese bestätigt sich — dreifach

Bevor man versuchte, die Gewichte zu komprimieren, musste man sicherstellen, dass das ursprüngliche geometrische Bild korrekt ist.

Ich habe eine Reihe von Messungen an drei Modellen unterschiedlicher Größe durchgeführt: SmolLM-135M, Qwen2.5-0.5B und TinyLlama-1.1B. Das ist das Ergebnis.

Die Aktivierungen leben in einem schmalen Kegel.

Für jede Schicht schätzte ich die effektive Dimension der Aktivierungen — die Anzahl der Hauptkomponenten, die nötig sind, um 90% der Varianz zu erklären. Im Mittel über das Netzwerk liegt sie bei 9 von 576 Dimensionen† (1,56% des Raums).

Der mittlere Kosinus zwischen den Aktivierungen einer Schicht ≈ 0,75‡ — in einem isotropen Raum läge er nahe null. Das ist eine direkte Bestätigung: Die Repräsentationen füllen den Raum nicht aus, sondern sind in einem schmalen Kegel konzentriert.

Die Gewichte hingegen sind vollen Rangs.

Dieselbe Analyse für die Gewichtsmatrizen zeigte ein völlig anderes Bild: Der minimale effektive Rang der Gewichte betrug 29–30, der Median lag bei etwa 60§.

Für Matrizen der Größe, sagen wir, 576×576 bedeutet das, dass die Gewichte tatsächlich dicht sind, ohne ausgeprägte niedrigrangige Struktur.

Der Kegel also wird vom Modell selbst erzeugt.

Wenn die Aktivierungen schmal und die Gewichte dicht sind, dann ist die Abbildung „dichte Gewichte → spärliche Aktivierungen“ eine Eigenschaft des Trainings und nicht bloß ein Spiegel der Daten.

Das Modell projiziert selbst die dichte Information auf eine schmale Mannigfaltigkeit. Später, mit topologischer Analyse (persistente Homologie und 3D-Projektionen), fand ich dazu eine schöne Präzisierung: der Kegel ist eine Engstelle in der Mitte des Netzwerks. In den mittleren Blöcken liegt bis zu 98,9% der Varianz in drei Hauptkomponenten (bei SmolLM fällt der Peak auf die Mitte des Netzwerks; bei Qwen und TinyLlama wird er bereits ab den ersten Blöcken erreicht — Abbildung 2) — die Wolke ist buchstäblich zu einem Kegel gerollt, während an Eingang und Ausgang die Repräsentationen wieder verstreut sind (13–43% an den Rändern). Das Muster ist auf drei verschiedenen Architekturen identisch. Die Geometrie ist real, und sie wird vom Modell im Verarbeitungsprozess erzeugt.

SmolLM-135M (d = 576)

Qwen2.5-0.5B (d = 896)

TinyLlama-1.1B (d = 2048)

Abbildung 1.3D-Projektionen der Aktivierungen von vier repräsentativen Blöcken (erster, Viertel, Mitte, letzter) auf die drei Hauptkomponenten der zentrierten vereinigten Wolke [pre;post]: blaue Punkte — Originalmodell (pre), orange — nach CHMC-v6-Kompression (post); graue Linien verbinden denselben Token vor und nach. In den Panel-Titeln — der Anteil der Varianz, den diese drei Richtungen erklären („PCA-3D var“). In der Mitte des Netzwerks ist die Wolke zu einem Kegel gerollt, an den Rändern verstreut. Das Muster wiederholt sich auf allen drei Architekturen.

Vollständiges Profil über alle Blöcke. Abbildung 2 und Tabelle 2 geben ein ehrliches Bild über alle Blöcke: Wo genau die „Mitte“ liegt, hängt vom Modell ab,

aber das Muster selbst (schmaler Kegel nach den ersten 1–2 Blöcken, isotroper an den Rändern) hält überall.

Abbildung 2.Links — Energieanteil der drei Hauptkomponenten in der zentrierten Aktivierungswolke jedes Blocks [pre;post] (dieselbe Größe wie „PCA-3D var“ in Abbildung 1); rechts — mittlerer paarweiser Kosinus zwischen Tokens innerhalb eines Blocks (Anisotropie). Nach den ersten 1–2 Blöcken liegt fast das gesamte Netzwerk in einem niedrigdimensionalen Kegel: 80–99% der Energie in drei Hauptkomponenten; an beiden Rändern isotroper (13–43%). Die Peak-Position unterscheidet sich je nach Modell — bei SmolLM liegt sie in den mittleren Blöcken, bei Qwen und TinyLlama wird sie bereits ab den ersten erreicht. pre ≈ post ≈ vereinte Wolke: Konzentration ist eine Eigenschaft der Aktivierungen selbst.
Modell (Dimension d) Mittlerer paarweiser Kosinus der pre-Tokens, Bereich über die Blöcke Energieanteil top-3-HK: Ränder → Peak → Abfall cos(preᵢ, postᵢ) pro Token
SmolLM-135M (d = 576) 0.52 – 0.78 15–28% (blk 0–10) → 99.2% (blk 11) → 87% (blk 27); Ränder: 24.7 / 43.4% ≥ 0.98
Qwen2.5-0.5B (d = 896) 0.08 – 0.64 13–14% (blk 0–1) → 98.5% (blk 3, Plateau ~97% bis blk 13) → 82% (blk 20); letzte drei Blöcke: 17 / 18 / 26% ≥ 0.98
TinyLlama-1.1B (d = 2048) 0.13 – 0.38 13–14% (blk 0–1) → 98.6% (blk 2), monotoner Abfall auf ~19% (blk 20–21) ≥ 0.98
Tabelle 2. Messungen der Anisotropie und des „Engpasses“ (Projektdaten: Ausgänge der Decoder-Blöcke auf 2048 Tokens, Teilstichprobe von 512 Punkten pro Block; cos(preᵢ, postᵢ) — Kosinus desselben Tokens vor/nach CHMC-v6-Kompression).

† Die Schätzung „d90 ≈ 9 von 576“ stammt aus einer früheren Untersuchung auf der Ebene von Satz-Embeddings.

Für die pro-Token-Ausgänge der Decoder-Blöcke in den Daten dieses Projekts ist das Profil noch extremer: In den mittleren Blöcken erklärt bereits eine Hauptkomponente ≥90% der Energie (d90 = 1), und an den Rändern erreicht d90 ~235.

‡ „Mittlerer Kosinus ≈ 0,75“ — gemessen an SmolLM-135M (Bereich über die Blöcke 0.5–0.8).

Bei Qwen2.5-0.5B ist er niedriger (0.08–0.64), bei TinyLlama-1.1B noch niedriger (~0.13–0.38): Die Stärke der Anisotropie hängt vom Modell ab, aber das „Engpass“-Muster hält auf allen drei.

§ Effektiver Rang der Gewichte — v5-Konvention (exp-Entropie des normierten Spektrums).

Die oben zitierten Zahlen stammen aus einer früheren Untersuchung an einem anderen Schicht-Teilmenge; in der TDA-Analyse dieses Projekts beträgt der minimale effektive Rang über alle Gewichtsmatrizen 18.7–22.1, der Median liegt je nach Modell bei 274–930 (Anhang B).


Teil 2. Der Weg vom Kollaps zur Parität

Also, Aktivierungen sind konisch, Gewichte dicht. Gedanke Nr. 1: Wenn das Modell Daten in einen Kegel projiziert, dann kann man die Gewichte vielleicht komprimieren, indem man Informationen über diesen Kegel nutzt.

Zum Beispiel: Wenn die meisten Aktivierungen in einem niedrigdimensionalen Unterraum liegen, dann sollte der Quantisierungsfehler der Gewichte in Richtungen außerhalb dieses Unterraums weniger kritisch sein. Das war die grundlegende Intuition.

Danach — eine Reihe von Experimenten; jede Version der Methode fügte eine Idee hinzu. Hier ist eine kurze Chronologie:

Version Was hinzugefügt wurde SmolLM, ratio
v1 Plain SVD 4894× 💀
v2 Adaptiver Rang 2,35×
v3 Ehrliche Bit-Buchführung 1,84×
v4 Covariance + residual 1,49×
v5 7 Stabilisatoren ~1,29×
v6 Gleiches Bit-Budget + GPTQ-Optimierer ~1,18×
Tabelle 3. Evolution von CHMC auf SmolLM-135M: PPL-Ratio gegenüber GPTQ (Ratio = PPL_CHMC / PPL_GPTQ; 1,0 — Parität).
Abbildung 3.Fortschritt der Versionen v1→v6 (PPL-Ratio gegenüber GPTQ, SmolLM-135M) auf logarithmischer Skala. Der Wendepunkt waren nicht neue geometrische Ideen, sondern methodische Korrekturen: ehrliche Bit-Buchführung und Fehlerkompensation.

Die erste Version war eine Katastrophe: ein einfacher SVD ohne Berücksichtigung der Fehlerstruktur führte zu einer enormen Steigerung des Perplexity.

Schritt für Schritt, durch Hinzufügen adaptiver Rangauswahl, korrekter Erfassung der Bitkosten, Kovarianzkorrekturen und Stabilisatoren, brachte ich die Methode auf ein Niveau, das mit GPTQ vergleichbar ist.

Es gab zwei Wendepunkte auf diesem Weg, beide methodischer Natur.

Erstes: ehrliche Bit-Buchführung

In den frühen Stadien erklärte ich fröhlich „Wir zerlegen gleich alle“, und gab dabei 4,5 Bits pro Gewicht aus gegenüber 4,29 bei GPTQ — und verlor trotzdem in der Qualität.

Erst als ich den strengen Vergleich unter gleichem Bit-Budget (BPW) einführte, wurden alle früheren Schlussfolgerungen ungültig.

Es stellte sich heraus: Ohne ehrliche Erfassung des Budgets ist jede Ergebnistabelle eine Fiktion. Das ist vielleicht die wichtigste praktische Lektion des Projekts.

Zweites: Statistik

Als eine Konfiguration mit Dämpfung Λ=0,05 ein PPL von 1,1723 gegenüber 1,1761 bei GPTQ ergab, stand ich kurz davor, den Sieg zu erklären.

Aber drei zusätzliche Läufe zeigten: Mittelwert — 1,1793, das heißt im Durchschnitt verliere ich. Der „Sieg“ war der beste von vier Läufen.

Die Streuung von 0,007–0,009 ist real, und ein Vergleich anhand eines einzelnen Laufs ist Wahrsagen. Seitdem messe ich jede wichtige Konfiguration 3–4 Mal mit verschiedenen Seeds und vergleiche nach dem Mittelwert statt nach dem besten Lauf.

Das Ergebnis in Zahlen (gleiches Budget von 4,29 Bits/Gewicht):

Modell CHMC (Mittelwert) GPTQ Urteil
SmolLM-135M 1,179–1,186 1,176 Parität, innerhalb des Rauschens
Qwen2.5-0.5B 1,174* 1,141 Verlust
TinyLlama-1.1B 1,059 1,081 echter Sieg (mehr als 30σ)
Tabelle 4. Endgültiges PPL bei gleichem Bit-Budget von 4,2875 BPW. *Qwen — vorläufiger Einzel-Lauf, Wiederholungen stehen noch aus; andere Modelle — Mittelwert über 3–4 Seeds.
Abbildung 4.PPL des Originalmodells, CHMC v6 (Mittelwert über Seeds) und GPTQ bei gleichem Bit-Budget. SmolLM — Parität; Qwen — Verlust (Einzel-Lauf); TinyLlama — stabiler Sieg.

Die Methode ist wettbewerbsfähig: Auf einem Modell schlägt sie stabil den industriellen SOTA,

und auf kleinen Modellen übertrifft sie die naive skalare Quantisierung um das 6–11-Fache (bei SmolLM 16,48× für scalar_q4 gegenüber 1,42× bei meiner

Methode — bei einem vergleichbaren Budget von ~4,0–4,2 Bits/Gewicht). Aber es gibt kein „geometrisches Überlegen“. Warum?


Teil 3. Geometrische Apokalypse

Ich habe alle geometrischen Techniken ausprobiert, die die Literatur und meine Theorie vorschlugen: Hadamard-Rotation (aus QuIP#), Lloyd-Max-Quantisierer, konische Dekomposition, QJL-Korrektur (aus TurboQuant). Alles ist gescheitert:

Technik Erwartet Erhalten
Hadamard-Rotation −2–5% 2,23× (1,8× schlechter)
Lloyd-Max Optimum für Gauß 1,35× (schlechter als Baseline 1,21×)
Cone-Aware exakte Erhaltung des Kegels 2,15×
QJL 1-bit residual Einsparung von 3 Bits PPL 267 228 💀
Tabelle 5. Geometrische Techniken und ihre Ergebnisse auf SmolLM-135M (Ratio gegenüber GPTQ bei gleichem Bit-Budget; für QJL — absolutes PPL, Ratio ist sinnlos).

Die Mathematik der Misserfolge erwies sich als lehrreicher als die Misserfolge selbst.

QJL kann physikalisch keine Gewichte speichern

Seine Rekonstruktion signs @ Uᵀ hat einen Rang, der nicht höher ist als die Anzahl der Projektionen, das heißt, sie stellt nur niedrig-rangige Matrizen dar.

Der Rest nach einer low-rank-Näherung ist per Definition nicht niedrig-rangig — daher kann QJL ihn prinzipiell nicht kodieren.

Die theoretische Fehlergrenze — √(1−1/4) ≈ 87%. Dies ist ein Instrument zur Schätzung von Normen, kein Format zum Speichern von Gewichten.

Rotation ändert die Zielfunktion nicht, aber das Quantisierungs-Gitter

Ich habe bewiesen, dass der Loss invariant gegenüber orthogonaler Rotation der Gewichte ist (das ist einfach ein Basisswechsel).

Allerdings wird nach der Rotation die Verteilung der Gewichte gaußförmiger, und der INT4-Quantisierer, der auf anisotropen Daten hervorragend funktioniert, beginnt schlecht zu arbeiten. Wichtigste

Erkenntnis: Die datenadaptive Fehlerkompensation (die GPTQ durchführt) im ursprünglichen kegelartigen Raum schlägt jede verteilungsmäßige Optimalität im rotierten Raum.

Die Kegel-Hypothese gewinnt gegenüber der Rotation gerade deshalb, weil sie die Anisotropie nicht zerstört.

Der einzige Hebel, der funktionierte — war keine Geometrie

Es ist die Dämpfung (Λ=0,05), also die Regularisierung der Schätzung der Hessian-Matrix.

Bei kleiner Kalibrierung ist die Schätzung verrauscht, und die inverse Matrix verstärkt das Rauschen in niedrigenergetischen Richtungen.

Die Dämpfung brachte −4% — mehr als alle geometrischen Techniken zusammen (die lieferten null oder negativ).

Das war die erste Glocke: Was wirkt, ist nicht das Erfassen der Geometrie, sondern die Kontrolle des Rauschens.

Das bestätigen auch die Statistiken über alle 124 Experimente des Projekts.

Ich habe für jeden Lauf Flags gesammelt — welche Techniken aktiviert waren und ob der Lauf GPTQ schlug — und Korrelationen berechnet.

Ergebnis: Das einzige Flag, das positiv mit Erfolg korreliert, ist Dämpfung (+0,40); alle geometrischen Flags (Rotation, Kegel, Lloyd-Max, QJL) korrelieren negativ oder nahe null mit dem Erfolg.

Die Geometrie hat in keinem einzigen misslungenen Lauf geholfen — systematisch, über das gesamte Experiment-Ensemble hinweg.

Selbst das „Verbessern“ der grundlegenden Mathematik wirkte gegen mich.

Der gewichtete SVD gilt als randomisierter Algorithmus mit Power-Iterationen, und ich habe es geprüft: Mehr Iterationen — genauere Dekomposition — bessere Qualität?

Im Gegenteil: 5 Iterationen — Ratio 1,0586, 10 — 1,0610, 20 — 1,0662. Eine genaue Approximation überlernt die Kalibrierung; eine leicht „ungenauere“ generalisiert besser.

Ein weiterer Strich zum Thema „Rauschkontrolle ist wichtiger als Struktur-Erfassung“ — und ein weiteres Argument für ehrliche Statistik: Alle Vergleiche in diesem Artikel sind als Mittelwert über die Seeds angegeben.


Teil 4. Drift und die letzte Sackgasse

Es blieb eine schnöe Idee: Nach der Quantisierung driften die Punkt-Token. Der Drift d(x) = (W_comp − W)x ist ein lineares Feld.

Die Eingaben liegen im Kegel, also muss der Drift niedrigdimensional sein und mit einer billigen Low-Rank-Delta korrigierbar sein.

Ich habe sogar das Stoppkriterium im Voraus formuliert: Wenn die Dimension des Drifts 50 übersteigt — ist die Hypothese falsch, Richtung schließen.

d(x) = (W_comp − W) · x, D = [d(x₁); …; d(xₙ)] — Driftfeld auf den Kalibrierungs-TokenΔW_{ideal} = E · V_c·V_cᵀ (Rang ≤ 30, entlang der Kegelachsen), cap30 = ‖Dc · V_c[:, :30]‖² / ‖Dc‖²

Drift-Diagnostik (drift_diagnostics.py): D — Driftmatrix an den Ausgängen der Decoder-Bloöcke (dieselben 2048 Token, pre/post CHMC v6); V_c — Top-10 rechte Singulärvektoren der zentrierten Eingabe-Wolke;

cap30 — obere Grenze für den Anteil der Driftenergie, den eine Rang-30-Korrektur entlang der Kegelachsen einfangen könnte.

Das Ergebnis auf allen drei Modellen und allen Blöcken: Drift d90 = 227–792.

Die Streuungsenergie ist über hunderte Richtungen verstrichen. Eine idealisierte Rang-30-Korrektur hätte von ~3 bis ~39% der Driftenergie eingefangen (Tabelle 6).

Die Hypothese wurde nicht bestßtigt — sauber, nach vorab deklariertem Kriterium, ohne die Versuchung „nachjustieren und noch einmal versuchen“.

Abbildung 5.Drift-Spektren nach der Quantisierung: Zeilen — Modelle, Spalten — Blöcke; Hauptkomponenten-Energie des Drifts mit kumulativer Kurve und d90-Label. Die Energie ist über hunderte Richtungen verstrichen statt in den ersten Dutzenden konzentriert. Eine Low-Rank-Korrektur ist hier per Konstruktion machtlos.
Modell (d) Block Drift d90 Effektiver Drift-Rang Top-10 Overlap mit dem Kegel cap30, %
SmolLM-135M (576) 0 227 187 0.160 10.2
7 301 247 0.213 10.0
15 304 168 0.680 27.2
29 237 141 0.526 38.8
Qwen2.5-0.5B (896) 0 353 318 0.114 5.9
6 432 344 0.508 15.2
12 442 401 0.390 12.4
23 391 289 0.426 22.3
TinyLlama-1.1B (2048) 0 459 358 0.115 2.9
5 716 601 0.327 6.5
11 792 695 0.423 8.3
21 743 607 0.364 11.4
Tabelle 6. Drift-Diagnostik nach der CHMC v6 Quantisierung (dieselben 2048 Token, Decoder-Block-Ausünge).

d90 — Anzahl der Hauptkomponenten, die nötig sind, um 90% der Driftenergie zu erklären; top-10 overlap — Kosinus-Öbereinstimmung der führenden Drift-Richtungen mit den Kegelachsen (Top-10 rechte Singulärvektoren der zentrierten Eingaben);

cap30 — Anteil der Driftenergie, den eine idealisierte Rang-30-Korrektur entlang der Kegelachsen einfängt.

Alle Blöcke verletzten das Stoppkriterium d90 ≤ 50. In den mittleren Blöcken, wo der Kegel konzentriert ist (SmolLM blk 15, Qwen blk 6, TinyLlama blk 11), stimmt der Drift mit den Hauptachsen des Kegels überein (overlap ≈ 0.4–0.7),

aber ein Großteil seiner Energie liegt in anderen Richtungen — cap30 dort ≤ 27%.

Es blieb die letzte Chance: Der Gesamtdrift ist hochdimensional, aber der Beitrag jeder einzelnen Schicht — niedrigrangig.

Dann hätte man nur „sichere“ Schichten komprimieren und den Rest in FP16 halten können. Ich habe es auf allen 210 komprimierbaren Schichten von SmolLM geprüft: lokaler Schicht-Drift D_l = X·(W − W_comp)ᵀ

— der reine Beitrag einer Schicht bei reinem FP-Eingang, ohne zusätzliche Forward-Pässe. Das Kriterium wurde im Voraus deklariert: ≥50% der Schichten mit lokalem d90 ≤ 30 → weitermachen, sonst schließen.

Ergebnis: Median des lokalen d90 = 230 (Spanne 9–339), unterhalb der Schwelle — nur 1 von 210 Schichten (0,5%), die einzige, die durchkam — L0.o_proj (Rang 2, d90 = 9).

Die Magnitude des Per-Layer-Drifts ist klein (~2–10% der Schichtausgabe im Block 0), aber er ist bereits in jeder einzelnen Schicht hochdimensional: Das lokale d90 wächst nicht mit der Tiefe, sondern liegt flach bei ~220–247 über alle Blöcke.

Gleicher Mechanismus: GPTQ-Kompensation verteilt den Rundungsfehler über alle aktiven Eingabe-Richtungen — Per-Layer-Drift ist klein in der Norm, aber nahezu isotrop in jeder Schicht. Selektive Kompression nach Sicherheits-Dimension — geschlossen.

Und dann fügte sich das Puzzle zusammen. Es gibt ein strukturelles Argument: Meine Delta-Korrektur ΔW = E·V·Vᵀ ist strikt schwächer als das, was GPTQ bereits intern tut:

Seine Spaltenweise Kompensation minimiert den Fehler über alle Richtungen der Kalibrier-Eingaben, während die konische Korrektur nur eine Teilmenge abdeckt.

Nach GPTQ ist der Restfehler nahezu orthogonal zur Datenverteilung. Ihn auf den Kegel zu projizieren — es gibt nichts.

Separat lohnt sich die Klärung des Zusammenhangs mit dem „Analogiesatz“ in der Hoare-Logik (publizierte Arbeit, Nature Scientific Reports),

den wir als formales Gerüst für den Transfer von Quantisierungsgarantien diskutiert haben. Ihre Metrik lebt nicht im Gewichtsraum, sondern im Signalraum: das ist der

Per-Layer-Drift der Aktivierungen D_l = ‖post_l − pre_l‖ — wie stark sich das Signal beim Durchgang durch eine konkrete Schicht ändert; wenn D_l innerhalb sicherer Grenzen bleibt (≤ ε−γ),

bleibt die Qualität erhalten. Dabei treten die Gewichtsmatrizen W und der Quantisierungsfehler E_q = W − W_q darin nur als Objekte anderer, existierender Methoden (AWQ, GPTQ, LQER) auf,

die die Gewichte selbst reparieren oder komprimieren; der Satz schaut auf das Ergebnis — wie die Gewichtskompression die Signale im Modell beeinflusst hat — und trifft Entscheidungen genau im Signalraum.

Wir haben genau diese Größe pro Schicht gemessen — und dasselbe erhalten wie beim Gesamtdrift: kleine Magnitude, hohe Dimension (Median des lokalen d90 ≈ 230;

keine Schichten sicher im Sinne von „D_l ≤ ε−γ im Low-Rank-Sinn“).

Wäre der Drift niedrigdimensional gewesen, wäre D_l eine natürliche Genauigkeitsmetrik geworden — ein Tor für selektive Kompression: Schichten komprimieren,

wo D_l ≤ ε−γ, den Rest in FP16 halten. Stattdessen erwies sich dieser Weg als Sackgasse: Es gibt keine sicheren Schichten, und das stimmt mit allem anderen in diesem Teil überein.


Teil 5. Das einheitliche Bild: Gewichte — das Gesetz, Aktivierungen — die Trajektorie

Alle negativen Ergebnisse des Projekts wurden plützlich durch eine einzige Theorem-Beobachtung erklärt:

Der Kegel ist ein Signal, und er wird in einem Durchgang erschöpft (gewichteter SVD entlang des Kegels, erste Ordnung).

Der Rest nach datenadaptiver Quantisierung — ein strukturell unstrukturiertes hochdimensionales Feld.

Es gibt kein Rauschen zu nutzen — deshalb liefert jeder geometrische Zusatzbaustein (Rotation, Kegel, QJL, Delta-Korrektur) null oder negativ.

Aber das ist nur die Hälfte des Bildes. Die andere Hälfte ist ein Verständnis, das später in einem einzigen Gespräch kam.

Aktivierungen sind keine „Zwischen-Embeddings“. Dies ist der innere Zustand des Modells

Ein Transformer — ein diskretes dynamisches System:

h_{l+1} = F_l(h_l)

wobei $F_l$ durch die Gewichte der Schicht l gegeben ist. Dann rückt alles an seinen Platz:

  • Gewichte = Gesetz der Dynamik (das Programm, der „Hamiltonian“ des Systems). Dicht, vollrangig, vom Training gereinigt.
  • Innerer Zustand $h_l$= Trajektorie des Systems. Und die Trajektorie liegt auf einem niedrigdimensionalen Attraktor — das ist unser Kegel (d90=9, Anisotropie 0.75).

Das ist ein klassisches Bild aus der Theorie dynamischer Systeme: Die Bewegungsgleichungen können beliebig kompliziert sein, aber Trajektorien konvergieren zu einem niedrigdimensionalen Attraktor.

Das haben wir buchstäblich gemessen — und zwar zieht sich der Attraktor zur Mitte des Netzwerks zusammen (98.9% der Varianz in 3 Hauptkomponenten in den mittleren Blöcken gegenüber 13–43% an den Rändern):

Der tiefste Punkt der Verarbeitung — der am stärksten komprimierte Zustand.

Jetzt wird die Asymmetrie trivial:

  • Die Trajektorie ist redundant: Sie liegt auf dem Attraktor, außerhalb des Kegels ist einfach nichts da. Deshalb ist der Zustand komprimierbar — TurboQuant presst den KV-Cache (Speicher der Zustände) um 6–8× zusammen.
  • Das Gesetz ist dicht: Genau es hält die Trajektorie auf dem Attraktor. Redundanz gibt es darin nicht — das Training hat sie entfernt. Deshalb hilft Geometrie dort nicht, und GPTQ gewinnt.

Das Modell wurde trainiert, Redundanz in seinen Berechnungen zu erzeugen, aber nicht in seinen Parametern. Es ist ein Generator konischer Geometrie, aber selbst nicht geometrisch.

Ehrliche Einschränkung: Der Attraktor ist eine Interpretation, kein Theorem. Aber eine produktive Interpretation: Sie wurde nicht an die Antwort angepasst, sondern sagt drei unabhängige Beobachtungen vorher, die wir früher erhalten haben.

Unsere drei Ergebnisse im Licht des dynamischen Systems

  • Lineare Fehlerakkumulation (1.02 → 1.33 über Schichten). Gestörte Dynamik (komprimierte Gewichte) lenkt die Trajektorie ab, aber der Attraktor zieht sie zurück — die Divergenz ist linear, nicht exponentiell.

Das Modell ist robust gegenüber Quantisierung gerade wegen seiner konischen Struktur.

  • TDA „Makro-Homeomorphismus mit Mikro-Rauschen“: Die Kompression erhält die Makrostruktur des Attraktors (Kosinus pre/post ≥ 0.98, der effektive Rang der Gewichte verschiebt sich um ~1%), sättigt ihn aber mit feinem Rauschen — falsche Zyklen (b1-gain).
  • Hochdimensionale Drift: Die Störung der Trajektorie ist keine Verschiebung entlang des Kegels,

sondern eine Streuung um ihn herum: Der Zustand kehrt zum Attraktor zurück, und das Rauschen bleibt in den Querrichtungen. Deshalb beträgt die d90 des Drifts 227–792.


Epilog. Was das bringt

Ein Durchbruch ist nicht passiert: Keine 100×-Kompression, kein stabiler Sieg über GPTQ. Aber etwas anderes ist passiert.

Erstens, Verständnis. Ich habe ein kohärentes Bild mit Mechanismus erhalten: Warum Geometrie für Aktivierungen funktioniert (TurboQuant) und für Gewichte nicht;

warum datenadaptive Kompensation verteilungsbezogene Optimalität schlägt; wo der Kegel lebt und was bei der Kompression mit der Topologie passiert.

Zweitens, ehrliche negative Ergebnisse mit Erklärungen — ein seltener und wertvoller Genre. „QJL kann keine Gewichte speichern, hier ist die Fehlergrenze“, „die Drift ist nicht niedrig-rangig, hier ist die Dimension“,

„Rotation zerstört die Anisotropie, hier ist das Invariante“ — das sind fertige Antworten für diejenigen, die diesem Weg folgen.

Drittens, Praxis. Die Methode schlägt die skalare Quantisierung um das 6–11-Fache auf kleinen Modellen — genau dort,

wo sie katastrophal bricht — und liefert eine interpretierbare Analyse des Modells (Ränge, Energie, Schicht-Sensitivität), die GPTQs Blackbox nicht hat.

Und vor allem — ich habe aufgehört über „GPTQ schlagen“ nachzudenken. Ich verstand, dass meine ursprüngliche Frage nicht war „wie komprimiere ich Gewichte geometrisch“,

sondern „wo verläuft die Grenze der geometrischen Kompression“. Und die Antwort erwies sich als schön:

Geometrie beschreibt das Modell, aber sie komprimiert seine Gewichte nicht besser als Datenadaptivität.

Der Kegel ist das, was das Modell erzeugt; und das, was es bereits erzeugt und in die Gewichte gepackt hat, wird nur bis zum Rauschen ohne Rest komprimiert.

Der ideale Edge-Stack — GPTQ für die Gewichte und TurboQuant für den KV-Cache. Die Geometrie gewinnt, einfach nicht dort, wo wir zuerst suchten.


Nachwort: Warum das für das ganze Feld wichtig ist

Unser Projekt liefert jetzt nicht „wir haben versucht, GPTQ zu schlagen und konnten es nicht“, sondern eine vollständige Theorie:

„Wir zeigten, dass die Geometrie der Aktivierungen von LLMs (die Kegel-Hypothese) einen erheblichen Gewinn bei der Kompression der

Modell-Daten (KV-Cache, Embeddings) bringt, aber nicht bei der Kompression der

Modell-Parameter (Gewichte). Das erklärt den Erfolg von TurboQuant auf Aktivierungen und das Scheitern aller geometrischen Techniken auf Gewichten. LLMs erzeugen Redundanz in ihren Berechnungen, aber nicht in ihren Parametern.“

Diese Theorie vereinigt:

  • Den Erfolg von TurboQuant auf Aktivierungen
  • Das Scheitern der geometrischen Methoden auf Gewichte
  • Den Erfolg von GPTQ/AWQ auf Gewichten
  • Die Kegel-Hypothese (als Eigenschaft der Funktion, nicht der Parameter)

Und sie liefert auch einen praktischen Schluss: Zur Kompression von LLMs am Edge braucht man zwei verschiedene Werkzeuge, weil wir zwei verschiedene Entitäten komprimieren — Gesetz und Trajektorie.


Anhang A. Reproduzierbarkeit

CHMC v6 (Quantisierung). strict_sequential=true; dampening λ = 0,05; residual_bits = 4; group_size = 128 → Gesamt-BPW = 4,2875 (Ränge pro Schicht aus v6/bpw.py, Tabelle 1); seed = 42.

Schlüsselkonfigurationen mit ≥3 Seeds gemessen (SmolLM und TinyLlama), Qwen — Einzel-Lauf (in Tabelle 4 markiert). GPTQ-Referenz: GPTQModel, 4-bit / group-128.

TDA-Analyse (Topologie). kNN-Graph mit k = 32, sample_points = 512 pro Block, seed = 42; H₀ — union-find über Zusammenhangskomponenten + Abgleich GUDHI (0 Abweichungen);

W₁-Distanz — abgeschnittenes top-64 L∞. Artefakte: results_v6/tda_analysis/.

Drift-Diagnostik. D = post − pre an den Ausgängen der Decoder-Blöcke (dieselben 2048 Token); PCA — SVD zentrierter Matrizen (numpy);

Kegelbasis V_c — Top-10 rechte Singulärvektoren von cent(pre); cap30 = ‖Dc·V_c[:, :30]‖²/‖Dc‖². Stoppkriterien (d90 > 50 oder overlap < 0,3) wurden vor den Experimenten deklariert. Artefakte: results_v6/drift_correction/step1_diagnostics/.

Umgebung. Alle Analysen im Artikel — CPU-only (torch 2.13.0+cpu); GPU-Läufe der Quantisierung in einer separaten Umgebung. Abbildungen: results_v6/article/figures/.


Anhang B. TDA-Vergleich über die Modelle (pre vs post CHMC v6)

Modell Mittlerer pre/post-Kosinus (über Blöcke) b1-gain / b1-drop (Blöcke) Effektiver Gewichts-Rang, Median pre → post Min. effektiver Rang (pre) H₀-Abgleich
SmolLM-135M 0.9938 14 / 1 274 → 276 (+0,9%) 18.8 0 Abweichungen
Qwen2.5-0.5B 0.9864 8 / 9 358 → 366 (+2,3%) 18.7 0 Abweichungen
TinyLlama-1.1B 0.9907 8 / 4 930 → 941 (+1,2%) 22.1 0 Abweichungen
Tabelle 7. Persistente Homologie der Aktivierungs-Wolken (kNN k=32, sample_points=512): Die Kompression erhält die Makrostruktur — pre/post-Kosinus im Mittel über die Blöcke ≥ 0.986,

der effektive Rang der Gewichte verschiebt sich um ≤ 2,3% — und fügt Mikro-Rauschen in Form falscher Zyklen hinzu (b1-gain). b1-drop — Blöcke, in denen Zyklen verschwanden.


Anhang C. Quellen und Verweise

Projekt-Repository (Code + reproduzierbare Ergebnisse): github.com/xmillogx-cmd/chmc-llm-quant

A. Direkt im Artikel erwähnt

  • TurboQuant (Google Research, ICLR 2026) — geometrische Kompression von KV-Cache/Embeddings; der Referenzpunkt des ganzen Projekts: arXiv: 2504.19874 (Zandieh et al., „Online Vector Quantization with Near-optimal Distortion Rate“) · Google Research Blog — research.google
  • GPTQ — spaltenweise Kompensation des Quantisierungsfehlers (Frantar et al., ICLR 2023): arXiv: 2210.17323
  • QuIP# — Quantisierung mit ganzzahligen Codewörtern (Tseng et al., ICML 2024): arXiv: 2402.04396
  • Lloyd–Max-Quantisierer: S. Lloyd, „Least squares quantization in PCM“, IEEE Trans. Information Theory, 28(2), 1982 (Original — 1957) — IEEE Xplore; J. Max, „Quantizing for minimum distortion“, IRE Trans. Information Theory, 6(1), 1960 — Semantic Scholar
  • QJL und das Johnson–Lindenstrauss-Lemma: QJL — als Bestandteil von TurboQuant (arXiv: 2504.19874); W. Johnson, J. Lindenstrauss, „Extensions of Lipschitz mappings into a Hilbert space“, Contemp. Math., 26, 1984 — Semantic Scholar
  • Randomisierter SVD: N. Halko, P.-G. Martinsson, J. A. Tropp, „Finding structure with randomness: stochastic algorithms for decomposing matrices“, SIAM Review, 2011 — arXiv: 0909.4061
  • TDA (topologische Datenanalyse): giotto-tda — arXiv: 2004.02551 (JMLR 2021); GUDHI — gudhi.inria.fr; Klassiker (ohne Links): Edelsbrunner, Letscher, Zomorodian, „A persistent topological approach to topology-based data analysis“, 2002; G. Carlsson, „Topology and data“, Bull. AMS, 2009.

B. Modelle und Daten (im Experiment verwendet)

C. Zusätzliche Literatur (angrenzende Methoden)


P.S. Alle Läufe sind reproduzierbar: gleiches Bit-Budget 4,29, Schlüsselkonfigurationen mit mindestens drei Seeds gemessen (SmolLM und TinyLlama; Qwen — vorläufiger Einzel-Lauf, in der Tabelle markiert), Stoppkriterien wurden vor den Experimenten deklariert. Ein ehrlich erhaltenes negatives Ergebnis ist auch ein Ergebnis.