Ves al contingut
11/30Capítol 11 de 30

Del model base a l’assistent: SFT, RLHF, DPO i GRPO

Demana un haiku a un model base i rep la mateixa frase cinc cops. Després veu com un model de recompensa aprèn a preferir llargada.

En aquesta pàgina

Demana a GPT-2 — un model de llenguatge preentrenat competent — que escrigui un haiku sobre el mar:

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.

No està confós, i no ha fallat en la seva feina. Fa exactament allò per a què el va entrenar el capítol 10: donat un text, produir un text de continuació plausible. A internet, una línia com Escriu un haiku sobre el mar. sovint va seguida de prosa sobre el mar, i una frase que acaba d’aparèixer té una probabilitat inusualment alta de tornar a aparèixer. El model és un predictor del token següent magnífic i un assistent inútil.

Ara, la mateixa petició a un model construït de la mateixa manera — Qwen2.5, mig bilió de paràmetres, quatre vegades la mida del GPT-2 anterior i encara diminut segons qualsevol estàndard del 2026 — després de les fases d’entrenament de què tracta aquest capítol:

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

Quatre vegades més paràmetres no ensenyen a un model a deixar de parlar. La distància entre aquestes dues sortides no és l’escala, ni l’arquitectura, ni el volum de dades. És el post-training: una segona fase, ordres de magnitud més petita que el preentrenament, que agafa un predictor de text i el converteix en alguna cosa que respon.

Primera fase: ensenyar-li com és una resposta

Enllaç a la secció: Primera fase: ensenyar-li com és una resposta

El primer pas és el menys glamurós i és el que fa la major part de la feina. Recull exemples d’instruccions aparellades amb bones respostes, i continua entrenant-hi amb exactament la pèrdua del capítol 8 — predir el token següent — però només sobre la part de la resposta. Això és supervised fine-tuning, o SFT.

No s’està ensenyant res nou sobre el llenguatge. El que s’ensenya és un format: que un text d’aquesta forma va seguit d’un text d’aquella forma, i després s’atura. Mira de nou el fracàs del model base. Va respondre la pregunta a la primera frase i després no va poder parar, perquè res del seu entrenament no havia marcat mai el final d’una resposta. Aturar-se és un comportament après.

Per això també cal dir-li al model on són els límits, que és justament què és una plantilla de xat:

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

Aquests marcadors <|im_start|> i <|im_end|> són tokens reals del vocabulari, afegits abans del fine-tuning, i el model en va veure milions exactament en aquestes posicions. Són la manera com sap de qui és el torn i on acaba un torn.

Omet la plantilla i dona al model una pregunta nua, i li estàs donant una seqüència que no ha vist durant l’entrenament. Mesurat: mateix model, mateixa pregunta, mateixa decodificació greedy:

Sense la plantilla — la cadena crua 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]

Amb la plantilla:

TEXT
The capital of France is Paris.

La resposta és correcta en tots dos casos, però sense els marcadors el model deriva cap a escriure Python per comprovar-se a si mateix, perquè el prompt que ha rebut no s’assembla a res del que va veure en el fine-tuning. Aquesta és la causa més habitual de «el model s’ha tornat més ximple quan l’he cridat directament»: la plantilla no és decoració al voltant del model, és part del model, i una plantilla incorrecta és una degradació silenciosa sense cap error associat.

SFT té un sostre, i el sostre són les dades. Per fer fine-tuning amb una demostració cal que algú escrigui la resposta ideal; i per a la majoria de preguntes interessants, escriure una bona resposta és difícil, lent, car, i produeix exactament una resposta la qualitat de la qual no pots verificar.

El que la gent fa bé és comparar. Davant de dues respostes, un anotador pot dir amb fiabilitat quina és millor en pocs segons, sense ser capaç de produir-ne cap de les dues. Aquest és el fet sobre el qual es construeix tota la segona fase, i és la part que la majoria d’explicacions expliquen a l’inrevés:

Els humans no escriuen les respostes. Classifiquen parells.

Així que les dades són parells: un prompt, dues respostes, i quina ha guanyat. Això no es pot endollar a una pèrdua de token següent, perquè no hi ha cap seqüència objectiu. Necessita una altra màquina.

El model de recompensa, i què aprèn realment

Enllaç a la secció: El model de recompensa, i què aprèn realment

No pots demanar a un humà que puntuï cada resposta durant l’entrenament: són milions de judicis. Així que entrenes un model perquè imiti els humans: un model de recompensa que rep una resposta i retorna un escalar.

