Zum Inhalt springen
11/30Kapitel 11 von 30

Vom Basismodell zum Assistenten: SFT, RLHF, DPO und GRPO

Bitte ein Basismodell um ein Haiku – und sieh, wie ein Reward Model lernt, Länge höher zu bewerten als Korrektheit.

Auf dieser Seite

Bitte GPT-2 — ein ordentlich vortrainiertes Sprachmodell — ein Haiku über das Meer zu schreiben:

TEXT
prompt: Write a haiku about the sea.

The sea is a beautiful place.

The sea is a beautiful place.

The sea is a beautiful place.

The sea is a beautiful place.

The sea is a beautiful place.

Es ist nicht verwirrt, und es hat auch nicht bei seiner Aufgabe versagt. Es tut genau das, wofür Kapitel 10 es trainiert hat: gegebenen Text nehmen und plausiblen fortlaufenden Text erzeugen. Im Internet folgt auf eine Zeile wie Write a haiku about the sea. oft Prosa über das Meer, und ein Satz, der gerade erschienen ist, erscheint mit ungewöhnlich hoher Wahrscheinlichkeit noch einmal. Das Modell ist ein hervorragender next-token-Prädiktor und ein nutzloser Assistent.

Jetzt dieselbe Anfrage an ein Modell, das auf dieselbe Weise gebaut wurde — Qwen2.5, eine halbe Milliarde Parameter, viermal so groß wie das GPT-2 oben und nach jedem Maßstab von 2026 immer noch winzig — nach den Trainingsstufen, um die es in diesem Kapitel geht:

TEXT
Whispers of the ocean,
Silent depths where waves meet,
Mysteries in the vast blue.

Viermal so viele Parameter bringen einem Modell nicht bei, mit dem Reden aufzuhören. Die Lücke zwischen diesen beiden Ausgaben ist nicht Skalierung, nicht Architektur und nicht Datenvolumen. Sie ist Post-Training: eine zweite Phase, um Größenordnungen kleiner als Pretraining, die aus einem Textprädiktor etwas macht, das antwortet.

Stufe eins: ihm zeigen, wie eine Antwort aussieht

Link zum Abschnitt: Stufe eins: ihm zeigen, wie eine Antwort aussieht

Der erste Schritt ist der am wenigsten glamouröse und erledigt den größten Teil der Arbeit. Sammle Beispiele aus Anweisungen mit guten Antworten und trainiere darauf weiter, mit exakt demselben Loss aus Kapitel 8 — das nächste token vorhersagen — aber nur auf dem Antwortteil. Das ist supervised fine-tuning, oder SFT.

Dem Modell wird nichts Neues über Sprache beigebracht. Beigebracht wird ein Format: dass auf Text dieser Form Text jener Form folgt, und dass er dann stoppt. Schau dir noch einmal das Scheitern des Basismodells an. Es beantwortete die Frage im ersten Satz und konnte dann nicht aufhören, weil in seinem Training nie das Ende einer Antwort markiert wurde. Aufhören ist ein gelerntes Verhalten.

Deshalb muss dem Modell auch gesagt werden, wo die Grenzen liegen — genau das ist ein Chat-Template:

TEXT
<|im_start|>system
You are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>
<|im_start|>user
What is the capital of France?<|im_end|>
<|im_start|>assistant

Diese <|im_start|>- und <|im_end|>-Marker sind echte tokens im Vokabular, vor dem fine-tuning hinzugefügt, und das Modell hat Millionen davon genau an diesen Positionen gesehen. So weiß es, wer an der Reihe ist und wo ein Turn endet.

Lässt du das Template weg und gibst dem Modell eine nackte Frage, gibst du ihm eine Sequenz, die es im Training nicht gesehen hat. Gemessen, dasselbe Modell, dieselbe Frage, dasselbe greedy decoding:

Ohne Template — der rohe String What is the capital of France?:

TEXT
 The capital of France is Paris.

To verify this, I will use a simple
Python code snippet to confirm that
Paris is indeed the capital city of
France.

[...and then it starts writing a
Python script to check its own answer]

Mit Template:

TEXT
The capital of France is Paris.

