Wie überrascht sollte das Modell sein?
Von Logits zu Wahrscheinlichkeiten
Nach 12 Transformer-Blöcken erzeugt ANDREA-120M einen Vektor mit vocab_size Zahlen pro Token-Position: die Logits. Für ANDREA-120M gilt vocab_size = 8449, sodass jede Position 8449 Logits ausgibt. Logits sind unnormalisierte Scores; einige positiv, einige negativ, ohne Zwang, auf 1 zu summieren.
Softmax wandelt Logits in eine Wahrscheinlichkeitsverteilung um:
p_i = exp(logit_i) / sum_j exp(logit_j)
Nach Softmax liegen alle 8449 Zahlen zwischen 0 & 1 und summieren sich zu 1. Das Modell weist jeder möglichen nächsten Token eine Wahrscheinlichkeit zu.
Kreuzentropie-Verlust
Das Training erfordert eine Verlustfunktion: eine Zahl, die misst, wie falsch die Vorhersage des Modells für eine gegebene richtige Antwort war. Die Kreuzentropie funktioniert für die Sprachmodellierung:
loss_t = -log(p_correct_token_t)
Nimm die vom Modell vorhergesagte Wahrscheinlichkeit für das tatsächliche nächste Token (dasjenige in den Trainingsdaten). Nimm den negativen Logarithmus dieser Wahrscheinlichkeit. Das ist der Loss für eine Position.
Warum negativer Logarithmus
Drei Eigenschaften machen -log(p) zu einer natürlichen Loss-Funktion:
- -log(1) = 0: Wenn das Modell das korrekte Token mit 100%iger Sicherheit vorhersagt, ist der Loss null.
- -log(0) = ∞: Wenn das Modell dem korrekten Token null Wahrscheinlichkeit zuweist, ist der Loss unendlich. (In der Praxis gibt Softmax nie exakt 0 aus; der Loss bleibt endlich, aber groß.)
- Monoton: Je höher die vorhergesagte Wahrscheinlichkeit für das korrekte Token, desto geringer der Loss – stetig abnehmend.
Höhere Sicherheit bei der richtigen Antwort = niedrigerer Verlust. Das Trainingsziel ist einfach: Maximieren der vorhergesagten Wahrscheinlichkeit für das tatsächliche nächste Token.
Verlust pro Sequenz
ANDREA trainiert auf Sequenzen der Länge 1024 (das Kontextfenster). Jede Sequenz erzeugt 1024 Vorhersagen für das nächste Token. Der Sequenzverlust ist der Durchschnitt über alle Positionen:
```
sequence_loss = mean(-log(p_correct_t)) für t in 0..1023
```
Dann werden die Sequenzverluste über den Batch gemittelt (ANDREA-120M verwendet batch_size = 8). Eine skalare Zahl pro Trainingsschritt. Diese Zahl ist das, was die Verlustkurve darstellt.
Berechnung des Verlusts für eine Position
Perplexity = exp(loss)
Eine freundlichere Skala
Loss-Werte wie 2.0 oder 3.43 vermitteln nicht sofort, was das Modell kann. Perplexity übersetzt den Loss auf eine intuitivere Skala:
perplexity = exp(loss)
Perplexity beantwortet eine klare Frage: Aus wie vielen gleich wahrscheinlichen Tokens wählt das Modell effektiv? Eine Perplexity von 7 bedeutet, dass das Modell sich verhält, als würde es an jeder Position aus 7 plausiblen nächsten Tokens wählen. Eine Perplexity von 1 bedeutet perfekte Vorhersage.
Häufige Loss-Perplexity-Paare
| Loss | Perplexity | Wie es sich anfühlt |
|---|---|---|
| 0.0 | 1.0 | Perfekte Vorhersage |
| 1.0 | 2.7 | Auswahl unter ~3 plausiblen Tokens |
| 2.0 | 7.4 | ANDREA-12M finales SMMA-Territorium |
| 3.0 | 20.1 | Vernünftiger Text, aber unsicher |
| 3.43 | 30.9 | ANDREA-120M v1 Minimum (vor dem Polieren) |
| 5.0 | 148 | Frühes Training, Lernen der Vokabelverteilung |
| 9.04 | 8449 | Zufallsbaseline für ANDREA-120M's Vokabular |
Perplexity setzt Verlustwerte in Kontext: Ein Verlust von 2.0 bedeutet, dass das Modell effektiv aus ~7 Tokens wählt, nicht aus 8449.
Der Zufalls-Chance-Baseline-Wert
Ein Modell, das nichts weiß & gleichmäßig rät, weist jeder Token die Wahrscheinlichkeit 1/V zu, wobei V = vocab_size:
p_uniform = 1 / V
loss = -log(1/V) = log(V)
Für ANDREA-120M mit V = 8449:
loss_uniform = ln(8449) ≈ 9,04
Für ANDREA-12M mit V = 2305:
loss_uniform = ln(2305) ≈ 7.74
Jeder Verlust oberhalb dieser Baseline bedeutet, dass das Modell schlechter als zufällig abschneidet. Jeder Verlust darunter bedeutet, dass das Modell etwas gelernt hat: Es konzentriert die Wahrscheinlichkeitsmasse auf einen kleineren Teilmenge von Token als uniform.
Ein Loss-Wert lesen
Glättung von Step-Level-Rauschen
Roh-Loss ist verrauscht
Der Per-Step-Loss hüpft herum. ANDREAs Bandit wählt alle 7-42 Schritte eine andere Quelle; einige Quellen (Wörterbuchdefinitionen) erzeugen einfache Losses; andere (Gutenberg-Absätze) erzeugen schwierigere Losses. Das Plotten des rohen Step-Loss gegen die Step-Nummer ergibt eine chaotische Streuung.
Geglättete Modifizierte Gleitende Durchschnitt (SMMA) dämpft das Rauschen & enthüllt den Trend. ANDREA's Training-Proxy berechnet SMMA wie folgt:
SMMA[0] = loss[0]
SMMA[t] = (SMMA[t-1] * (N-1) + loss[t]) / N
Mit N = 100 (ANDREA's Standard-Glättungsfenster) mischt jeder neue SMMA-Wert 99% des vorherigen SMMA mit 1% des neuen Schrittverlusts. Plötzliche Spitzen werden absorbiert; anhaltende Verschiebungen zeigen sich allmählich.
Warum nicht einfach Durchschnitt bilden?
Ein einfacher gleitender Durchschnitt über die letzten 100 Schritte erfordert das Speichern von 100 Verlustwerten. SMMA speichert einen Wert (den laufenden Durchschnitt) & eine Konstante (die Fenstergröße). Speichersparend, rechentechnisch trivial & glatt genug, um eine Kurve lesbar zu machen.
Verschiedene Glättungsgewichte beantworten unterschiedliche Fragen:
- N = 10: verfolgt kurzfristige Änderungen; nützlich während Phasenübergängen
- N = 100: ANDREA's Standard; verfolgt mittelfristigen Fortschritt
- N = 1000: nur langfristiger Trend; nützlich am Ende des Trainings
Was ANDREA verfolgt
Alle 100 Schritte schreibt der Training-Proxy loss.json mit dem aktuellen SMMA, rohem Loss, Schritt-Nummer & Aufschlüsselung nach Quellen. Das Dashboard unter training.ai.unturf.com/dashboard pollst diese Datei alle 10 Sekunden. Externe Zuschauer sehen live Fortschritt; das Dashboard ist schreibgeschützt.
ANDREA-12M's tatsächliche Kurve
Das Rezept, das SMMA 2.0 erreicht hat
| Schritte | Durchschn. Loss | Notizen |
|---|---|---|
| 0--2.5K | 4.50 | Zufällige Init, frühes Lernen |
| 2.5K--5K | 3.88 | Schneller Rückgang durch Strukturphase |
| 5K--10K | 3.30 | Annäherung an Kohärenzgrenze |
| 10K--20K | 2.80 | Bandit findet optimale Mischung |
| 20K--25K | 2.40 | Plateau --- Datenmangel |
| 25K--30K | 2.50 | Hermes-Daten eingeführt + LR-Neustart |
| 30K--35K | 2.35 | Hermes integriert, neue Tiefststände |
| 35T--40T | 2.10 | 4-Arm-Fokus, steiler Abfall |
| 40T--43,6T | 2.00 | Wissensgebiet, SMMA unter 2.0 |
Drei Phasen stechen hervor:
1. Steiler früher Abfall (0-10T). Der Loss fällt von 4.50 auf 3.30, während das Modell die Vokabelverteilung und die grundlegende Wendestruktur lernt. Die Zufalls-Baseline ln(2305) ≈ 7.74 liegt weit über dieser Kurve; das Modell konzentriert die Wahrscheinlichkeitsmasse schnell, sobald die Embeddings stabilisiert sind.
2. Plateau (20T-25T). Der Loss stagniert bei 2.40. Der Bandit hatte seinen Spielraum mit der aktuellen Quellenmischung ausgeschöpft. Hermes-Daten wurden bei Schritt 25T hinzugefügt, plus ein LR-Warm-Restart, was das Plateau durchbrach.
3. Endabstieg (35K-43,6K). Curriculum von 16 Quellen auf 4 eingeengt (hermes3-general + dictionary + gutenberg + chat). Steilerer Verlustabfall als beim full-arm bandit. Finale SMMA: 2.0.
ANDREA-120M v1: Eine warnende Kurve
Gleiche Vokabelberechnung: ln(8449) ≈ 9.04. ANDREA-120M v1 erreichte SMMA 3.43 bei Schritt 110K (sein Minimum), dann Divergenz:
| Schritte | EMA-Verlust | Trend |
|---|---|---|
| 26K--40K | 4.29 | Konvergierend |
| 70K--85K | 3.60 | Beste Region |
| 85K--110K | 3.43 | Minimum |
| 110K--125K | 3.54 | Divergierend |
| 140K--155K | 4.05 | Divergierend |
| 155K--165K | 4.54 | Kollabiert |
Numerisch vernünftige Verlustwerte durchgehend (3.43 liegt deutlich unter der zufälligen Baseline von 9.04). Aber Samples waren Repetitionskollaps: Budy Budy Budy Budy. Der Verlust erzählte eine irreführende Geschichte; Sample-Audits taten es nicht.
v2's coherence-gated early stopping (activity 78) added a parallel signal: bigram diversity, trigram diversity, English word presence, character diversity. When all four scores stay below 30 for 5 consecutive samples, training auto-halts. This signal would have caught v1 at step 132K, saving 3.8 days of compute.
Was jede Phase Ihnen sagt
Die 120M v1 Lektion
Zwei unabhängige Signale
ANDREA-120M v1 erreichte SMMA 3.43 bei Schritt 110K. Numerisch: 273× besser als Zufall (Perplexität 31 vs. Vokabulargröße 8449). Sieht großartig auf der Kurve aus.
Beispiel bei Schritt 110K::
''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
Verlust & Kohärenz sind unabhängige Signale. Niedriger Verlust bedeutet, dass das Modell die Wahrscheinlichkeitsmasse effektiv konzentriert. Kohärenz bedeutet, dass das Modell Text erzeugt, den Menschen lesen können. Das Erste impliziert nicht das Zweite.
Warum die Lücke existiert
Ein Modell kann den Verlust senken durch:
1. Lernen realer Sprachmuster (gut): Subjekt-Verb-Abstimmung, gängige Phrasen, faktenbasierte Assoziationen.
2. Auswendiglernen struktureller Artefakte (schlecht): hochfrequente Wiederholungsmuster, datensatzspezifische Eigenarten, degenerative Attraktoren.
Beide reduzieren den Loss. Der erste erzeugt Proben, die Menschen mögen. Der zweite erzeugt Budy Budy Budy Budy. Das Trainingsziel allein kann sie nicht unterscheiden.
ANDREA-120M v3 Polish: Wo Loss & Kohärenz aufeinandertreffen
Nach dem v3-Polish (Schritt 112K und folgende) erzeugt ANDREA-120M:
Schritt 112.584, Loss 0.30, ppl 1::
> [extinction prompt]
< Die schwarze Spinnenaffe Montano lebt, der Carolinapapagei ist ausgestorben.
Beide Fakten korrekt. Carolinapapagei 1939 für ausgestorben erklärt; Schwarze Spinnenaffe extant. Niedriger Loss (0.30) UND kohärente faktenbasierte Erinnerung.
Schritt 112.500, Verlust 1,94, ppl 7::
> Wie finde ich veraltete Pakete in einem Python-Projekt?
< Verwende `pip list --outdated` um die Liste der pip-Pakete zu sehen...
Höherer Verlust (1,94 → ppl 7), aber das richtige Tool taucht aus den Trainingsdaten auf. Die Flüssigkeit der Formulierung entwickelt sich noch bei der 56%-Marke des Trainings.
Die Zwei-Signal-Disziplin
Moderne Trainings-Pipelines überwachen BEIDES:
- Loss-Kurve. Sagt dir, ob das Modell etwas Quantitatives lernt.
- Sample-Audit. Sagt dir, ob das, was das Modell gelernt hat, nützlich ist.
v2 fügte coherence-gated early stopping hinzu (Aktivität 78). v3-Politur war eine durch Sample-Audits ausgelöste Curriculum-Perturbation, nicht durch Loss-Werte. Loss allein ist notwendig, aber nie ausreichend.