Entrenar-lo a partir de comparacions fa servir un resultat del 1952. El model Bradley–Terry2 diu que si dos elements tenen forces latents, la probabilitat que un superi l’altre és la funció logística de la seva diferència. Dona-li la volta i es converteix en una pèrdua: donat que un humà ha preferit ywy_w per sobre de yly_l, maximitza

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

que en codi és tot el bucle d’entrenament:

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

Fixa’t en què no veu mai el model: una puntuació absoluta. Només aprèn diferències, que és exactament el que contenen les dades.

Ara, la part que val la pena mesurar. Un model de recompensa aprèn allò que els anotadors recompensen, i els anotadors són persones. Aquí tens una simulació on la qualitat real d’una resposta depèn només de ser útil i correcta — la llargada no val res — però l’anotador simulat té una lleugera preferència per respostes més llargues quan tota la resta és propera, que és un biaix humà ben documentat. Entrena el model de recompensa amb 2000 comparacions i llegeix-ne els pesos:

biaix de llargada de l’anotadorpes après sobre útilsobre correctesobre llargada
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

El model de recompensa funciona perfectament. Ha après fidelment les preferències que se li han mostrat, inclosa la part d’aquestes preferències que no té res a veure amb la qualitat. Un model de recompensa no és una mesura del que és bo; és una mesura del que han triat els anotadors, i cada biaix del conjunt d’anotació és ara un coeficient en una funció diferenciable contra la qual un model molt més gran està a punt d’optimitzar.

I això ens porta a què passa quan l’optimitzes. Dona a la política un pressupost fix d’esforç per repartir entre les propietats de la resposta, amb una asimetria realista: ser útil i ser correcte és car, i ser més llarg és barat — només cal continuar escrivint.

Recompensa per unitat d’esforç, per al model entrenat més amunt: útil 8.26, correcte 8.31, llargada 31.70. La llargada paga gairebé quatre vegades millor que la correcció, no perquè el model de recompensa estigui trencat, sinó perquè és barata.

Optimitza contra aquesta recompensa i mira tots dos nombres:

puntuació del model de recompensaqualitat realllargada produïda
política inicial12.5880.9743.365
després de l’optimització31.6960.00012.497

La recompensa ha pujat per un factor de 2,5. La cosa que la recompensa havia de mesurar ha baixat a zero. La política ha descobert que podia puntuar extraordinàriament bé escrivint llargament i no dient res, i cap part del bucle d’entrenament no tenia cap manera d’adonar-se’n, perquè el model de recompensa és la definició de bo dins del bucle.

Això és reward hacking, i si mai t’has preguntat per què els models de xat són tan verbosos, aquesta taula és una gran part de la resposta.

La defensa estàndard és penalitzar la política per allunyar-se massa d’on va començar, mesurant la distància amb la divergència KL del capítol 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)

La referència πref\pi_{\text{ref}} és el model SFT: la política abans de la fase de reforç. L’afirmació és que això evita que el model derivi cap a un comportament degenerat. Vegem quina part d’aquesta afirmació sobreviu a la mesura. Mateixa configuració, escombrant β\beta:

β\betarecompensaqualitat realllargadaKL
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
només el model de referència9.1621.7910.6870

Llegeix l’última fila contra la resta. A β=0\beta = 0 i β=1\beta = 1 la penalització no fa absolutament res: la recompensa val tant més que la KL que l’optimitzador paga la multa i fa hacking igualment. Entre 5 i 15, el comportament oscil·la. I a β=60\beta = 60, la qualitat real ha tornat a pujar fins a 1.769 — que encara és per sota de l’1.791 que tenia el model de referència abans que res d’això comencés.

Un advertiment abans que aquest nombre es citi enlloc: l’1.791 de l’última fila i el 0.974 que la primera taula dona a la política inicial són dues mesures diferents del mateix model pre-RL, preses per separat pels dos experiments. Compara files dins d’una taula, mai entre taules: la conclusió de cada taula se sosté sobre les seves pròpies files, i cap no depèn de la línia base de l’altra.

Així que el resum honest no és «la penalització KL evita el reward hacking». És:

La penalització KL no evita el reward hacking. Limita fins on es pot moure la política respecte de la referència — i, com que el fracàs requereix moure’s, això ajuda. Però és una corretja, no un correctiu: amb β\beta baix, la corretja es trenca, i amb β\beta alt recuperes el model de referència i tota la fase cara no ha comprat res.

