# Die Bestie zaehmen: Evaluieren, Diagnostizieren, Iterieren

Ein Trainingsskript ausfuehren kann jeder. Der Unterschied zwischen einem trainierten Drachen und einem, der Glueck hatte, ist **Evaluation** — messen, diagnostizieren und iterieren wie ein Ingenieur. Das ist die Lektion, die dein mittelmaessiges v1 in ein v3 verwandelt, dem du wirklich vertraust — und es ist die Disziplin, die die meisten Hobbyisten ueberspringen.

## Die drei Ebenen der Evaluation

**Ebene 1 — Loss-Kurven (kostenlos, automatisch).** Die hast du bereits vom Training. Sie erzaehlen dir etwas ueber den *Prozess*: Hat das Modell gelernt, hat es overfittet? Sie sagen dir nichts darueber, ob die Antworten tatsaechlich gut sind.

**Ebene 2 — Dein Test-Set (die echte Pruefung).** Erinnerst du dich an `test.jsonl` — die Scheibe, die das Modell nie gesehen hat? Schick jeden Test-Prompt durch das trainierte Modell und benote die Ausgaben gegen deine Ziel-Karte aus Lektion 2. Das ist deine Ground Truth.

**Ebene 3 — Modell als Richter (Ebene 2 skaliert).** Lass ein starkes Modell (Claude oder dein groesstes lokales Modell) jede Antwort gegen eine Rubrik benoten. Perfekt, um bei jeder Iteration 30+ Antworten neu zu benoten, ohne einen Abend zu verlieren.

<div class="concept-box">
<h4>Konzept</h4>
Benote gegen deine <strong>Ziel-Karte</strong>, nicht nach Gefuehl. Embers Karte sagt: Struktur (Antwort → Erklaerung → naechster Schritt), Stimme, null erfundene Fakten. Die Rubrik sind also drei Ja/Nein-Fragen pro Antwort. Score = Zaehlungen, nicht Gefuehle. "Es wirkt besser" ist keine Messung.
</div>

## Die Kurven lesen: Drei klassische Formen

<svg viewBox="0 0 720 280" width="100%" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Drei Loss-Kurven-Formen: gesund, Overfitting, untertrainiert">
    <!-- panel 1: healthy -->
  <path d="M30 230 L30 60 M30 230 L220 230" stroke="#3a4356" stroke-width="1" fill="none"/>
  <path d="M35 80 C 70 140, 110 180, 215 195" stroke="#4fffb0" stroke-width="2" fill="none"/>
  <path d="M35 75 C 70 130, 110 170, 215 180" stroke="#7b8cff" stroke-width="2" fill="none" stroke-dasharray="5 4"/>
  <text x="125" y="256" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="13px">Gesund</text>
  <text x="125" y="272" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="11px">beide fallen, kleine Luecke</text>
  <!-- panel 2: overfitting -->
  <path d="M280 230 L280 60 M280 230 L470 230" stroke="#3a4356" stroke-width="1" fill="none"/>
  <path d="M285 80 C 320 140, 360 190, 465 205" stroke="#4fffb0" stroke-width="2" fill="none"/>
  <path d="M285 75 C 330 130, 380 150, 400 145 C 430 140, 450 110, 465 90" stroke="#7b8cff" stroke-width="2" fill="none" stroke-dasharray="5 4"/>
  <text x="375" y="256" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="13px">Overfitting</text>
  <text x="375" y="272" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="11px">Val Loss dreht nach oben</text>
  <!-- panel 3: undertrained -->
  <path d="M530 230 L530 60 M530 230 L720 230" stroke="#3a4356" stroke-width="1" fill="none"/>
  <path d="M535 80 C 570 100, 620 115, 715 125" stroke="#4fffb0" stroke-width="2" fill="none"/>
  <path d="M535 75 C 570 95, 620 108, 715 115" stroke="#7b8cff" stroke-width="2" fill="none" stroke-dasharray="5 4"/>
  <text x="625" y="256" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="13px">Untertrainiert</text>
  <text x="625" y="272" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="11px">faellt am Ende noch</text>
  <text x="60" y="52" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="11px">— Train &nbsp; ---- Validierung</text>
</svg>

**Gesund:** Beide Kurven sinken, die Validierung leicht ueber dem Train, beide flachen ab. Ab damit zum Test-Set.

