*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:
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:
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:
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 |
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)
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.
| 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 |
† 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× |
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σ) |
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 💀 |
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.
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“.
| 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 |
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:
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 |
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)
- SmolLM-135M — Hugging Face Blog, 2024: huggingface.co/blog/smollm
- Qwen2.5-0.5B: arXiv: 2412.15115
- TinyLlama-1.1B: arXiv: 2401.02385
- WikiText (Kalibrierung und PPL): S. Merity et al., „Pointer Sentinel Mixture Models“ — arXiv: 1609.07843
- GPTQModel (Bibliothek für die GPTQ-Baseline): github.com/ModelCloud/GPTQModel
- Ursprünglicher Artikel des Autors zur Geometrie der Embedding-Räume (Kegel-Hypothese) — Blog: [Link einfügen]
C. Zusätzliche Literatur (angrenzende Methoden)
- AWQ — aktivitätsbewusste Gewichts-Quantisierung: arXiv: 2306.00978
- ASVD: arXiv: 2312.05821
- SVD-LLM — abtrunkungsbewusste Whitening (Cholesky von XᵀX): arXiv: 2403.07378
- LQER — low-rank error correction („Spiegelzwilling“ der Delta-Korrektur): arXiv: 2402.02446
- Analogiesatz in der Hoare-Logik — formale Garantien für Transfer, als Rahmen diskutiert (Metrik D_l): veröffentlichter Artikel, Nature Scientific Reports
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.