Ugrás a tartalomra
11/3011/30. fejezet

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:

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.

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:

TEXT
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álasz

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

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

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

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]

Template-tel:

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

Az 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 megtanul

Nem 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 ywy_w-t preferálta yly_l helyett, maximalizáld

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

ami kódban a teljes training loop:

reward_model.pyPYTHON
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ásatanult súly a hasznosságona helyességena 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.

Ezzel 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ámavalódi minőségelőállított hossz
kezdő policy12.5880.9743.365
optimalizálás után31.6960.00012.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.

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

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)

A referencia πref\pi_{\text{ref}} 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, β\beta végigsöprésével:

β\betarewardvalódi minőséghosszKL
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
csak a referenciamodell9.1621.7910.6870

Olvasd az utolsó sort a többivel együtt. β=0\beta = 0 és β=1\beta = 1 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. β=60\beta = 60-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 β\beta mellett a póráz elszakad, magas β\beta 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.

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

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)                        

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 állapotalossgradient nagysága
már erősen a nyertest preferálja0.51300.0401
már preferálja, gyengén0.66850.0488
azonos a referenciával0.69310.0500
a vesztest preferálja0.79810.0550
erősen a vesztest preferálja1.00550.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 ln2\ln 2, ez az ellenőrző horgony bármely implementációhoz: a referenciájával azonos policy semmit sem tanult, és ln2\ln 2-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álaszolt

Ké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.

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


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

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

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

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

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

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

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

  7. Bai, Y. és mtsai. Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073 (2022).

  8. Zhou, C. és mtsai. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023).

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

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


Készítette

David Vicente Campos

A NeuraLIA Labs alapítója és a MyRealFood társalapítója

Mérnökinformatikus vagyok, a Leóni Egyetemen végeztem. Társalapítottam a MyRealFoodot, ahol CTO-ként felépítettem azt az alkalmazást, amelyet emberek milliói használtak arra, hogy egészségesebben táplálkozzanak, és megalapítottam a NeuraLIA Labst, ahol AI-termékeket fejlesztek. Itt arról írok, amit menet közben meg kellett értenem, úgy, ahogy szerettem volna, hogy valaki elmagyarázza nekem.

Továbbiak a szerzőről

Közzétette a NeuraLIA Labs.

Kapj új bejegyzéseket a postaládádba

AI-hírek, útmutatók és termékfrissítések — rövid email, amikor valami igazán hasznosat publikálunk.

Kurzusindex

Abstract software decision engine with branching paths, probability nodes, and glowing gates.
jev11 perc olvasás

A Jev AI-modell döntésekre készült, nem prózára

A TypeSafe AI Jev modellje azért kap figyelmet, mert a szoftveres intelligenciát valószínűségi problémaként kezeli: válaszd ki a megfelelő ágat, rendelj hozzá bizalmi szintet, és ne fizess egy LLM-nek szövegírásért, amikor a kódnak döntésre van szüksége.

Abstract agent runtime sorting documents, memory blocks and pointer nodes inside a bounded context frame.
context-engineering11 perc olvasás

Kontextustervezés hosszú távú AI-ügynökökhöz

A hosszú ideig futó ügynökök nem csak azért vallanak kudarcot, mert kicsi az ablak. Akkor hibáznak, amikor a fájlok, eszközkimenetek és elavult előzmények kiszorítják azt a feladatot, amelyet az ügynöknek be kellett volna fejeznie.

Készen állsz, hogy a LIA válasszon helyetted?

Építs az összes AI-modellel egy helyen – kezdd el ma, ingyen.