**Overfitting:** Der Validierungs-Loss erreicht seinen Tiefpunkt und steigt, waehrend der Train weiter faellt. Der Drache lernt auswendig. Fixes, nach Wirkkraft geordnet: **mehr/bessere Daten**, weniger Epochen (stopp da, wo der Val Loss seinen Tiefpunkt hatte), niedrigerer Rank, hoeheres LoRA-Dropout.

**Untertrainiert:** Beide fallen noch, als das Training endete. Der einfachste Fix ueberhaupt: laenger trainieren oder die Learning Rate eine Stufe anheben.

## Die Diagnose-Tabelle

Zahlen zeigen auf das Problem; echte Ausgaben zu lesen identifiziert es. Lies nach jedem Lauf 10 Test-Ausgaben und ordne die Symptome zu:

| Symptom in den Ausgaben | Wahrscheinliche Ursache | Fix |
|---|---|---|
| Ignoriert manchmal dein Format | Inkonsistente Beispiele, oder zu wenige | Daten saeubern; formatlastige Beispiele ergaenzen |
| Plappert Trainingsantworten woertlich nach | Overfitting | Weniger Epochen; mehr Datenvielfalt |
| Tolles Format, schwache Substanz | Rank zu niedrig, oder Basis zu klein | r=16→32; 8B-Basis erwaegen |
| Erfindet selbstbewusst Fakten | Keine Weigerungs-Beispiele in den Daten | 20–30 explizite Weigerungs-Demonstrationen ergaenzen |
| Schlechter als die Basis im allgemeinen Chat | Uebertrainiert / Catastrophic Forgetting | Weniger Schritte; 10–20% allgemeine Chat-Beispiele beimischen |
| Wechselt zufaellig die Sprache | Gemischtsprachige Daten ohne Muster | Sprachpaarung pro Beispiel explizit machen |

<div class="honest-note">
<h4>Ehrlicher Hinweis</h4>
Catastrophic Forgetting ist real: Haemmere ein Modell mit 2.000 Support-Tickets, und es kann bei allem anderen <em>schlechter</em> werden. LoRAs eingefrorene Basis begrenzt den Schaden (loesch die Adapter und die Basis ist unberuehrt), aber Adapter koennen Verhalten trotzdem uebersteuern. Die Standard-Impfung: eine kleine Scheibe allgemeiner Konversationsdaten im Mix behalten.
</div>

## Die Iterationsschleife

Dein Workflow ist ab hier eine Schleife, und jeder Durchgang dauert einen Abend, keine Woche:

1. **Evaluiere** v_N auf dem Test-Set → Scores auf deiner Ziel-Karten-Rubrik
2. **Lies** die 10 schlechtesten Ausgaben → waehle das *eine* groesste Problem
3. **Fixe zuerst die Daten** (sie sind in ~80% der Faelle die Ursache), Hyperparameter danach
4. **Retrainiere** → v_N+1, **re-evaluiere dasselbe Test-Set** → vergleiche die Zahlen
5. Stopp, wenn du den Erfolgstest deiner Ziel-Karte erreichst — Embers war ≥25/30 strukturiert, 0 erfundene Fakten

<div class="pro-tip">
<h4>Profi-Tipp</h4>
Aendere <strong>eine Sache pro Iteration</strong>. Wenn du gleichzeitig Daten ergaenzt, die Learning Rate senkst und den Rank erhoehst, bewegt sich der Score und du lernst nichts ueber das Warum. Langsam ist geschmeidig, geschmeidig ist schnell — diese Schleife konvergiert in 3–4 disziplinierten Durchgaengen.
</div>

<div class="try-it">
<h4>Probier es aus</h4>
Schick dein volles Test-Set durch v1 und benote es mit deiner Rubrik — die ehrliche Baseline-Zahl. Dann mach genau eine Iteration der Schleife (wahrscheinlich: Weigerungs-Beispiele ergaenzen und das Format neu saeubern) und stelle v2s Score neben v1s. Dieser eine Vergleich lehrt dich mehr ueber Fine-Tuning als jeder Blogpost es je koennte.
</div>

<div class="checkpoint">
<h4>Checkpoint</h4>
Du kannst die drei Loss-Kurven-Formen lesen, die sechs klassischen Ausgabe-Symptome diagnostizieren, und du faehrst eine Ein-Aenderung-pro-Durchgang-Iterationsschleife mit echten Scores. Dein Drache ist gezaehmt. Als Naechstes: fortgeschrittenes Training — Preference Tuning, groessere Modelle und Ember fuers Deployment schrumpfen.
</div>