Die Antwort ist in beiden Fällen richtig, aber ohne die Marker driftet das Modell dazu ab, Python zu schreiben, um sich selbst zu prüfen, weil der prompt, den es erhalten hat, nichts ähnelt, worauf es fine-tuned wurde. Das ist die häufigste Ursache für „das Modell ist dümmer geworden, als ich es direkt aufgerufen habe“: Das Template ist keine Dekoration um das Modell herum, es ist Teil des Modells, und ein falsches Template ist eine stille Verschlechterung ohne Fehlermeldung.

Stufe zwei, und das Problem, das sie lösen soll

Link zum Abschnitt: Stufe zwei, und das Problem, das sie lösen soll

SFT hat eine Obergrenze, und diese Obergrenze sind die Daten. Um auf einer Demonstration fine-tuning zu machen, muss jemand die ideale Antwort schreiben — und bei den meisten interessanten Fragen ist eine gute Antwort schwer, langsam und teuer zu schreiben und liefert genau eine Antwort, deren Qualität du nicht verifizieren kannst.

Worin Menschen gut sind, ist Vergleich. Wenn ein Annotator zwei Antworten sieht, kann er in wenigen Sekunden zuverlässig sagen, welche besser ist, ohne eine der beiden selbst produzieren zu können. Auf dieser Tatsache baut die gesamte zweite Stufe auf, und es ist der Teil, den die meisten Erklärungen verkehrt herum darstellen:

Menschen schreiben nicht die Antworten. Sie ranken Paare.

Die Daten bestehen also aus Paaren — einem prompt, zwei Antworten und der Information, welche gewonnen hat. Das lässt sich nicht in einen next-token-Loss stecken, weil es keine Zielsequenz gibt. Es braucht eine andere Maschine.

Das Reward Model, und was es tatsächlich lernt

Link zum Abschnitt: Das Reward Model, und was es tatsächlich lernt

Du kannst während des Trainings nicht jede Antwort von einem Menschen bewerten lassen — das wären Millionen von Urteilen. Also trainierst du ein Modell, das die Menschen imitiert: ein Reward Model, das eine Antwort nimmt und einen Skalar zurückgibt.

Es aus Vergleichen zu trainieren nutzt ein Ergebnis von 1952. Das Bradley–Terry-Modell2 besagt: Wenn zwei Items latente Stärken haben, ist die Wahrscheinlichkeit, dass eines das andere schlägt, die logistische Funktion ihrer Differenz. Dreht man das um, wird daraus ein Loss: gegeben, dass ein Mensch ywy_w gegenüber yly_l bevorzugt hat, maximiere

P(ywyl)=σ(r(yw)r(yl))P(y_w \succ y_l) = \sigma\big(r(y_w) - r(y_l)\big)

was im Code die gesamte Trainingsschleife ist:

reward_model.pyPYTHON
loss = -F.logsigmoid(reward(chosen) - reward(rejected)).mean()   

Beachte, was das Modell nie sieht: einen absoluten Score. Es lernt ausschließlich Differenzen, und genau das enthalten die Daten.

Jetzt der Teil, den es sich zu messen lohnt. Ein Reward Model lernt, was die Annotatoren belohnt haben, und Annotatoren sind Menschen. Hier ist eine Simulation, in der die wahre Qualität einer Antwort nur davon abhängt, nützlich und korrekt zu sein — Länge ist nichts wert —, der simulierte Annotator aber eine leichte Präferenz für längere Antworten hat, wenn alles andere nahe beieinander liegt, ein gut dokumentierter menschlicher Bias. Trainiere das Reward Model auf 2000 Vergleichen und lies seine Gewichte aus:

Längen-Bias des Annotatorsgelerntes Gewicht auf nützlichauf korrektauf Länge
0,0+1,00+1,00+0,01
0,3+0,98+1,00+0,15
0,6+0,97+1,00+0,27
1,2+1,00+0,99+0,59

