Spring til indhold
11/30Kapitel 11 af 30

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:

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.

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:

TEXT
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 ud

Det 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:

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

Disse <|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?:

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]

Med templaten:

TEXT
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øse

SFT 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.

Du 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 ywy_w frem for yly_l, maksimer

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

hvilket i code er hele træningsløkken:

reward_model.pyPYTHON
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-biaslært vægt på nyttigtkorrektpå 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.

Hvilket 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 scoresand kvalitetproduceret længde
startende policy12.5880.9743.365
efter optimering31.6960.00012.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.

Standardforsvaret 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:

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)

Referencen πref\pi_{\text{ref}} 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 β\beta:

β\betarewardsand kvalitetlængdeKL
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
referencemodellen alene9.1621.7910.6870

Læs den sidste række op mod resten. Ved β=0\beta = 0 og β=1\beta = 1 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 β=60\beta = 60 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 β\beta knækker snoren, og ved høj β\beta 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.

Algoritmen, 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:

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)                        

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-tilstandlossgradient-størrelse
foretrækker allerede vinderen stærkt0.51300.0401
foretrækker den allerede, svagt0.66850.0488
identisk med referencen0.69310.0500
foretrækker taberen0.79810.0550
foretrækker taberen stærkt1.00550.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 ln2\ln 2, 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 ln2\ln 2.)

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 besvaret

To 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.

Post-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.


Genereringerne 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.

  1. 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.

  2. 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.

  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 — 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.

  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). 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.

  6. 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.

  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 LLMs. arXiv:2305.14314 (2023).


Skabt af

David Vicente Campos

Grundlægger af NeuraLIA Labs og medstifter af MyRealFood

Jeg er dataingeniør fra Universitetet i León. Jeg var med til at stifte MyRealFood, hvor jeg som CTO byggede den app, som millioner af mennesker har brugt til at spise bedre, og jeg grundlagde NeuraLIA Labs, hvor jeg bygger AI-produkter. Her skriver jeg om det, jeg har måttet forstå undervejs, sådan som jeg ville ønske, nogen havde forklaret det for mig.

Mere om forfatteren

Udgivet af NeuraLIA Labs.

Få nye indlæg i din indbakke

AI-nyheder, guides og produktopdateringer — en kort mail, når vi udgiver noget, der er værd at bruge tid på.

Vil du hellere have beskeder? De samme indlæg, her:WhatsApp-fællesskab (åbnes i en ny fane)Telegram-kanal (åbnes i en ny fane)

Kursusindeks

Abstract software decision engine with branching paths, probability nodes, and glowing gates.
jev11 min læsning

Jev AI-modellen er bygget til beslutninger, ikke prosa

TypeSafe AI’s Jev får opmærksomhed, fordi den behandler softwareintelligens som et sandsynlighedsproblem: vælg den rigtige gren, tilføj tillid, og undgå at betale en LLM for at skrive tekst, når kode har brug for en beslutning.

Abstract agent runtime sorting documents, memory blocks and pointer nodes inside a bounded context frame.
context-engineering11 min læsning

Kontekstteknik til langsigtede AI-agenter

Langvarige agenter fejler ikke kun, fordi vinduet er lille. De fejler, når filer, tool-outputs og forældet historik fortrænger den opgave, agenten skulle færdiggøre.

Klar til at lade LIA vælge for dig?

Byg med alle AI-modeller ét sted — kom gratis i gang i dag.