La franja útil és estreta, la seva ubicació depèn del model de recompensa, i no hi ha cap manera de trobar-la excepte mirant. Per això el model de referència ha de ser bo: la KL és un terra a la qualitat de la referència, no un sostre sobre el fracàs, i això és una gran part de per què aquesta fase és difícil a la pràctica més que no pas en principi.

L’algorisme que va fer que això funcionés a escala és Proximal Policy Optimization.3 En un paràgraf: estima l’avantatge de cada resposta, actualitza la política per augmentar la probabilitat de respostes per sobre de la línia base, i retalla la mida de qualsevol actualització individual perquè una estimació d’avantatge gran no pugui destruir la política en un sol pas. Aplicat a models de llenguatge4, això vol dir mantenir quatre models en joc alhora: la política, la referència, el model de recompensa i un crític, amb la política generant mostres noves durant tot l’entrenament.

Funciona, va produir InstructGPT i tot el que en descendeix, i és genuïnament difícil: quatre models en memòria, mostreig dins del bucle d’entrenament, i una reputació d’inestabilitat merescuda. Fingir que el pots implementar en una entrada de blog seria deshonest, així que aquest capítol no ho fa.

El que el va substituir per a la majoria de propòsits va venir d’adonar-se d’una cosa. L’objectiu regularitzat amb KL de més amunt té una política òptima en forma tancada, i aquesta expressió es pot invertir: la recompensa es pot escriure en termes de la política òptima i la referència. Substituir això de nou a la pèrdua Bradley–Terry fa que el model de recompensa desaparegui del tot. El que queda és una pèrdua supervisada sobre parells de preferència: sense mostreig, sense crític, sense model de recompensa, dos models en memòria en comptes de quatre.

Això és Direct Preference Optimization,5 i són dues línies:

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)                        

Llegeix què diu. La quantitat que s’empeny cap amunt és quant més prefereix la política el guanyador respecte de com ho feia la referència, menys quant més prefereix el perdedor. La referència no és una penalització afegida després: és dins de la pèrdua, i per això DPO no necessita un terme KL separat.

La propietat que més importa és al gradient. Avalua la pèrdua i el seu gradient sobre el mateix parell en cinc estats diferents de la política:

estat de la políticapèrduamagnitud del gradient
ja prefereix fortament el guanyador0.51300.0401
ja el prefereix, feblement0.66850.0488
idèntica a la referència0.69310.0500
prefereix el perdedor0.79810.0550
prefereix fortament el perdedor1.00550.0634

El gradient creix a mesura que la política s’equivoca més. Els parells que el model ja gestiona gairebé no aporten res; els parells que resol al revés dominen l’actualització. DPO pondera cada exemple segons com d’equivocada està la política en aquell moment, automàticament, sense cap programació, i aquesta autoponderació és el mecanisme que fa la feina que feien l’estimació d’avantatge i el crític de PPO. (La pèrdua de la tercera fila és exactament ln2\ln 2, que és l’ancoratge per comprovar qualsevol implementació: una política idèntica a la seva referència no ha après res i hauria d’estar a ln2\ln 2.)

GRPO6 pren una ruta diferent per sortir del mateix problema. Manté el bucle de mostreig però elimina el crític: en comptes d’entrenar un model per predir la línia base, mostra un grup de respostes al mateix prompt i fa servir directament la recompensa mitjana del grup com a línia base. L’avantatge d’una resposta és quant millor ha estat que les seves germanes. Això canvia tot un model per un batch més gran, i és el que va fer pràctic l’entrenament amb recompenses verificables — el tema del capítol 12.

Mostra els detalls

Tres peces més del panorama del post-training, breument.

RLAIF i Constitutional AI.7 L’anotador no ha de ser humà. Dona a un model un conjunt escrit de principis i demana-li que critiqui i revisi les seves pròpies sortides, o que triï entre dos candidats, i tens un conjunt de dades de preferències produït a velocitat i cost de màquina. L’objecció òbvia — que el model s’està corregint els propis deures — és real, i la resposta honesta és que funciona millor del que sembla perquè jutjar és més fàcil que generar, que és la mateixa asimetria sobre la qual descansa tot el capítol.

LIMA, i com de poques dades necessita això.8 Mil demostracions acuradament curades van produir un assistent competitiu. L’explicació proposada és que el preentrenament ja va instal·lar el coneixement i el format, i que el post-training només ha de seleccionar quins dels comportaments existents del model cal fer aflorar. Si això és cert, la qualitat de les dades de post-training domina la quantitat, i el comportament del camp des de llavors suggereix que la gent s’ho creu.

