Az alapmodelltől az asszisztensig: SFT, RLHF, DPO és GRPO
Egy alapmodell nem kérdésekre válaszol, csak folytatja a szöveget. A különbséget a láthatatlan post-training adja.
Ezen az oldalon
Kérd meg a GPT-2-t — egy tisztességesen pretrained nyelvi modellt —, hogy írjon haikut a tengerről:
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.Nem zavarodott össze, és nem bukott el a feladatában. Pontosan azt csinálja, amire a 10. fejezet megtanította: adott szöveg alapján valószínű folytatást állít elő. Az interneten egy olyan sor után, mint Írj haikut a tengerről., gyakran próza következik a tengerről, és egy éppen megjelent mondat szokatlanul nagy eséllyel jelenik meg újra. A modell kiváló következő-token prediktor, és haszontalan asszisztens.
Most ugyanaz a kérés egy ugyanígy épített modellhez — Qwen2.5, félmilliárd paraméter, négyszer akkora, mint a fenti GPT-2, és 2026-os mércével még így is apró — azok után a training szakaszok után, amelyekről ez a fejezet szól:
Whispers of the ocean,
Silent depths where waves meet,
Mysteries in the vast blue.A négyszeres paraméterszám nem tanítja meg a modellt arra, hogy abbahagyja a beszédet. A két kimenet közti szakadék nem méret, nem architektúra és nem adatmennyiség. Ez post-training: egy második fázis, nagyságrendekkel kisebb, mint a pretraining, amely egy szövegprediktorból olyasmit csinál, ami válaszol.
Első szakasz: megmutatni, hogyan néz ki egy válasz
Link a szakaszhoz: Első szakasz: megmutatni, hogyan néz ki egy válaszAz első lépés a legkevésbé látványos, és ez végzi a munka nagy részét. Gyűjts példákat, ahol instrukciókhoz jó válaszok vannak párosítva, majd folytasd rajtuk a traininget pontosan a 8. fejezet veszteségével — a következő token előrejelzésével —, de csak a válaszrészre. Ez a supervised fine-tuning, vagy SFT.
Nem tanítunk semmi újat a nyelvről. Amit tanítunk, az egy formátum: hogy ilyen alakú szöveget olyan alakú szöveg követ, aztán megáll. Nézd meg újra az alapmodell hibáját. Az első mondatban megválaszolta a kérdést, aztán nem tudta abbahagyni, mert a trainingje során semmi nem jelölte egy válasz végét. A megállás tanult viselkedés.
Ezért kell azt is megmondani a modellnek, hol vannak a határok; erre való a chat template:
<|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|>assistantEzek a <|im_start|> és <|im_end|> jelölők valódi tokenek a szókészletben, amelyeket a fine-tuning előtt adtak hozzá, és a modell milliószor látta őket pontosan ezekben a pozíciókban. Ebből tudja, ki következik, és hol ér véget egy kör.
Hagyd ki a template-et, adj a modellnek egy csupasz kérdést, és olyan sorozatot adsz neki, amelyet training közben nem látott. Mérve, ugyanaz a modell, ugyanaz a kérdés, ugyanaz a greedy decoding:
Template nélkül — a nyers string 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]Template-tel:
The capital of France is Paris.A válasz mindkét esetben helyes, de jelölők nélkül a modell elkezd Python-kódot írni, hogy ellenőrizze magát, mert a kapott prompt semmire sem hasonlít abból, amin fine-tuningolták. Ez a leggyakoribb oka annak, hogy „a modell butább lett, amikor közvetlenül hívtam meg”: a template nem díszítés a modell körül, hanem a modell része, és a rossz template csendes minőségromlást okoz, hibaüzenet nélkül.
Második szakasz, és a probléma, amelyet megold
Link a szakaszhoz: Második szakasz, és a probléma, amelyet megoldAz SFT-nek van plafonja, és ez a plafon az adat. Ahhoz, hogy egy demonstráción fine-tuningolj, valakinek meg kell írnia az ideális választ — a legtöbb érdekes kérdésnél pedig jó választ írni nehéz, lassú, drága, és pontosan egyetlen olyan választ eredményez, amelynek a minőségét nem tudod ellenőrizni.
Amiben az emberek jók, az az összehasonlítás. Ha két választ látnak, az annotátor néhány másodperc alatt megbízhatóan meg tudja mondani, melyik a jobb, anélkül hogy bármelyiket is képes lenne előállítani. Erre a tényre épül az egész második szakasz, és ezt fordítja meg a legtöbb magyarázat:
Az emberek nem válaszokat írnak. Párokat rangsorolnak.
Az adat tehát párokból áll — egy prompt, két válasz, és hogy melyik nyert. Ezt nem lehet next-token lossba bedugni, mert nincs cél-sorozat. Más gépre van szükség.
A reward model, és amit valójában megtanul
Link a szakaszhoz: A reward model, és amit valójában megtanulNem kérhetsz meg embert, hogy minden választ pontozzon training közben — az milliónyi ítélet lenne. Ezért modellt tanítasz arra, hogy utánozza az embereket: egy reward modelt, amely kap egy választ, és visszaad egy skalárt.
Az összehasonlításokból való training egy 1952-es eredményt használ. A Bradley–Terry modell2 azt mondja ki, hogy ha két elemnek rejtett erőssége van, annak valószínűsége, hogy az egyik legyőzi a másikat, az erősségkülönbségük logisztikus függvénye. Fordítsd ezt meg, és veszteség lesz belőle: ha egy ember -t preferálta helyett, maximalizáld
ami kódban a teljes training loop:
loss = -F.logsigmoid(reward(chosen) - reward(rejected)).mean() Figyeld meg, mit nem lát soha a modell: abszolút pontszámot. Mindig csak különbségeket tanul, pontosan azt, amit az adat tartalmaz.
Most jön a mérésre érdemes rész. A reward model azt tanulja meg, amit az annotátorok jutalmaztak, az annotátorok pedig emberek. Itt egy szimuláció, ahol egy válasz valódi minősége kizárólag attól függ, hasznos-e és helyes-e — a hossz semmit sem ér —, de a szimulált annotátor enyhén preferálja a hosszabb válaszokat, amikor minden más közel azonos; ez jól dokumentált emberi torzítás. Tanítsd a reward modelt 2000 összehasonlításon, és olvasd le a súlyait:
| annotátor hossztorzítása | tanult súly a hasznosságon | a helyességen | a hosszon |
|---|---|---|---|
| 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 |
A reward model tökéletesen működik. Hűen megtanulta a neki mutatott preferenciákat — beleértve azoknak azt a részét is, amelynek semmi köze a minőséghez. A reward model nem a jó mércéje; azt méri, mit választottak az annotátorok, és az annotátori kör minden torzítása most már egy differenciálható függvény együtthatója, amely ellen egy sokkal nagyobb modell optimalizálni fog.
Reward hacking, mérve
Link a szakaszhoz: Reward hacking, mérveEzzel el is jutunk oda, mi történik, amikor optimalizálsz rá. Adj a policynek rögzített erőfeszítés-keretet, amelyet a válasz tulajdonságai között költhet el, reális aszimmetriával: hasznosnak és helyesnek lenni drága, hosszabbnak lenni olcsó — csak tovább kell írni.
Reward egységnyi erőfeszítésre a fenti modellen: hasznos 8,26, helyes 8,31, hossz 31,70. A hossz majdnem négyszer jobban fizet, mint a helyesség, nem azért, mert a reward model elromlott, hanem mert olcsó.
Optimalizálj erre a rewardra, és figyeld mindkét számot:
| reward model pontszáma | valódi minőség | előállított hossz | |
|---|---|---|---|
| kezdő policy | 12.588 | 0.974 | 3.365 |
| optimalizálás után | 31.696 | 0.000 | 12.497 |
A reward 2,5-szeresére nőtt. Az, amit a rewardnak mérnie kellett volna, nullára esett. A policy felfedezte, hogy óriási pontszámot érhet el azzal, ha hosszan ír és semmit sem mond, és a training loop egyetlen része sem tudta ezt észrevenni, mert a loopon belül a reward model a jó definíciója.
Ez a reward hacking, és ha valaha eltűnődtél, miért olyan bőbeszédűek a chatmodellek, ez a táblázat a válasz nagy része.
Mit vesz valójában a KL-büntetés
Link a szakaszhoz: Mit vesz valójában a KL-büntetésA standard védekezés az, hogy büntetjük a policyt, ha túl messzire mozdul attól, ahonnan indult; a távolságot a 4. fejezetből ismert KL-divergenciával mérjük:
A referencia az SFT modell — a policy a reinforcement szakasz előtt. Az állítás az, hogy ez megakadályozza, hogy a modell degenerált viselkedésbe kóboroljon. Nézzük meg, mennyi marad ebből az állításból mérés után. Ugyanaz a setup, végigsöprésével:
| reward | valódi minőség | hossz | 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 |
| csak a referenciamodell | 9.162 | 1.791 | 0.687 | 0 |
Olvasd az utolsó sort a többivel együtt. és mellett a büntetés egyáltalán semmit nem ér: a reward annyival többet ér, mint a KL, hogy az optimalizáló kifizeti a bírságot, és ugyanúgy hackel. 5 és 15 között a viselkedés átbillen. -nél pedig a valódi minőség visszamászott 1,769-re — ami még mindig alacsonyabb, mint az 1,791, amelyet a referenciamodell tudott, mielőtt mindez elkezdődött.
Egy óvatossági megjegyzés, mielőtt ezt a számot bárhol idéznék: az utolsó sor 1,791-e és az első táblázatban a kezdő policy 0,974-e ugyanannak a pre-RL modellnek két külön mérése, amelyet a két kísérlet külön végzett. Sorokat táblázaton belül hasonlíts össze, soha ne táblázatok között — mindkét táblázat következtetése a saját sorain áll, és egyik sem függ a másik baseline-jától.
Az őszinte összefoglaló tehát nem az, hogy „a KL-büntetés megakadályozza a reward hackinget”. Hanem ez:
A KL-büntetés nem akadályozza meg a reward hackinget. Azt korlátozza, mennyire mozdulhat el a policy a referenciától — és mivel a kudarchoz mozgás kell, ez segít. De ez póráz, nem korrekció: alacsony mellett a póráz elszakad, magas mellett pedig visszakapod a referenciamodellt, és az egész drága szakasz semmit sem vett.
A hasznos sáv szűk, a helye a reward modeltől függ, és nincs mód megtalálni, csak megnézéssel. Ezért kell, hogy a referenciamodell jó legyen — a KL a referencia minőségének padlója, nem a kudarc plafonja —, és ez nagy része annak, miért nehéz ez a szakasz a gyakorlatban, nem pedig elvben.
PPO, és miért ette meg a DPO
Link a szakaszhoz: PPO, és miért ette meg a DPOAz algoritmus, amely ezt nagy léptékben működőképessé tette, a Proximal Policy Optimization.3 Egy bekezdésben: megbecsüli az egyes válaszok advantage-ét, frissíti a policyt, hogy növelje az above-baseline válaszok valószínűségét, és levágja bármely egyetlen frissítés méretét, hogy egy nagy advantage-becslés ne tudja egy lépésben tönkretenni a policyt. Nyelvi modellekre alkalmazva4 ez azt jelenti, hogy egyszerre négy modellt kell játékban tartani — a policyt, a referenciát, a reward modelt és egy criticet —, miközben a policy a training teljes ideje alatt friss mintákat generál.
Működik, létrehozta az InstructGPT-t és mindent, ami abból származik, és tényleg nehéz: négy modell a memóriában, mintavétel a training loopban, és megérdemelt instabilitási hírnév. Tisztességtelen lenne úgy tenni, mintha egy blogposztban implementálni lehetne, ezért ez a fejezet nem teszi meg.
Ami a legtöbb célra leváltotta, egy megfigyelésből jött. A fenti KL-regularizált objektívnek zárt alakú optimális policyje van, és ez a kifejezés invertálható: a reward felírható az optimális policy és a referencia függvényében. Ezt visszahelyettesítve a Bradley–Terry lossba a reward model teljesen eltűnik. Ami marad, az supervised loss preferenciapárokon — nincs mintavétel, nincs critic, nincs reward model, négy helyett két modell a memóriában.
Ez a Direct Preference Optimization,5 és két sor:
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) Olvasd el, mit mond. A felfelé tolt mennyiség az, hogy a policy mennyivel jobban preferálja a nyertest, mint a referencia, mínusz az, hogy mennyivel jobban preferálja a vesztest. A referencia nem utólag rácsavart büntetés — benne van a lossban, ezért a DPO-nak nincs szüksége külön KL tagra.
A legfontosabb tulajdonság a gradientben van. Értékeld ki a losst és a gradientjét ugyanarra a párra a policy öt különböző állapotában:
| a policy állapota | loss | gradient nagysága |
|---|---|---|
| már erősen a nyertest preferálja | 0.5130 | 0.0401 |
| már preferálja, gyengén | 0.6685 | 0.0488 |
| azonos a referenciával | 0.6931 | 0.0500 |
| a vesztest preferálja | 0.7981 | 0.0550 |
| erősen a vesztest preferálja | 1.0055 | 0.0634 |
A gradient nő, ahogy a policy egyre inkább rosszul kezeli a párt. Azok a párok, amelyeket a modell már kezelni tud, szinte semmit sem adnak hozzá; azok a párok dominálják a frissítést, amelyeket fordítva kap el. A DPO minden példát azzal súlyoz, mennyire téved éppen a policy, automatikusan, ütemezés nélkül — és ez az önsúlyozás végzi azt a munkát, amelyet a PPO advantage-becslése és criticje végzett. (A harmadik sor lossértéke pontosan , ez az ellenőrző horgony bármely implementációhoz: a referenciájával azonos policy semmit sem tanult, és -nál kell ülnie.)
A GRPO6 más úton jut ki ugyanebből a problémából. Megtartja a mintavételi loopot, de törli a criticet: ahelyett, hogy egy modellt tanítana a baseline előrejelzésére, ugyanarra a promptra egy csoport választ mintavételez, és közvetlenül a csoport átlagos rewardját használja baseline-ként. Egy válasz advantage-e az, mennyivel volt jobb a testvéreinél. Ez egy egész modellt cserél nagyobb batchre, és ez tette praktikussá a verifiable-reward traininget — a 12. fejezet témáját.
Részletek megjelenítése
Még három darab a post-training tájképéből, röviden.
RLAIF és Constitutional AI.7 Az annotátornak nem kell embernek lennie. Adj egy modellnek írott alapelveket, kérd meg, hogy kritizálja és javítsa a saját kimeneteit, vagy válasszon két jelölt között, és máris gépi sebességgel és költséggel előállított preferencia-adatkészleted van. A nyilvánvaló ellenvetés — a modell a saját házi feladatát osztályozza — valós, és az őszinte válasz az, hogy jobban működik, mint amilyennek hangzik, mert ítélni könnyebb, mint generálni; ugyanarra az aszimmetriára épül, mint az egész fejezet.
LIMA, és hogy milyen kevés adat kell ehhez.8 Ezer gondosan válogatott demonstráció versenyképes asszisztenst eredményezett. A javasolt magyarázat az, hogy a pretraining már telepítette a tudást és a formátumot, a post-trainingnek pedig csak azt kell kiválasztania, a modell meglévő viselkedései közül melyik kerüljön felszínre. Ha ez igaz, a post-training adatok minősége uralja a mennyiséget — és a terület azóta látott viselkedése alapján úgy tűnik, sokan hisznek ebben.
LoRA és QLoRA.910 Egy nagy modell minden súlyának fine-tuningja memóriát igényel a súlyokhoz, a gradientjeikhez és az optimalizáló állapotához — a 10. fejezet paraméterenkénti tizenhat bájtját, a két átlagon felül, amelyet a 6. fejezet kézzel épített fel — olyan léptékben, amelyhez cluster kell. A LoRA befagyasztja az eredeti súlyokat, és egy alacsony rangú mátrixpárt tanít mellettük, nagyságrendekkel csökkentve a tanítható paraméterek számát; a QLoRA ezen felül 4 bitre kvantálja a befagyasztott alapot. Mindkettő itt technikaként szerepel. Az, hogy egyáltalán a fine-tuning-e a jó dolog, amire pénzt érdemes költeni, más kérdés, és a 20. fejezet témája.
Az alignment adó, és a kérdés, amelyre senki sem válaszolt
Link a szakaszhoz: Az alignment adó, és a kérdés, amelyre senki sem válaszoltKét dolgot érdemes továbbvinni.
Az első az, hogy ennek a szakasznak költsége van, és ez képességben jelenik meg. A modellek alignment training után gyakran mérhetően rosszabbak lesznek bizonyos benchmark feladatokon — ez az alignment adó —, mert megváltozott az objektív: a biztonságos, óvatosan fogalmazott és jól formázott válasz nem mindig az a válasz, amely maximalizálja a pontosságot. Ennek a résnek egy részét mérnöki munkával eltüntették, egy része pedig valódi trade-off, nem javítandó bug.
A második az a kérdés, amelyet az aligned szó elrejt. Kihez igazítva? A lánc így néz ki: egy cég irányelveket ír, alvállalkozók értelmezik őket, az összehasonlításaik reward modelt tanítanak, a reward model formál egy policyt, a policy pedig válaszol valakinek, aki ebből semmit sem látott. Minden láncszem konkrét emberek döntése, és a fejezet egyetlen algoritmusának sincs véleménye arról, hogy ezek a döntések jók-e.
Ez nem retorikai dísz. Ez a konkrét oka annak, hogy két frontier modell különböző kéréseket utasít vissza, hogy ugyanaz a modell verziók között meggondolja magát, és hogy az „aligned” inkább egy folyamat leírása, mint egy artefaktum tulajdonsága. A fejezet matematikája rendezett. Ez a rész nem.
Merre megyünk tovább
Link a szakaszhoz: Merre megyünk továbbA post-training megtanította a modellt válaszolni. Arra nem tanította meg, hogy gondolkodjon a válasz előtt, és a kettő olyan módon különbözik, amelyről kiderül, hogy tanítható.
A 12. fejezet arról szól, mi történik, amikor hagyod, hogy a modell egy nehéz kérdésre válaszadáskor több számítást költsön, nem pedig training időben — chain of thought, reinforcement learning verifiable rewardokból, és az ok, amiért a munkamenetét megmutató modell nem pusztán magyarázza magát, hanem másképp számol. Ezzel a fejezet adósságát is rendezi: a GRPO ott létezik, és azt a munkát végzi, amelyet korábban a PPO criticje végzett, olyan rewardokon, amelyekhez egyáltalán nem kell annotátor, mert egy bizonyítás vagy ellenőrizhető, vagy nem.
Források és módszer
Link a szakaszhoz: Források és módszerA fenti generálások gpt2 és Qwen/Qwen2.5-0.5B-Instruct használatával, greedy decodinggal készültek, ezért pontosan reprodukálhatók. A Hugging Face LLM Course 11. fejezete végigvezet az SFT-n és a DPO-n trl és peft használatával, ha a szimuláció helyett a valódi dolgot akarod futtatni; Sebastian Raschka Build a Large Language Model (From Scratch) című könyvének 7. fejezete pedig library nélkül implementálja végig az instruction fine-tuningot.
Hivatkozások
Link a szakaszhoz: Hivatkozások-
Sutton, R. S. és Barto, A. G. Reinforcement Learning: An Introduction, 2. kiadás (MIT Press, 2018). A delegálás szándékos: a fenti szókészletdoboz a legkisebb használható részhalmaz, a valódi téma pedig egy könyv. ↩
-
Bradley, R. A. és Terry, M. E. Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons. Biometrika 39(3/4), 324–345. o. (1952). A páros összehasonlítási modell, amely minden ma használatos reward model alatt ott van. ↩
-
Schulman, J., Wolski, F., Dhariwal, P., Radford, A. és Klimov, O. Proximal Policy Optimization Algorithms. arXiv:1707.06347 (2017). ↩
-
Ouyang, L. és mtsai. Training language models to follow instructions with human feedback. arXiv:2203.02155 (2022). InstructGPT — a tanulmány, amely standarddá tette a háromszakaszos receptet. Előtte Christiano és mtsai. (arXiv:1706.03741), amely bevezette a reward model tanulását emberi összehasonlításokból, valamint Stiennon és mtsai. (arXiv:2009.01325), amely ezt összefoglalásra alkalmazta. ↩
-
Rafailov, R., Sharma, A., Mitchell, E., Ermon, S., Manning, C. D. és Finn, C. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. arXiv:2305.18290 (2023). A reward modelt eltávolító levezetés a 4. szakaszban van, és érdemes teljes egészében elolvasni; rövidebb, mint a híre. ↩
-
Shao, Z. és mtsai. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300 (2024). A 4.1. szakaszban vezeti be a GRPO-t. ↩
-
Bai, Y. és mtsai. Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073 (2022). ↩
-
Zhou, C. és mtsai. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023). ↩
-
Hu, E. J. és mtsai. LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685 (2021). ↩
-
Dettmers, T., Pagnoni, A., Holtzman, A. és Zettlemoyer, L. QLoRA: Efficient Finetuning of Quantized LLMs. arXiv:2305.14314 (2023). ↩