Fra base model til assistant: SFT, RLHF, DPO og GRPO
Bed en base model om en haiku, og den skriver samme sætning fem gange. Se så en reward model lære at foretrække længde over korrekthed.
På denne side
Bed GPT-2 — en kompetent pretrained language model — om at skrive en haiku om havet:
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.Den er ikke forvirret, og den har ikke fejlet i sit arbejde. Den gør præcis det, Kapitel 10 trænede den til: givet noget tekst, producér plausibel fortsættende tekst. På internettet bliver en linje som Skriv en haiku om havet. ofte efterfulgt af prosa om havet, og en sætning, der lige er dukket op, har usædvanligt høj sandsynlighed for at dukke op igen. Modellen er en fremragende next-token-forudsiger og en ubrugelig assistant.
Nu samme anmodning til en model bygget på samme måde — Qwen2.5, en halv milliard parametre, fire gange så stor som GPT-2 ovenfor og stadig lille efter enhver 2026-standard — efter de træningstrin, dette kapitel handler om:
Whispers of the ocean,
Silent depths where waves meet,
Mysteries in the vast blue.Fire gange så mange parametre lærer ikke en model at holde op med at tale. Afstanden mellem de to outputs er ikke scale, ikke architecture og ikke datamængde. Det er post-training: en anden fase, størrelsesordener mindre end pretraining, som tager en tekstforudsiger og gør den til noget, der svarer.
Trin et: at vise den, hvordan et svar ser ud
Link til afsnittet: Trin et: at vise den, hvordan et svar ser udDet første skridt er det mindst glamourøse og gør det meste af arbejdet. Indsaml eksempler på instruktioner parret med gode svar, og fortsæt træningen på dem med præcis samme loss som i Kapitel 8 — forudsig næste token — men kun på svardelen. Det er supervised fine-tuning, eller SFT.
Der bliver ikke lært noget nyt om sprog. Det, der læres, er et format: at tekst med denne form efterfølges af tekst med den form, og så stopper den. Se igen på base model'ens fejl. Den besvarede spørgsmålet i den første sætning og kunne derefter ikke stoppe, fordi intet i dens træning nogensinde markerede slutningen på et svar. At stoppe er en lært adfærd.
Det er også derfor, modellen skal have at vide, hvor grænserne går, hvilket er det, en chat template gør:
<|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|>assistantDisse <|im_start|>- og <|im_end|>-markører er rigtige tokens i vocabulary, tilføjet før fine-tuning, og modellen så millioner af dem i præcis disse positioner. Det er sådan, den ved, hvis tur det er, og hvor en tur slutter.
Spring templaten over og giv modellen et nøgent spørgsmål, og du giver den en sekvens, den ikke har set under træning. Målt, samme model, samme spørgsmål, samme greedy decoding:
Uden templaten — den rå streng What is the capital of France?:
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]Med templaten:
The capital of France is Paris.Svaret er rigtigt i begge tilfælde, men uden markørerne glider modellen over i at skrive Python for at tjekke sig selv, fordi den prompt, den modtog, ikke ligner noget, den blev fine-tuned på. Det er den mest almindelige årsag til “modellen blev dummere, da jeg kaldte den direkte”: templaten er ikke pynt omkring modellen, den er en del af modellen, og en forkert template er en tavs forringelse uden en tilknyttet fejl.
Trin to, og problemet det findes for at løse
Link til afsnittet: Trin to, og problemet det findes for at løseSFT har et loft, og loftet er dataene. For at fine-tune på en demonstration skal nogen skrive det ideelle svar — og for de fleste interessante spørgsmål er det svært, langsomt og dyrt at skrive et godt svar, og det producerer præcis ét svar, hvis kvalitet du ikke kan verificere.
Det mennesker er gode til, er sammenligning. Når en annotator får vist to svar, kan vedkommende på få sekunder pålideligt sige, hvilket der er bedre, uden at være i stand til selv at producere nogen af dem. Det er det faktum, hele det andet trin bygger på, og det er den del, de fleste forklaringer vender på hovedet:
Mennesker skriver ikke svarene. De rangerer par.
Så dataene er par — en prompt, to svar, og hvilket der vandt. Det kan ikke sættes ind i en next-token loss, fordi der ikke er nogen target sequence. Det kræver en anden maskine.
Reward model, og hvad den faktisk lærer
Link til afsnittet: Reward model, og hvad den faktisk lærerDu kan ikke bede et menneske om at score hvert svar under træning — det er millioner af vurderinger. Så du træner en model til at efterligne mennesker: en reward model, der tager et svar og returnerer en scalar.
At træne den fra sammenligninger bruger et resultat fra 1952. Bradley–Terry-modellen2 siger, at hvis to items har latente styrker, er sandsynligheden for, at den ene slår den anden, den logistiske funktion af deres forskel. Vend det om, og det bliver til en loss: givet at et menneske foretrak frem for , maksimer
hvilket i code er hele træningsløkken:
loss = -F.logsigmoid(reward(chosen) - reward(rejected)).mean() Bemærk, hvad modellen aldrig ser: en absolut score. Den lærer kun forskelle, hvilket er præcis det, dataene indeholder.
Nu den del, der er værd at måle. En reward model lærer, hvad annotatorerne belønnede, og annotatorer er mennesker. Her er en simulation, hvor den sande kvalitet af et svar kun afhænger af at være nyttigt og korrekt — længde er intet værd — men den simulerede annotator har en mild præference for længere svar, når alt andet er tæt på, hvilket er en veldokumenteret menneskelig bias. Træn reward model på 2000 sammenligninger og aflæs dens vægte:
| annotatorens længde-bias | lært vægt på nyttigt | på korrekt | på længde |
|---|---|---|---|
| 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 |
Reward model fungerer perfekt. Den har trofast lært de præferencer, den blev vist — inklusive den del af præferencerne, der intet har med kvalitet at gøre. En reward model er ikke et mål for godt; den er et mål for, hvad annotatorerne valgte, og hver bias i annotation-puljen er nu en koefficient i en differentiabel funktion, som en meget større model er ved at optimere mod.
Reward hacking, målt
Link til afsnittet: Reward hacking, måltHvilket bringer os til, hvad der sker, når du optimerer den. Giv policy et fast budget af indsats, der skal fordeles på tværs af svarets egenskaber, med en realistisk asymmetri: at være nyttig og korrekt er dyrt, og at være længere er billigt — du fortsætter bare med at skrive.
Reward per indsatsenhed for modellen trænet ovenfor: nyttigt 8,26, korrekt 8,31, længde 31,70. Længde betaler næsten fire gange bedre end korrekthed, ikke fordi reward model er defekt, men fordi det er billigt.
Optimér mod den reward og se begge tal:
| reward model'ens score | sand kvalitet | produceret længde | |
|---|---|---|---|
| startende policy | 12.588 | 0.974 | 3.365 |
| efter optimering | 31.696 | 0.000 | 12.497 |
Reward steg med en faktor 2,5. Det, reward skulle måle, gik til nul. Policy opdagede, at den kunne score enormt godt ved at skrive langt og sige ingenting, og ingen del af træningsløkken havde nogen måde at opdage det på, fordi reward model er definitionen af godt inde i løkken.
Det er reward hacking, og hvis du nogensinde har undret dig over, hvorfor chatmodeller er så ordrige, er denne tabel en stor del af svaret.
Hvad KL penalty faktisk giver
Link til afsnittet: Hvad KL penalty faktisk giverStandardforsvaret er at straffe policy for at bevæge sig for langt væk fra, hvor den startede, ved at måle afstanden med KL divergence fra Kapitel 4:
Referencen er SFT-modellen — policy før reinforcement-trinnet. Påstanden er, at dette forhindrer modellen i at vandre ud i degenereret adfærd. Lad os finde ud af, hvor meget af den påstand der overlever måling. Samme setup, med sweep over :
| reward | sand kvalitet | længde | KL | |
|---|---|---|---|---|
| 0 | 31.699 | 0.000 | 12.498 | 2.994 |
| 1 | 31.697 | 0.000 | 12.497 | 2.993 |
| 5 | 28.318 | 0.285 | 10.700 | 2.163 |
| 15 | 12.860 | 1.542 | 2.552 | 0.151 |
| 30 | 10.426 | 1.719 | 1.303 | 0.025 |
| 60 | 9.632 | 1.769 | 0.908 | 0.005 |
| referencemodellen alene | 9.162 | 1.791 | 0.687 | 0 |
Læs den sidste række op mod resten. Ved og gør straffen slet ingenting: reward er så meget mere værd end KL, at optimiser betaler bøden og hacker alligevel. Mellem 5 og 15 svinger adfærden. Og ved er den sande kvalitet klatret tilbage til 1,769 — hvilket stadig er under de 1,791, referencemodellen havde, før noget af dette startede.
Én advarsel før det tal citeres nogen steder: 1,791 i sidste række og 0,974, som den første tabel giver den startende policy, er to forskellige målinger af den samme pre-RL-model, taget separat af de to eksperimenter. Sammenlign rækker inden for en tabel, aldrig på tværs — konklusionen i hver tabel står på sine egne rækker, og ingen af dem afhænger af den andens baseline.
Så den ærlige opsummering er ikke “KL penalty forhindrer reward hacking”. Den er:
KL penalty forhindrer ikke reward hacking. Den begrænser, hvor langt policy kan bevæge sig fra referencen — og fordi fejlen kræver bevægelse, hjælper det. Men det er en snor, ikke en korrektion: ved lav knækker snoren, og ved høj får du referencemodellen tilbage, og hele det dyre trin købte ingenting.
Det nyttige interval er smalt, dets placering afhænger af reward model, og der er ingen måde at finde det på undtagen ved at kigge. Derfor skal referencemodellen være god — KL er et gulv ved referencens kvalitet, ikke et loft over fejlen — og det er en stor del af grunden til, at dette trin er svært i praksis snarere end i princippet.
PPO, og hvorfor DPO spiste den
Link til afsnittet: PPO, og hvorfor DPO spiste denAlgoritmen, der fik dette til at virke i stor skala, er Proximal Policy Optimization.3 I ét afsnit: den estimerer advantage for hvert svar, opdaterer policy for at øge sandsynligheden for svar over baseline og clipper størrelsen på hver enkelt opdatering, så et stort advantage-estimat ikke kan ødelægge policy i ét trin. Anvendt på language models4 betyder det at holde fire modeller i spil på samme tid — policy, referencen, reward model og en critic — med policy, der genererer friske samples gennem hele træningen.
Det virker, det producerede InstructGPT og alt, der nedstammer fra det, og det er oprigtigt svært: fire modeller i hukommelsen, sampling i træningsløkken og et fortjent ry for ustabilitet. At lade som om du kan implementere det i et blogindlæg, ville være uærligt, så det gør dette kapitel ikke.
Det, der erstattede det til de fleste formål, kom af at bemærke noget. Den KL-regulariserede objective ovenfor har en closed-form optimal policy, og det udtryk kan inverteres: reward kan skrives i termer af den optimale policy og referencen. Sæt det tilbage ind i Bradley–Terry loss, og reward model forsvinder helt. Tilbage er en supervised loss på præferencepar — ingen sampling, ingen critic, ingen reward model, to modeller i hukommelsen i stedet for fire.
Det er Direct Preference Optimization,5 og det er to linjer:
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) Læs, hvad den siger. Den størrelse, der skubbes op, er hvor meget mere policy foretrækker vinderen, end referencen gjorde, minus hvor meget mere den foretrækker taberen. Referencen er ikke en penalty, der boltes på bagefter — den er inde i loss, og derfor behøver DPO ikke et separat KL-led.
Den vigtigste egenskab er i gradient. Evaluér loss og dens gradient på det samme par i fem forskellige tilstande af policy:
| policy-tilstand | loss | gradient-størrelse |
|---|---|---|
| foretrækker allerede vinderen stærkt | 0.5130 | 0.0401 |
| foretrækker den allerede, svagt | 0.6685 | 0.0488 |
| identisk med referencen | 0.6931 | 0.0500 |
| foretrækker taberen | 0.7981 | 0.0550 |
| foretrækker taberen stærkt | 1.0055 | 0.0634 |
Gradient vokser, efterhånden som policy tager mere fejl. Par, som modellen allerede håndterer, bidrager næsten ingenting; par, den får vendt på hovedet, dominerer opdateringen. DPO vægter hvert eksempel efter, hvor forkert policy aktuelt er, automatisk, uden scheduling — og den selvvægtning er mekanismen, der gør det arbejde, som PPO's advantage-estimat og critic gjorde. (Loss i tredje række er præcis , hvilket er ankeret til at kontrollere enhver implementation imod: en policy, der er identisk med sin reference, har ikke lært noget og bør ligge ved .)
GRPO6 tager en anden vej ud af samme problem. Den beholder sampling-løkken, men sletter critic: i stedet for at træne en model til at forudsige baseline, sampler den en gruppe af svar på samme prompt og bruger gruppens gennemsnitlige reward direkte som baseline. Et svars advantage er, hvor meget bedre det var end dets søskende. Det bytter en hel model ud med en større batch, og det er det, der gjorde verifiable-reward-træning — emnet for Kapitel 12 — praktisk.
Vis detaljer
Tre ekstra brikker i post-training-landskabet, kort.
RLAIF og Constitutional AI.7 Annotatoren behøver ikke være menneske. Giv en model et skriftligt sæt principper og bed den kritisere og revidere sine egne outputs, eller vælge mellem to kandidater, og du har et præferencedatasæt produceret med maskinhastighed og maskinomkostning. Den oplagte indvending — modellen retter sine egne lektier — er reel, og det ærlige svar er, at det virker bedre, end det lyder, fordi det er lettere at bedømme end at generere, hvilket er den samme asymmetri, hele kapitlet hviler på.
LIMA, og hvor lidt data dette kræver.8 Tusind omhyggeligt kuraterede demonstrationer producerede en konkurrencedygtig assistant. Den foreslåede forklaring er, at pretraining allerede installerede viden og formatet, og post-training kun skal vælge, hvilken af modellens eksisterende adfærd der skal fremhæves. Hvis det er rigtigt, dominerer post-training-datakvalitet kvantitet — og feltets adfærd siden antyder, at folk tror på det.
LoRA og QLoRA.910 Fine-tuning af hver vægt i en stor model kræver hukommelse til vægtene, deres gradients og optimiser-tilstanden — Kapitel 10's seksten bytes per parameter, over de to gennemsnit Kapitel 6 byggede i hånden — i en skala, der kræver en cluster. LoRA fryser de oprindelige vægte og træner et low-rank par af matricer ved siden af dem, hvilket reducerer trainable parameters med størrelsesordener; QLoRA quantizer derudover den frosne base til 4 bits. Begge dækkes her som technique. Om fine-tuning overhovedet er det rigtige at bruge penge på, er et andet spørgsmål, og det er Kapitel 20's.
Alignment tax, og spørgsmålet ingen har besvaret
Link til afsnittet: Alignment tax, og spørgsmålet ingen har besvaretTo ting at tage med videre.
Den første er, at dette trin har en omkostning, og den viser sig som capability. Modeller bliver ofte målbart dårligere til nogle benchmark-opgaver efter alignment training — alignment tax — fordi objective ændrede sig: et svar, der er sikkert, forbeholdent og velformateret, er ikke altid det svar, der maksimerer accuracy. Noget af det gap er blevet engineered væk, og noget af det er et reelt trade-off snarere end en bug, der skal fixes.
Den anden er spørgsmålet, ordet aligned skjuler. Aligned med hvem? Kæden er: en virksomhed skriver guidelines, contractors fortolker dem, deres sammenligninger træner en reward model, reward model former en policy, og policy besvarer et spørgsmål fra en person, der ikke så noget af det. Hvert led er et valg truffet af bestemte mennesker, og ingen af algoritmerne i dette kapitel har nogen holdning til, om de valg er gode.
Det er ikke en retorisk flourish. Det er den konkrete grund til, at to frontier models afviser forskellige anmodninger, hvorfor den samme model skifter mening mellem versioner, og hvorfor “aligned” er en beskrivelse af en proces snarere end en egenskab ved en artefakt. Matematikken i dette kapitel er afklaret. Den del er ikke.
Hvor det går hen nu
Link til afsnittet: Hvor det går hen nuPost-training lærte modellen at svare. Det lærte den ikke at tænke før den svarer, og de to ting er forskellige på en måde, der viser sig at være trainable.
Kapitel 12 handler om, hvad der sker, når du lader en model bruge mere computation på et svært spørgsmål ved svartid i stedet for ved træningstid — chain of thought, reinforcement learning fra verifiable rewards og grunden til, at en model, der viser sit arbejde, ikke blot forklarer sig selv, men beregner anderledes. Det indfrier også gælden fra dette kapitel: GRPO findes i det, gør det arbejde, PPO's critic plejede at gøre, på rewards, der slet ikke kræver nogen annotator, fordi et bevis enten checker eller ikke gør.
Kilder og metode
Link til afsnittet: Kilder og metodeGenereringerne ovenfor kommer fra gpt2 og Qwen/Qwen2.5-0.5B-Instruct med greedy decoding, så de kan reproduceres præcis. Kapitel 11 i Hugging Face LLM Course gennemgår SFT og DPO med trl og peft, hvis du vil køre den ægte vare i stedet for simulationen; kapitel 7 i Sebastian Raschkas Build a Large Language Model (From Scratch) implementerer instruction fine-tuning end to end uden et library.
Referencer
Link til afsnittet: Referencer-
Sutton, R. S. and Barto, A. G. Reinforcement Learning: An Introduction, 2nd edition (MIT Press, 2018). Delegeringen er bevidst: ordforrådsboksen ovenfor er det mindste brugbare subset, og det egentlige emne er en bog. ↩
-
Bradley, R. A. and Terry, M. E. Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons. Biometrika 39(3/4), s. 324–345 (1952). Pairwise-comparison-modellen under enhver reward model, der bruges i dag. ↩
-
Schulman, J., Wolski, F., Dhariwal, P., Radford, A. and Klimov, O. Proximal Policy Optimization Algorithms. arXiv:1707.06347 (2017). ↩
-
Ouyang, L. et al. Training language models to follow instructions with human feedback. arXiv:2203.02155 (2022). InstructGPT — paperet, der gjorde tretrinsopskriften standard. Forudgået af Christiano et al. (arXiv:1706.03741), som introducerede læring af en reward model fra menneskelige sammenligninger, og Stiennon et al. (arXiv:2009.01325), som anvendte den på summarisation. ↩
-
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). Udledningen, der fjerner reward model, er i afsnit 4 og er værd at læse i sin helhed; den er kortere end sit rygte. ↩
-
Shao, Z. et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300 (2024). Introducerer GRPO i afsnit 4.1. ↩
-
Bai, Y. et al. Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073 (2022). ↩
-
Zhou, C. et al. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023). ↩
-
Hu, E. J. et al. LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685 (2021). ↩
-
Dettmers, T., Pagnoni, A., Holtzman, A. and Zettlemoyer, L. QLoRA: Efficient Finetuning of Quantized LLMs. arXiv:2305.14314 (2023). ↩