LoRA i QLoRA.910 Fer fine-tuning de cada pes d’un model gran requereix memòria per als pesos, els seus gradients i l’estat de l’optimitzador — els setze bytes per paràmetre del capítol 10, sobre les dues mitjanes que el capítol 6 va construir a mà — a una escala que necessita un clúster. LoRA congela els pesos originals i entrena un parell de matrius de rang baix al costat, reduint els paràmetres entrenables en ordres de magnitud; QLoRA, a més, quantitza la base congelada a 4 bits. Tots dos es cobreixen aquí com a tècnica. Si el fine-tuning és o no la cosa adequada on gastar diners és una altra pregunta, i és la del capítol 20.

L’impost d’alineament, i la pregunta que ningú no ha respost

Enllaç a la secció: L’impost d’alineament, i la pregunta que ningú no ha respost

Dues coses per endur-se.

La primera és que aquesta fase té un cost, i es manifesta com a capacitat. Sovint els models empitjoren de manera mesurable en algunes tasques de benchmark després de l’entrenament d’alineament — l’impost d’alineament — perquè l’objectiu ha canviat: una resposta segura, matisada i ben formatada no sempre és la resposta que maximitza la precisió. Una part d’aquesta bretxa s’ha resolt amb enginyeria, i una part és una compensació real més que no pas un bug per arreglar.

La segona és la pregunta que amaga la paraula alineat. Alineat amb qui? La cadena és: una empresa escriu directrius, contractistes les interpreten, les seves comparacions entrenen un model de recompensa, el model de recompensa dona forma a una política, i la política respon una pregunta d’algú que no ha vist res d’això. Cada baula és una decisió presa per persones concretes, i cap dels algorismes d’aquest capítol no té cap opinió sobre si aquestes decisions són bones.

Això no és una floritura retòrica. És la raó concreta per la qual dos models frontier rebutgen peticions diferents, per la qual el mateix model canvia d’opinió entre versions, i per la qual «alineat» és la descripció d’un procés més que no pas una propietat d’un artefacte. Les matemàtiques d’aquest capítol estan resoltes. Aquesta part no.

El post-training va ensenyar al model a respondre. No li va ensenyar a pensar abans de respondre, i totes dues coses són diferents d’una manera que resulta que es pot entrenar.

El capítol 12 tracta de què passa quan deixes que un model gasti més còmput en una pregunta difícil en el moment de respondre, en comptes de fer-ho durant l’entrenament: chain of thought, aprenentatge per reforç a partir de recompenses verificables, i la raó per la qual un model que mostra el seu raonament no només s’està explicant, sinó que està computant de manera diferent. També salda el deute d’aquest capítol: GRPO hi existeix, fent la feina que abans feia el crític de PPO, sobre recompenses que no necessiten cap anotador perquè una prova o bé es verifica o bé no.


Les generacions de més amunt venen de gpt2 i Qwen/Qwen2.5-0.5B-Instruct amb decodificació greedy, així que es reprodueixen exactament. El capítol 11 del Hugging Face LLM Course recorre SFT i DPO amb trl i peft si vols executar la cosa real en comptes de la simulació; el capítol 7 de Build a Large Language Model (From Scratch) de Sebastian Raschka implementa instruction fine-tuning de punta a punta sense cap biblioteca.

  1. Sutton, R. S. and Barto, A. G. Reinforcement Learning: An Introduction, 2nd edition (MIT Press, 2018). La delegació és deliberada: la caixa de vocabulari anterior és el subconjunt usable més petit, i el tema de debò és un llibre.

  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). El model de comparació per parells que hi ha sota cada model de recompensa en ús avui.

  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 — l’article que va convertir la recepta de tres fases en estàndard. Precedit per Christiano et al. (arXiv:1706.03741), que va introduir l’aprenentatge d’un model de recompensa a partir de comparacions humanes, i Stiennon et al. (arXiv:2009.01325), que el va aplicar a la resumització.

  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). La derivació que elimina el model de recompensa és a la secció 4 i val la pena llegir-la sencera; és més curta que la seva reputació.

  6. Shao, Z. et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300 (2024). Introdueix GRPO a la secció 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).

A punt per deixar que triï LIA?

Crea amb tots els models d'IA en un sol lloc — comença gratis avui mateix.