Das Reward Model funktioniert perfekt. Es hat treu die Präferenzen gelernt, die ihm gezeigt wurden — einschließlich des Teils dieser Präferenzen, der nichts mit Qualität zu tun hat. Ein Reward Model ist kein Maß für gut; es ist ein Maß dafür, was die Annotatoren ausgewählt haben, und jeder Bias im Annotation-Pool ist jetzt ein Koeffizient in einer differenzierbaren Funktion, gegen die ein viel größeres Modell gleich optimieren wird.

Damit kommen wir dazu, was passiert, wenn du darauf optimierst. Gib der Policy ein fixes Budget an Aufwand, das sie über die Eigenschaften der Antwort verteilen kann, mit einer realistischen Asymmetrie: nützlich und korrekt zu sein ist teuer, länger zu sein ist billig — du schreibst einfach weiter.

Reward pro Aufwandseinheit, für das oben trainierte Modell: nützlich 8,26, korrekt 8,31, Länge 31,70. Länge zahlt sich fast viermal besser aus als Korrektheit, nicht weil das Reward Model kaputt ist, sondern weil sie billig ist.

Optimiere gegen diesen Reward und beobachte beide Zahlen:

Score des Reward Modelswahre Qualitäterzeugte Länge
Start-Policy12,5880,9743,365
nach Optimierung31,6960,00012,497

Der Reward stieg um den Faktor 2,5. Das, was der Reward eigentlich messen sollte, fiel auf null. Die Policy entdeckte, dass sie enorm gut scoren konnte, indem sie ausführlich schrieb und nichts sagte, und kein Teil der Trainingsschleife hatte irgendeine Möglichkeit, das zu bemerken, weil das Reward Model die Definition von gut innerhalb der Schleife ist.

Das ist Reward Hacking, und wenn du dich je gefragt hast, warum Chat-Modelle so wortreich sind: Diese Tabelle ist ein großer Teil der Antwort.

Die Standardverteidigung ist, die Policy dafür zu bestrafen, dass sie sich zu weit von ihrem Ausgangspunkt entfernt, gemessen mit der KL-Divergenz aus Kapitel 4:

objective=E[r(y)]βDKL(πθπref)\text{objective} = \mathbb{E}\big[r(y)\big] - \beta \, D_{\mathrm{KL}}\big(\pi_\theta \,\|\, \pi_{\text{ref}}\big)

Die Referenz πref\pi_{\text{ref}} ist das SFT-Modell — die Policy vor der Reinforcement-Stufe. Die Behauptung lautet, dass dies verhindert, dass das Modell in degeneriertes Verhalten abwandert. Finden wir heraus, wie viel von dieser Behauptung einer Messung standhält. Dasselbe Setup, Sweep über β\beta:

β\betaRewardwahre QualitätLängeKL
031,6990,00012,4982,994
131,6970,00012,4972,993
528,3180,28510,7002,163
1512,8601,5422,5520,151
3010,4261,7191,3030,025
609,6321,7690,9080,005
nur das Referenzmodell9,1621,7910,6870

Lies die letzte Zeile gegen den Rest. Bei β=0\beta = 0 und β=1\beta = 1 bewirkt die Strafe gar nichts: Der Reward ist so viel mehr wert als die KL, dass der Optimizer die Strafe bezahlt und trotzdem hackt. Zwischen 5 und 15 kippt das Verhalten. Und bei β=60\beta = 60 ist die wahre Qualität wieder auf 1,769 gestiegen — was immer noch unter den 1,791 liegt, die das Referenzmodell hatte, bevor all das überhaupt begann.

Eine Einschränkung, bevor diese Zahl irgendwo zitiert wird: Die 1,791 der letzten Zeile und die 0,974, die die erste Tabelle der Start-Policy gibt, sind zwei verschiedene Messungen desselben Pre-RL-Modells, separat in den beiden Experimenten erhoben. Vergleiche Zeilen innerhalb einer Tabelle, nie tabellenübergreifend — die Schlussfolgerung jeder Tabelle steht auf ihren eigenen Zeilen, und keine hängt von der Baseline der anderen ab.

Die ehrliche Zusammenfassung ist also nicht „die KL-Strafe verhindert Reward Hacking“. Sie lautet:

