07 · L'ofici d'entrenar
L'arquitectura d'una xarxa decideix què pot aprendre; la manera d'entrenar-la decideix què aprendrà de fet. Aquest capítol és el taller: com es fa cada passa muntanya avall, què la manté estable quan el model té milers de milions de pesos, com s'evita que s'aprengui les dades de memòria, i com es diagnostica un entrenament que va malament mirant una sola gràfica.
1. La roda de l'entrenament#
Entrenar sona a misteri, però és una roda que fa sempre la mateixa volta. Tot el que ve després d'aquesta secció són variacions sobre aquesta roda.
La roda de l'entrenament
1/6La pèrdua
Un lot d’exemples passa per la xarxa i es mesura quant s’ha equivocat. És el número que tot el bucle intenta fer baixar.
A cada volta passen cinc coses. Es mesura l'error d'un lot d'exemples, la pèrdua (recorda el capítol 4: quant de sorprès ha quedat el model). La passada enrere del capítol 6 reparteix la culpa entre tots els pesos. Si la correcció total és desmesurada, es retalla fins a un sostre. Es consulta el ritme d'aprenentatge (learning rate) que toca en aquell moment, que diu quina mida té la passa: és la mida del pas del capítol 2, que aquí anomenarem ritme perquè canvia al llarg de l'entrenament. I l'optimitzador fa la passa.
Un detall pràctic que tornarà a sortir: els models de llenguatge aprenen amb lots enormes, de l'ordre de milions de peces de text per pas, que no caben de cop a la memòria d'una sola màquina. El truc és acumular: es processa el lot a trossos, se suma la culpa de cada tros i només llavors es fa la passa. No és cap aproximació: el resultat és exactament el mateix que si el lot hagués cabut sencer. La mida real del lot és la mida de cada tros, multiplicada pel nombre de trossos i pel nombre de màquines que treballen alhora. I sovint ni tan sols és fixa: es comença amb lots més petits i es van fent créixer.
2. Maneres de baixar la muntanya#
Al capítol 2 has vist que entrenar és baixar una muntanya amb boira, palpant el pendent sota els peus. La pregunta d'aquesta secció és com fer cada passa, i resulta que hi ha maneres molt diferents.
Tres maneres de baixar la muntanya
- Descens simplea 0,00 del fons
- Amb inèrcia (momentum)a 0,04 del fons
- Adama 0,07 del fons
El descens simple fa exactament el que diu el pendent: una passa cap avall, proporcional a la inclinació. En una vall estreta, el pendent apunta sobretot cap a les parets, i la passa rebota d'una paret a l'altra. La inèrcia (momentum) converteix l'excursionista en una bola que rodola: recorda la direcció de les passes anteriors, de manera que els rebots d'una banda i l'altra s'anul·len i el moviment al llarg de la vall s'acumula. En una vall llarga, corbada i gairebé plana, això fa una diferència enorme. El preu és que una bola també es passa de llarg.
Adam fa una altra cosa: porta un registre de com de fort sol ser el pendent en cada direcció i ajusta la passa de cada pes per separat. Una direcció on el pendent sempre és fort rep passes prudents; una on gairebé no hi ha pendent, passes relativament més llargues. Per això a la figura baixa en diagonal: fa passes de mida semblant en totes dues direccions encara que una sigui vint vegades més costeruda. Adam també porta inèrcia. La seva variant AdamW, que aplica per separat el fre sobre els pesos (el que els encongeix una mica a cada pas, i que veuràs a la secció 4), és l'estàndard per entrenar models de llenguatge.
Aquesta memòria té un preu: per a cada pes, Adam recorda dues coses més. En un model gran, això és molta memòria.
El que costa recordar
Per això existeixen variants que recorden menys. Adafactor en guarda només un resum per files i per columnes de cada taula de pesos; l'Adam de 8 bits guarda el mateix amb menys precisió; Lion es conforma amb una sola memòria per pes. N'hi ha que miren més lluny i intenten tenir en compte la forma de la vall i no només el pendent, com Shampoo, i n'hi ha de molt recents, com Muon, que ja es fan servir en models grans per a les matrius de dins, deixant AdamW per a la resta, perquè aprenen el mateix amb menys dades. Els ajustos habituals d'AdamW en un preentrenament són coneguts: quant de lluny mira enrere la seva memòria, un fre sobre els pesos de 0,1 i un sostre de correcció d'1.
3. Posar-ho tot a la mateixa escala#
Imagina una cadena de cuiners on cadascun rep un plat, l'arregla i el passa. Si el primer hi posa sal a grapats, el segon ja no sap a què treballa, i cap al final ningú no hi pot fer res. Una xarxa de cent capes té el mateix problema: si els números d'una capa es fan gegants o minúsculs, les següents treballen a cegues.
Posar cada peça a la mateixa escala
La primera peça (ressaltada) és sempre la mateixa; només canvien les altres tres.
La normalització és posar cada plat a la mateixa escala abans de passar-lo: es mira la mida dels números que surten d'una capa i es divideixen perquè tinguin una mida estàndard. LayerNorm ho fa per a cada peça de text per separat: primer li resta la mitjana dels seus números (la centra) i després l'escala. RMSNorm fa només l'escalat, sense centrar, i resulta que funciona igual o millor, és un 10-15 % més ràpida i té menys paràmetres; és la que fan servir avui gairebé tots els models (Llama, Qwen, Gemma, DeepSeek, Mistral). BatchNorm, la més antiga, mira cada columna de números a través de tot el lot. Funciona molt bé amb imatges, però per al text és un problema: el resultat d'una peça depèn de quines altres li han tocat al lot, cosa que no té sentit quan generes text paraula a paraula.
On es posa, també importa. Recorda les dreceres del capítol 6, l'autopista que porta la culpa enrere sense afeblir-la. El Transformer original normalitzava després de sumar l'aportació de cada bloc a l'autopista (en diuen post-norm), de manera que la mateixa autopista passava per un reescalat a cada bloc. Amb poques capes anava bé; amb moltes, l'entrenament era inestable i calia començar molt a poc a poc. Des de GPT-2 es normalitza només el que entra a cada bloc (pre-norm), i l'autopista queda neta de punta a punta. Hi ha variants modernes, com normalitzar abans i després de cada bloc, o normalitzar per separat dues de les peces de l'atenció del capítol 11, per evitar que en models molt grans els números s'escapin.
4. Frens contra la memòria#
Al capítol 5 has vist que un model massa lliure s'aprèn els exemples de memòria. Els frens que ho eviten tenen un nom col·lectiu, regularització, i cadascun actua d'una manera diferent.
Frenar la memòria
El weight decay (el fre sobre els pesos de la secció 2) encongeix una mica tots els pesos a cada pas, com un moll que els estira cap a zero: el model només manté grans els pesos que de debò l'ajuden. Als models de llenguatge es fa servir sempre, amb un valor al voltant de 0,1. El dropout apaga a l'atzar una part de les neurones a cada pas d'entrenament, de manera que la xarxa no es pot refiar de cap neurona concreta; a l'hora de fer-la servir, s'encenen totes. Aturar a temps és el més senzill: es vigila la validació i es para quan deixa de millorar. N'hi ha més: dir-li que no estigui mai segur del tot de la resposta correcta (label smoothing), que sol millorar el calibratge del capítol 4 (que el model estigui tan segur com li toca); multiplicar les dades amb variacions, que en text vol dir paràfrasis i dades sintètiques; i penalitzar els números de sortida desmesurats (la z-loss), més per estabilitat que per evitar la memorització.
5. Quants decimals cal guardar#
Cada pes és un número, i un model en té milers de milions. Guardar-los amb molts decimals costa memòria i temps; guardar-ne pocs costa precisió. La pregunta és on es pot retallar sense que es noti.
Tants bits per a la mida, tants per a les xifres
Un ordinador guarda els números amb un format semblant a la notació científica: uns quants bits diuen la mida del número (fins on arriba) i uns altres, les seves xifres (com de precís és). El format clàssic, FP32, fa servir 32 bits. El que s'usa avui per entrenar, BF16, en fa servir 16, i la gràcia és com els reparteix: guarda la mateixa mida que FP32 i retalla les xifres. Un rival, FP16, feia el contrari: més xifres, però per sobre de 65.504 ja no sap què fer i el número es desborda.
Durant l'entrenament, perdre xifres és tolerable: una correcció arrodonida és una correcció una mica sorollosa. El que és fatal és sortir-se de mida, perquè un número desbordat contamina tots els pesos al pas següent. Per això BF16 va guanyar, i per això amb FP16 calia un truc incòmode: multiplicar la pèrdua per un número gran perquè les correccions petites no es perdessin, i desfer-ho després. La recepta habitual és la precisió mixta: els càlculs es fan en BF16, però es guarda una còpia dels pesos en FP32, on s'apliquen les correccions. Els entrenaments més avançats ja fan servir formats de 8 bits (FP8) per a bona part dels càlculs, cosa que va permetre a DeepSeek-V3 entrenar un model de primera línia per molt menys del que haurien costat 16 bits. I n'hi ha d'altres, de 8 i de 4 bits, pensats sobretot per executar models ja entrenats.
6. Llegir una corba com un metge#
Un metge no endevina una malaltia per un sol valor de temperatura, sinó per la forma de la gràfica: si puja de cop, si fa pics cada vespre, si baixa i torna a pujar. Amb l'entrenament passa el mateix, i la gràfica és la corba de pèrdua.
Llegir una corba com un metge
Símptoma. La pèrdua baixa de pressa i després s’estabilitza; la de validació la segueix. Diagnòstic. No toquis res.
Hi ha un petit catàleg de formes que val la pena conèixer. Una baixada suau i contínua vol dir que tot va bé. Un replà llarg al principi seguit d'una caiguda és normal en els models de llenguatge: sembla que primer aprenen la forma de la llengua i després el contingut. Un pic sobtat amb recuperació sol ser un lot de dades estrany o una inestabilitat passatgera; si es repeteix, cal mirar-ho. Un pic seguit de divergència, en canvi, vol dir que el ritme és massa alt o que algun número s'ha desbordat, i el remei és tornar a l'última còpia bona del model i reprendre amb un ritme menor o saltant aquelles dades. Que l'entrenament baixi mentre la validació puja és sobreajust. Que totes dues estiguin planes pot ser un ritme massa baix, un error de programa o unes dades massa fàcils o massa difícils. I uns esglaons regulars solen voler dir que l'ordre de les dades no estava ben barrejat.
Com en una analítica, cal mirar més d'un valor, perquè hi ha casos que la pèrdua sola no distingeix. Les mesures que tothom registra són la pèrdua d'entrenament i de validació, la mida de la correcció, la mida dels pesos, el ritme de cada moment, quant canvien els pesos a cada pas comparat amb la seva mida, quina part de la potència de càlcul de les màquines s'aprofita de debò, quantes peces de text es processen per segon i, sobretot, mostres de text generades pel model cada cert temps: llegir el que escriu és la millor eina de diagnòstic que hi ha.
7. Trobar la recepta sense arruïnar-te#
Un entrenament gran costa milions. No es poden provar deu ritmes diferents i quedar-se el millor. Cal arribar-hi d'una altra manera.
Provar en petit, entrenar en gran
Què val la pena ajustar primer, de més a menys important:
- 1ritme
- 2mida del lot
- 3planificació del ritme
- 4weight decay
- 5la resta
La primera regla és no començar de zero: es parteix de la recepta d'un model semblant que ja ha funcionat. La segona, saber què importa: el ritme d'aprenentatge és, de lluny, el que més; després la mida del lot, la manera com el ritme canvia al llarg del temps i el fre sobre els pesos. La tercera és fer les proves en petit. Amb la manera habitual de construir els models, el millor ritme d'un model petit no serveix per a un de gran, perquè es desplaça quan el model creix. La parametrització μP (es llegeix «mu-P») és una manera d'escalar els pesos pensada perquè el millor ritme no es mogui: es busca en un model de 40 milions de pesos i es copia al de 40.000 milions. I la quarta: abans de la corrida gran, s'entrenen entre cinc i vuit models petits, es mira com millora la pèrdua amb la mida i s'estira aquella tendència per predir la del gran. Són les lleis d'escala del capítol 16.
Què t'has d'endur#
La recepta, en una fitxa
- Entrenar és una roda de cinc passos (pèrdua, culpa, sostre, ritme i passa) que es repeteix centenars de milers de vegades; acumular la culpa de diversos trossos dona exactament el mateix que un lot sencer.
- Hi ha maneres diferents de fer la passa: la inèrcia es comporta com una bola que rodola, i Adam ajusta la passa de cada pes per separat; cap no guanya a tot arreu, i AdamW és l'estàndard per als models de llenguatge.
- La normalització posa els números de cada capa a la mateixa escala, i posar-la a l'entrada de cada bloc deixa neta l'autopista de les dreceres.
- Els frens contra la memorització (weight decay, dropout, aturar a temps) importen molt quan hi ha poques dades i poc quan cada text es veu una sola vegada.
- Per entrenar, la mida que pot tenir un número importa més que les seves xifres, i per això BF16 va guanyar.
- Una corba de pèrdua es llegeix per la forma, i sovint cal mirar-la al costat d'altres mesures per saber què passa.
Comprova que ho has entès#
0 de 3 resoltes
- L'entrenament ha de recórrer una vall llarga, corbada i gairebé plana. Per què hi ajuda la inèrcia (momentum)?
- Per què el preentrenament dels models de llenguatge gairebé no fa servir dropout?
- La pèrdua d'entrenament baixa sense parar i la de validació, després d'un mínim, comença a pujar. Què és el més assenyat?