Semantische Distanz als euklidische Distanz
Ein hochdimensionaler Vektorraum
Jeder Token im 8449-Token-Vokabular von ANDREA-120M wird auf einen Punkt in R^768 abgebildet. Die Token-Embedding-Matrix hat die Form 8449 x 768: 8449 Zeilen, eine pro Vokabular-Token; 768 Spalten, eine pro Embedding-Dimension.
Drei Eigenschaften machen dies zu einem Vektorraum
1. Addition. v_a + v_b liegt in R^768. Die Summe zweier Embeddings ist ein gültiger Vektor.
2. Skalare Multiplikation. alpha * v liegt in R^768 für jedes reelle alpha. Dehnen oder Stauchen entlang derselben Richtung.
3. Linearität. alpha v_a + beta v_b liegt in R^768. Linearkombinationen bleiben im Raum.
Diese Eigenschaften geben uns geometrische Werkzeuge: Abstand, Winkel, Projektion, Basis, Orthogonalität.
Abstand als semantische Ähnlichkeit
Die Kosinus-Ähnlichkeit zweier Embeddings misst den Winkel zwischen ihnen: cos(theta) = (v_a . v_b) / (||v_a|| * ||v_b||). Bereich: -1 (entgegengesetzt) bis +1 (parallel).
Empirisches Muster nach dem Training: Tokens mit ähnlichen Kontexten erzeugen Embeddings mit hoher Kosinus-Ähnlichkeit. ANDREA-120M platziert parakeet & monkey nah beieinander (beide biologisch, beide Arten, beide lebend oder ausgestorben). Es platziert Fourier & transform nah beieinander (Signalverarbeitungskontext). Es platziert parakeet & Fourier weit auseinander (domänenübergreifende Orthogonalität).
Warum R^768 und nicht R^384
ANDREA-12M verwendete d_model = 384. ANDREA-120M verdoppelte dies auf 768. Die Verdopplung ist entscheidend: Ein 384-dimensionaler Raum bietet weniger verfügbare 'Winkel', und die domänenübergreifende Disambiguierung leidet. Die Verdopplung der Kapazität gibt dem Modell Raum, bank (Fluss) und bank (Finanzwesen) in unterschiedliche Bereiche des Embedding-Raums aufzulösen, ohne dass eines in das andere kollabiert.
Einbettungsaktualisierungen als Vektor-Translation
Jeder Gradientenschritt addiert delta_v zu v_token. Geometrisch: kleine Translationen in R^768 verschieben die Position jedes Tokens in Richtung von Nachbarschaften, die den Verlust verringern. Über 200K Schritte wandert jedes Token von seiner zufälligen Initialisierung zu einer gelernten Position.
Berechnung einer Distanz
Drei trainierte Einbettungen (vereinfacht auf R^3 für arithmetische Operationen):
- v(parakeet) = (1.0, 0.5, 0.0)
- v(monkey) = (1.2, 0.3, 0.1)
- v(Fourier) = (0.0, 0.0, 1.5)
Projektion auf einen Query-Unterraum
Was Attention berechnet
Für ein Token an Position t berechnet Attention:
softmax(Q K^T / sqrt(d_k)) V
Dabei ist Q die Query (die Frage dieses Tokens), K sind die Keys (die Identifikatoren aller vorherigen Tokens) und V sind die Values (der Inhalt aller vorherigen Tokens). Die Ausgabe mischt die V-Werte, gewichtet nach der Ähnlichkeit zwischen Query und jedem Key.
Geometrische Interpretation
Stelle dir K als Liste von Vektoren in R^d_k vor. Jede Zeile ist der Key eines vorherigen Tokens. Q ist ein einzelner Vektor in R^d_k: die Frage dieses Tokens.
Q K^T projiziert jeden Key auf Q. Das Skalarprodukt q . k_i misst, wie stark k_i in Richtung von q liegt. Lange Projektion = Key stark relevant für die Query. Kurze Projektion = Key kaum relevant.
Softmax normalisiert die Projektionen zu Gewichten, die sich zu 1 summieren. Die gewichtete Summe von V ist ein einzelner Vektor: eine Mischung aus vergangenem Inhalt, gewichtet nach Relevanz für die aktuelle Query.
Multi-Head Attention als Multi-Subraum-Projektion
ANDREA-120M verwendet 12 Attention-Heads. d_model = 768; d_k = 768 / 12 = 64. Jeder Head projiziert in einen anderen 64-dim Subraum von R^768. Zwölf Heads liefern zwölf unabhängige Sichten auf dieselbe Sequenz: ein Head könnte grammatikalische Rollen verfolgen, ein anderer semantische Ähnlichkeit, ein weiterer weitreichende Referenzen.
Geometrisch: jeder Head definiert einen 64-dim orientierten Subraum (ein „Fenster“), durch den er die Vergangenheit betrachtet.
Die Kausale Maske
Decoder-only-Modelle fügen eine kausale Maske hinzu: Jeder Eintrag von Q K^T oberhalb der Diagonalen wird vor der Softmax-Funktion auf -Unendlich gesetzt. Geometrisch: Die Projektion auf jedes zukünftige Token erhält das Gewicht Null. Token t kann nur die Tokens 0 bis t sehen.
Warum das wichtig ist: Training und Inferenz werden symmetrisch. Derselbe Forward-Pass, dieselben maskierten Projektionen, keine spezielle Generierungslogik.
Skalierung mit sqrt(d_k)
Ohne Skalierung wachsen die Skalarprodukte mit d_k. Große Skalarprodukte drängen die Softmax-Funktion in Ein-Hot-Bereiche (ein Gewicht nahe 1, der Rest nahe 0). Durch Division durch sqrt(d_k) bleiben die Projektionen auf einer Einheits-Varianz-Skala, wodurch die Schärfe der Softmax-Funktion über einen weiten Bereich von d_k-Werten erhalten bleibt.
Geometrisch: sqrt(d_k) normalisiert die Längen der Projektionen, sodass die Softmax-Funktion unabhängig von der Subraumdimension vergleichbare Größenordnungen erhält.
Eine Projektion lesen
Drei Keys & ein Query in R^4 (zur Vereinfachung der Rechnung):
- q = (1, 0, 1, 0)
- k_1 = (1, 0, 0, 0) [vergangenes Token 1]
- k_2 = (0, 0, 1, 0) [vergangenes Token 2]
- k_3 = (0, 1, 0, 1) [past token 3]
d_k = 4, also sqrt(d_k) = 2.
Gradient Descent als Pfad auf dem Gelände
Eine Oberfläche in 120M+1 Dimensionen
Jede Gewichtskonfiguration von ANDREA-120M ist ein Punkt in R^120.000.000. Die Verlustfunktion L(w) ordnet jedem Punkt eine reelle Zahl zu: den Trainingsverlust bei dieser Konfiguration. Zusammen ergeben die Verlustwerte eine (120M+1)-dimensionale Oberfläche über dem Parameterraum.
Geometrisch unmöglich, direkt zu visualisieren. Konzeptionell: ein Gelände. Berge (hoher Verlust), Täler (niedriger Verlust), Sattelpunkte, Plateaus, Grate, Becken.
Gradient als lokale Steigung
grad L(w) ist ein Vektor in R^120M, der in die Richtung des steilsten ANSTIEGS von L zeigt. Negiert: -grad L(w) zeigt in die Richtung des steilsten ABSTIEGS.
Ein AdamW-Schritt verschiebt w in Richtung des negativen Gradienten (mit adaptiver Skalierung durch m & v). Geometrisch: ein winziger Schritt entlang der Oberfläche, bergab, wobei die Schrittweite durch die Lernrate gesteuert wird.
v1's schlechtes Becken
v1 machte seinen ersten Schritt mit LR = Spitzenwert (0.0003) auf frisch initialisierten Gewichten. Geometrisches Bild: w_0 liegt in einer stark gekrümmten Region (zufällige Initialisierung hat hohe Krümmung in vielen Richtungen), und ein Schritt mit Spitzen-LR landet im falschen Becken. Nachfolgende Schritte können nicht entkommen. Das Modell bleibt bei der Ausgabe „region region region“ hängen, weil dieses Becken den niedrigsten Verlust darstellt, den das Modell von seiner Landeposition aus erreichen kann.
v2's Warmup-Pfad
v2 führt 2000 kleine Schritte mit einer Lernrate durch, die von 0 bis zum Spitzenwert ansteigt. Geometrisches Bild: w_0 wandert zunächst sanft entlang glatter Richtungen (wo die Krümmung gering ist). Bis Schritt 2000 hat sich w in eine besser navigierbare Region bewegt; die Spitzen-LR kann es dann in ein besseres Becken lenken, ohne zu überschießen.
Warmup ist ein geometriebewusstes Initialisierungsprotokoll: das Modell soll zuerst eine sichere lokale Nachbarschaft finden, bevor es stark beansprucht wird.
Breite vs. schmale Basins
Bei Schritt 112K befindet sich ANDREA-120M in einem Basin. Frage: wie breit ist es?
Breites Basin = viele benachbarte Gewichtskonfigurationen erreichen ebenfalls einen niedrigen Trainingsverlust. Die Generalisierung ist tendenziell gut (die Breite des Basins sagt die Test-Performance voraus; siehe PAC-Bayes-Lektion, Kapitel 3).
Schmales Becken = nur eine dünne Menge von Gewichten erreicht niedrigen Verlust. Die Generalisierung leidet tendenziell.
v3-Politur bei Schritt 112.619 schob das Modell entlang der Oberfläche (ohne Reset) in ein breiteres Becken mittels Curriculum-Perturbation: Änderung der Verlustfunktion (anderer Bandit, anderer Trainingsmix), sodass SGD eine nahe flache Region unter der neuen Policy finden konnte.
Die Zombie-Klippe
Der anomale Verlust von 0,13 bei Schritt 112.080 war eine KLIPPE: eine scharfe, schmale Region, in der ein spezifisches Eingabemuster (gemerkte Repo-Docs-Teilzeichenfolge) nahezu null Verlust erreicht. Das Modell fiel aus dem breiteren Becken in eine enge Schlucht. Die harte Ausschlussregel der Polier-Pivot für Repo-Docs füllte diese Schlucht auf, sodass SGD sie nicht mehr finden konnte.
Das Gelände lesen
Curriculum-Mix als Spaziergang auf einem diskreten Simplex
Was ein Simplex ist
Ein n-dimensionales Simplex (genauer das Standard-(n-1)-Simplex) ist die Menge aller n-Tupel (w_1, w_2, ..., w_n) mit w_i >= 0 und sum(w_i) = 1.
Für n = 2: eine Strecke von (1, 0) nach (0, 1). Für n = 3: ein Dreieck mit den Eckpunkten (1, 0, 0), (0, 1, 0), (0, 0, 1). Für n = 16 (ANDREA's vollständige Quellenliste): ein 15-dimensionales Simplex, das in R^16 liegt.
Bandit-Gewichte als Simplex-Koordinaten
ANDREAs Bandit erzeugt in jeder Phase einen Gewichtsvektor w über die Datenquellen. Jede Komponente w_i ist die Wahrscheinlichkeit, Quelle i zu sampeln. Die Wahrscheinlichkeiten sind nicht-negativ und summieren sich zu 1: jeder Gewichtsvektor liegt auf dem Simplex.
Eckpunkte = reine Strategien (nur eine Quelle sampeln). Inneres = gemischte Strategien (mehrere Quellen sampeln, jede mit positiver Wahrscheinlichkeit). Kanten = Mischungen aus genau zwei Quellen.
Quellen-Floors als eingeschränkter Bereich
ANDREA legt Mindestgewichte fest: hermes3-general mit einem Floor von 0,7 (nach dem Polieren). Dadurch entsteht eine Teilregion des Simplex: nur Gewichtsvektoren mit w_hermes3-general >= 0,7 sind erreichbar.
Geometrisch: der Floor schneidet den Simplex mit einer Hyperebene. Die erreichbare Region ist der Teil des Simplex, der auf der korrekten Seite jeder Floor-Hyperebene liegt.
Caps als weitere Einschränkung
ANDREA legt auch Höchstgewichte fest: dictionary mit einem Cap von 0,25 (nach dem Polieren). Jedes Cap ist eine weitere Hyperebene, und die erreichbare Region muss auf der korrekten Seite jeder Cap-Hyperebene liegen.
Eine Quelle vollständig auszuschließen (Cap = 0,0) ist das stärkste mögliche Cap: die Koordinate wird auf Null fixiert, wodurch der effektive Simplex um eine Dimension reduziert wird.
Phasenübergänge als Simplex-Wanderungen
Jeder Phasenübergang (alle 7–42 Schritte) erzeugt einen neuen Gewichtsvektor. Jeder neue Vektor ist ein Punkt auf dem Simplex. Über 200K Schritte zeichnet der Bandit einen langen Pfad durch die erreichbare Region des Simplex.
Zufällige Phasen = Teleport zu einem gleichverteilt-zufälligen Punkt innerhalb der erreichbaren Region.
Bandit-gesteuerte Phasen = Schritt in Richtung des UCB-bestmöglichen Eckpunkts, der mit den Unter- und Obergrenzen vereinbar ist.
Polish-Pivot = Neuberechnung der erreichbaren Region (neue Untergrenzen, neue Obergrenzen, einige Quellen ausgeschlossen), und die Wanderung setzt sich vom neuen Startpunkt aus fort.
Warum Eckpunkte gefährlich sind
Reine Quellen-Phasen (ein w_i = 1, Rest = 0) liegen an den Eckpunkten des Simplex. Die Diversität ist null. Das Modell trainiert nur auf einer einzigen Verteilung. Der teilweise Kollaps von v1 lässt sich teilweise darauf zurückführen, dass der Bandit in der Nähe des repo-docs-Eckpunkts campte; die Samples reproduzierten ausschließlich die Verteilung dieser Quelle.
Böden verhindern das Campen an Eckpunkten: ein Boden von 0,7 bedeutet „keine Quellen-Gewichtung darf unter 0,7 fallen“ (oder welcher Wert auch immer für die priorisierten Quellen gilt).
Das erreichbare Gebiet durchlaufen
Drei Quellen: hermes3-general (H), gutenberg (G), dictionary (D). Nebenbedingungen: H-Boden = 0,5, D-Obergrenze = 0,25. (Implizit: alle Gewichte ≥ 0, Summe = 1, keine weiteren Nebenbedingungen.)
Einschränkung der Dimensionen für die ersten 20K Schritte
Was v2's Curriculum Warmup getan hat
v2 hat curriculum_warmup_sources auf sieben Quellen gesetzt: hermes3-general, hermes3-creative, hermes3-roleplay, chat, smoltalk, oasst, gutenberg. Für die ersten 20K Schritte haben NUR diese sieben Quellen beigetragen. Nach Schritt 20K wurde der vollständige 16-Quellen-Feuerwehrschlauch aktiviert.
Geometrische Interpretation
Das vollständige 16-Quellen-Simplex liegt in R^16. Die Beschränkung auf 7 Quellen kollabiert 9 der 16 Koordinaten auf Null. Der Walk des Bandits findet in einem 6-dimensionalen Sub-Simplex statt (eine Dimension weniger als die Quellenanzahl, bedingt durch die Sum-to-1-Bedingung).
Geometrisch: eine SUBMANIFOLD des vollständigen Simplex. Niedriger-dimensional, glatter, leichter zu navigieren.
Warum das beim frühen Training hilft
Zu Beginn des Trainings hat das Modell noch keine kohärente Sprache gelernt. Verschiedene Quellen verwirren es: jede Quelle hat ihren eigenen Stil, ihre eigene Vokabularverteilung, ihr eigenes Muster. Das zufällige Mischen von 16 Quellen beim initialen Training erzeugt eine zu breite Zieldistribution, die das Modell nicht abbilden kann.
Die Beschränkung auf 7 konversationelle/Prosa-Quellen ergibt eine einheitlichere Zielverteilung. Das Modell lernt zuerst eine stabile Repräsentation und erweitert diese dann.
Geometrischer Pfad durch das Training
1. Schritte 0 bis 20K (Warmup). Der Walk bewegt sich auf dem 6-D Sub-Simplex. Stabile Sprachmuster entstehen im Modell.
2. Schritte 20K bis 112K (Full Firehose). Der Walk erweitert sich auf den 15-D Full-Simplex. Breite der Domäne entsteht.
3. Schritt 112K und darüber hinaus (Polish). Der Walk wird wieder eingeschränkt: repo-docs & repo-docstrings ausgeschlossen, conversational floors angehoben. Kleineres Polygon im Full-Simplex; Konversationsqualität konsolidiert sich.
Warum Polish curriculum_warmup_steps = 0 setzt
Polish beginnt bei Schritt 112K. Das Modell spricht bereits kohärente Sprache. Eine Einschränkung auf einen Sub-Simplex würde jetzt Breite verlieren, ohne etwas zu gewinnen (der Warmup-Nutzen gilt für frisch initialisierte Modelle). warmup_steps = 0 bedeutet: auf dem Full-Simplex bleiben, aber mit neuen Caps & Floors.
Drei Geometrien, ein Trainingslauf
v2 Warm-up: niedrig-dimensionales Sub-Simplex.
v2 Firehose: volles 15-D-Simplex.
v3 Polieren: volles Simplex mit kleinerem Polygon (mehr Nebenbedingungen).
Derselbe 200K-Schritt-Lauf, drei verschiedene geometrische Regime. Jedes wurde für eine andere Phase der Modellreife optimiert.