Die KL-Strafe verhindert Reward Hacking nicht. Sie begrenzt, wie weit sich die Policy von der Referenz entfernen kann — und weil der Fehler Bewegung erfordert, hilft das. Aber sie ist eine Leine, keine Korrektur: Bei niedrigem β\beta reißt die Leine, und bei hohem β\beta bekommst du das Referenzmodell zurück und die ganze teure Stufe hat nichts gebracht.

Das nützliche Band ist schmal, seine Lage hängt vom Reward Model ab, und es gibt keine Möglichkeit, es zu finden, außer hinzuschauen. Deshalb muss das Referenzmodell gut sein — die KL ist ein Boden auf der Qualität der Referenz, keine Decke über dem Fehler — und es ist ein großer Teil davon, warum diese Stufe in der Praxis schwierig ist, nicht im Prinzip.

Der Algorithmus, der das im großen Maßstab möglich gemacht hat, ist Proximal Policy Optimization.3 In einem Absatz: Er schätzt den Advantage jeder Antwort, aktualisiert die Policy, um die Wahrscheinlichkeit von Antworten über der Baseline zu erhöhen, und clippt die Größe jedes einzelnen Updates, damit eine große Advantage-Schätzung die Policy nicht in einem Schritt zerstören kann. Auf Sprachmodelle angewendet4 bedeutet das, vier Modelle gleichzeitig im Spiel zu halten — die Policy, die Referenz, das Reward Model und einen Critic — während die Policy während des gesamten Trainings frische Samples erzeugt.

Es funktioniert, es brachte InstructGPT hervor und alles, was davon abstammt, und es ist wirklich schwierig: vier Modelle im Speicher, Sampling in der Trainingsschleife und ein verdienter Ruf für Instabilität. So zu tun, als könne man es in einem Blogpost implementieren, wäre unehrlich, also tut dieses Kapitel das nicht.

Was es für die meisten Zwecke ersetzt hat, entstand aus einer Beobachtung. Das oben KL-regularisierte Objective hat eine geschlossene optimale Policy, und dieser Ausdruck lässt sich invertieren: Der Reward kann in Begriffen der optimalen Policy und der Referenz geschrieben werden. Setzt man das zurück in den Bradley–Terry-Loss ein, verschwindet das Reward Model vollständig. Übrig bleibt ein supervised Loss auf Präferenzpaaren — kein Sampling, kein Critic, kein Reward Model, zwei Modelle im Speicher statt vier.

Das ist Direct Preference Optimization,5 und es sind zwei Zeilen:

dpo.pyPYTHON
def dpo_loss(pi_w, pi_l, ref_w, ref_l, beta=0.1):
    """pi_* and ref_* are summed log-probabilities of a full response."""
    logits = beta * ((pi_w - ref_w) - (pi_l - ref_l))   
    return -F.logsigmoid(logits)                        

Lies, was dort steht. Die Größe, die nach oben gedrückt wird, ist, wie viel mehr die Policy den Gewinner bevorzugt als die Referenz, minus wie viel mehr sie den Verlierer bevorzugt. Die Referenz ist keine nachträglich angeschraubte Strafe — sie steckt im Loss, weshalb DPO keinen separaten KL-Term braucht.

Die wichtigste Eigenschaft steckt im gradient. Werte den Loss und seinen gradient auf demselben Paar in fünf verschiedenen Zuständen der Policy aus:

Zustand der PolicyLossgradient-Betrag
bevorzugt den Gewinner bereits stark0,51300,0401
bevorzugt ihn bereits, schwach0,66850,0488
identisch mit der Referenz0,69310,0500
bevorzugt den Verlierer0,79810,0550
bevorzugt den Verlierer stark1,00550,0634

Der gradient wächst, je falscher die Policy liegt. Paare, die das Modell bereits beherrscht, tragen fast nichts bei; Paare, die es verkehrt herum bewertet, dominieren das Update. DPO gewichtet jedes Beispiel danach, wie falsch die Policy aktuell liegt, automatisch, ohne Scheduling — und diese Selbstgewichtung ist der Mechanismus, der die Arbeit erledigt, die bei PPO Advantage-Schätzung und Critic leisteten. (Der Loss in der dritten Zeile ist exakt ln2\ln 2, der Anker, gegen den jede Implementierung geprüft werden sollte: Eine Policy, die identisch mit ihrer Referenz ist, hat nichts gelernt und sollte bei ln2\ln 2 sitzen.)

GRPO6 nimmt einen anderen Weg aus demselben Problem. Es behält die Sampling-Schleife, entfernt aber den Critic: Statt ein Modell zu trainieren, das die Baseline vorhersagt, sampelt es eine Gruppe von Antworten auf denselben prompt und nutzt den mittleren Reward der Gruppe direkt als Baseline. Der Advantage einer Antwort ist, wie viel besser sie war als ihre Geschwister. Das tauscht ein ganzes Modell gegen eine größere Batch, und genau das machte Training mit verifizierbaren Rewards — das Thema von Kapitel 12 — praktikabel.

Details anzeigen

Drei weitere Teile der Post-Training-Landschaft, kurz.

RLAIF und Constitutional AI.7 Der Annotator muss kein Mensch sein. Gib einem Modell ein schriftliches Set von Prinzipien und bitte es, seine eigenen Ausgaben zu kritisieren und zu überarbeiten oder zwischen zwei Kandidaten zu wählen, und du hast einen Präferenzdatensatz, der mit Maschinengeschwindigkeit und zu Maschinenkosten entsteht. Der offensichtliche Einwand — das Modell korrigiert seine eigenen Hausaufgaben — ist real, und die ehrliche Antwort ist, dass es besser funktioniert, als es klingt, weil Bewerten leichter ist als Erzeugen; auf derselben Asymmetrie ruht dieses ganze Kapitel.

LIMA, und wie wenig Daten das braucht.8 Tausend sorgfältig kuratierte Demonstrationen erzeugten einen konkurrenzfähigen Assistenten. Die vorgeschlagene Erklärung lautet, dass Pretraining bereits das Wissen und das Format installiert hat und Post-Training nur auswählen muss, welche der vorhandenen Verhaltensweisen des Modells sichtbar werden. Wenn das stimmt, dominiert die Qualität der Post-Training-Daten ihre Menge — und das Verhalten des Feldes seither legt nahe, dass Menschen das glauben.

LoRA und QLoRA.910 fine-tuning jedes Gewichts eines großen Modells erfordert Speicher für die Gewichte, ihre gradients und den Optimizer-Zustand — die sechzehn Bytes pro Parameter aus Kapitel 10, über die zwei Durchschnitte hinweg, die Kapitel 6 von Hand gebaut hat — in einem Maßstab, der einen Cluster braucht. LoRA friert die ursprünglichen Gewichte ein und trainiert ein niedrig-rangiges Matrizenpaar daneben, wodurch die trainierbaren Parameter um Größenordnungen sinken; QLoRA quantisiert zusätzlich die eingefrorene Basis auf 4 Bit. Beide werden hier als Technik behandelt. Ob fine-tuning überhaupt das Richtige ist, wofür man Geld ausgeben sollte, ist eine andere Frage, und es ist die von Kapitel 20.

Die Alignment-Steuer, und die Frage, die niemand beantwortet hat

Link zum Abschnitt: Die Alignment-Steuer, und die Frage, die niemand beantwortet hat

Zwei Dinge solltest du mitnehmen.

Das erste ist, dass diese Stufe Kosten hat, und sie zeigen sich als Fähigkeit. Modelle werden bei manchen Benchmark-Aufgaben nach Alignment-Training oft messbar schlechter — die Alignment-Steuer —, weil sich das Objective geändert hat: Eine Antwort, die sicher, abgesichert und gut formatiert ist, ist nicht immer die Antwort, die Genauigkeit maximiert. Ein Teil dieser Lücke wurde wegengineert, und ein Teil ist ein echter Trade-off statt ein Bug, den man beheben muss.

Das zweite ist die Frage, die das Wort aligned versteckt. Aligned mit wem? Die Kette lautet: Ein Unternehmen schreibt Guidelines, Auftragnehmer interpretieren sie, ihre Vergleiche trainieren ein Reward Model, das Reward Model formt eine Policy, und die Policy beantwortet eine Frage von jemandem, der nichts davon gesehen hat. Jedes Glied ist eine Entscheidung bestimmter Menschen, und keiner der Algorithmen in diesem Kapitel hat eine Meinung dazu, ob diese Entscheidungen gut sind.

Das ist keine rhetorische Ausschmückung. Es ist der konkrete Grund, warum zwei Frontier-Modelle unterschiedliche Anfragen ablehnen, warum dasselbe Modell zwischen Versionen seine Meinung ändert und warum „aligned“ die Beschreibung eines Prozesses ist, nicht eine Eigenschaft eines Artefakts. Die Mathematik in diesem Kapitel ist geklärt. Dieser Teil nicht.

Post-Training hat dem Modell beigebracht zu antworten. Es hat ihm nicht beigebracht, vor dem Antworten zu denken, und beides unterscheidet sich auf eine Weise, die sich als trainierbar herausstellt.

Kapitel 12 handelt davon, was passiert, wenn du ein Modell zur Antwortzeit mehr Rechenaufwand auf eine schwierige Frage verwenden lässt statt zur Trainingszeit — Chain of Thought, Reinforcement Learning aus verifizierbaren Rewards und der Grund, warum ein Modell, das seinen Arbeitsweg zeigt, sich nicht bloß erklärt, sondern anders rechnet. Es begleicht auch die Schuld aus diesem Kapitel: GRPO existiert darin, erledigt die Aufgabe, die früher PPOs Critic hatte, mit Rewards, die überhaupt keinen Annotator brauchen, weil ein Beweis entweder geprüft wird oder nicht.


Die Generierungen oben stammen aus gpt2 und Qwen/Qwen2.5-0.5B-Instruct mit greedy decoding, sie reproduzieren sich also exakt. Kapitel 11 des Hugging Face LLM Course führt durch SFT und DPO mit trl und peft, wenn du das Echte statt der Simulation ausführen willst; Kapitel 7 von Sebastian Raschkas Build a Large Language Model (From Scratch) implementiert instruction fine-tuning Ende zu Ende ohne Library.

  1. Sutton, R. S. and Barto, A. G. Reinforcement Learning: An Introduction, 2nd edition (MIT Press, 2018). Die Auslagerung ist Absicht: Die Vokabularbox oben ist die kleinste brauchbare Teilmenge, und das echte Thema ist ein Buch.

  2. Bradley, R. A. and Terry, M. E. Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons. Biometrika 39(3/4), pp. 324–345 (1952). Das Pairwise-Comparison-Modell unter jedem heute verwendeten Reward Model.

  3. Schulman, J., Wolski, F., Dhariwal, P., Radford, A. and Klimov, O. Proximal Policy Optimization Algorithms. arXiv:1707.06347 (2017).

  4. Ouyang, L. et al. Training language models to follow instructions with human feedback. arXiv:2203.02155 (2022). InstructGPT — das Paper, das das Drei-Stufen-Rezept zum Standard machte. Vorausgegangen waren Christiano et al. (arXiv:1706.03741), die das Lernen eines Reward Models aus menschlichen Vergleichen einführten, und Stiennon et al. (arXiv:2009.01325), die es auf Zusammenfassung anwendeten.

  5. Rafailov, R., Sharma, A., Mitchell, E., Ermon, S., Manning, C. D. and Finn, C. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. arXiv:2305.18290 (2023). Die Herleitung, die das Reward Model entfernt, steht in Abschnitt 4 und lohnt sich vollständig zu lesen; sie ist kürzer als ihr Ruf.

  6. Shao, Z. et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300 (2024). Führt GRPO in Abschnitt 4.1 ein.

  7. Bai, Y. et al. Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073 (2022).

  8. Zhou, C. et al. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023).

  9. Hu, E. J. et al. LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685 (2021).

  10. Dettmers, T., Pagnoni, A., Holtzman, A. and Zettlemoyer, L. QLoRA: Efficient Finetuning of Quantized LLLMs. arXiv:2305.14314 (2023).

Bereit, LIA die Wahl zu überlassen?

Bau mit jedem KI-Modell an einem Ort — starte heute kostenlos.