Kapitola o scaling zákonech tvrdí, že kvalita modelu roste s velikostí podle mocninného zákona. Zní to jako mystika z papírů, kterou musíš vzít na slovo, protože kdo má trénovat modely v pěti velikostech.
Ty. Trvá to půl hodiny a vejde se to do jednoho grafu. A na konci uděláme to nejlepší, co se s naměřenou křivkou dá udělat: předpovíme z ní bod, který jsme neměřili, a pak ho změříme.
Nastavení experimentu
Beru nejlepší variantu z vylepši si model, tedy pre-norm s RMSNormem,
feed-forward vrstvu a naučené pozice, a měním na ní jedinou věc: d_model. Všechno
ostatní zůstává stejné.
| Co se mění | Co zůstává |
|---|---|
d_model 12, 24, 48, 96 | 6 000 kroků, dávka 32, kontext 16 |
(FFN šířka je vždy 4 × d_model) | lr 3e-3, AdamW, tři seedy na velikost |
Dvě věci k metodice, obě se ukázaly jako podstatné:
Korpus je zmrazený. Model se trénuje na textu téhle učebnice, jenže učebnice se mění.
Když jsem měření opakoval po několika úpravách kapitol, změnila se velikost slovníku a s ní
i všechna čísla. Trénovací data jsou proto uložená v llm/_korpus.txt a všechna čísla níž
jsou z tohohle jednoho snapshotu. Bez toho nejdou výsledky porovnávat ani sám se sebou.
Data i počet kroků držím pevně. Ptám se tedy na konkrétní otázku: „co udělá víc parametrů při stejném tréninkovém rozpočtu?“ To není totéž, co se měří v Chinchille, a za chvíli uvidíme, proč na tom rozdílu tak záleží.
Naměřeno
| Model | Parametry | Train | Val | ± sd |
|---|---|---|---|---|
d_model 12 | 4 968 | 2,444 | 2,511 | ± 0,022 |
d_model 24 | 13 392 | 2,162 | 2,256 | ± 0,006 |
d_model 48 | 40 608 | 1,973 | 2,094 | ± 0,003 |
d_model 96 | 136 512 | 1,846 | 2,012 | ± 0,022 |
Model se sedmadvacetinásobkem parametrů má loss lepší o 0,50. Zajímavější je ale tvar té závislosti. Vynes si ji v logaritmickém měřítku na obou osách:
val loss
2.52 |...#
2.44 | .....
2.36 | .....
2.28 | #.....
2.21 | ......
2.14 | #....
2.07 | ..... #
2.01 | .....
+--------------------------------------------
5k 13k 41k 137k
parametry
Body leží blízko přímky. A přímka v log-log měřítku znamená mocninný zákon:
loss ≈ 4,32 · N^(−0,0661) R² = 0,94
Tohle je celý scaling zákon, naměřený u tebe na stole. Není v tom nic mystického: je to proložení přímky čtyřmi body v jiných souřadnicích. Všimni si zároveň, že poslední bod leží kousek nad přímkou, takže proložení není dokonalé. To bude za chvíli důležité.
Co ten exponent znamená prakticky
Exponent −0,066 je malé číslo a to je právě ta špatná zpráva. Převedeno do řeči:
| Chceš loss | Potřebuješ parametrů | Kolikrát víc než 136 512 |
|---|---|---|
| 2,00 | ~113 000 | 0,8× |
| 1,95 | ~165 000 | 1,2× |
| 1,90 | ~245 000 | 1,8× |
| 1,80 | ~555 000 | 4,1× |
Každé další zlepšení stojí násobky. Srazit loss z 1,9 na 1,8 znamená víc než dvojnásobný model. Odtud pramení dvě věci, které jsi možná bral jako fráze:
- Proč se rozdíly mezi špičkovými modely měří v setinách. Nejsou to setiny proto, že by na nich nezáleželo, ale proto, že za každou setinou stojí obrovský výpočet.
- Proč obor spálí miliardy na trénink. Zlepšení, které vypadá jako drobnost, je na křivce s exponentem 0,07 skok o řád v nákladech.
Test: předpovíme pátý bod
Tady se z proložené přímky stává skutečná předpověď. Fit ze čtyř bodů říká, že model
s d_model 192, tedy s 494 208 parametry, má vyjít na:
loss = 4,32 · 494208^(−0,0661) = 1,81
Natrénoval jsem ho. Tři seedy, stejný recept, stejný rozpočet. Výsledek:
| Předpověď | Skutečnost | |
|---|---|---|
d_model 192 (494 208 parametrů) | 1,81 | 2,163 ± 0,022 |
Předpověď selhala, a to o hodně. Model není lepší než ten předchozí, je výrazně horší:
d_model 96 dal 2,012, dvojnásobně velký model dal 2,163.
Než to prohlásíš za důkaz, že scaling zákony nefungují, podívej se na trénovací loss:
| Model | Train | Val | Mezera |
|---|---|---|---|
d_model 96 | 1,846 | 2,012 | 0,166 |
d_model 192 | 2,038 | 2,163 | 0,125 |
Velký model má horší loss i na trénovacích datech, tedy na datech, která přímo viděl. To vylučuje přetrénování: kdyby se přeučil, měl by train nízký a val vysoký. On se prostě nenaučil ani to, co měl přímo před sebou.
Diagnóza: chyba není v modelu, ale v receptu
Když se velký model nenaučí ani trénovací data, je podezřelý první na řadě learning rate.
Držel jsem ho pevně na 3e-3 pro všechny velikosti, jenže optimální krok se s velikostí
modelu posouvá. Tak to zkusíme, opět tři seedy na řádek:
d_model 192 | Train | Val | ± sd |
|---|---|---|---|
lr 3e-3 (původní) | 2,038 | 2,163 | ± 0,022 |
lr 2e-3 | 1,977 | 2,100 | ± 0,006 |
lr 1e-3 | 1,801 | 1,996 | ± 0,001 |
lr 5e-4 | 1,889 | 2,033 | ± 0,006 |
Rozdíl mezi původním a doladěným krokem je 0,167, tedy jedenáctinásobek rozptylu. Tady není co rozporovat: learning rate byl skutečně příčinou.
A aby to nebyla náhoda, kontrolní běh na opačné straně:
| Model | lr 3e-3 | lr 1e-3 |
|---|---|---|
d_model 96 | 2,012 | 2,153 |
d_model 192 | 2,163 | 1,996 |
Menší model chce vyšší learning rate, větší model nižší, a záměna je v obou směrech katastrofální. To není detail k doladění, to je hlavní proměnná. Odpovídá to i praxi: velké tréninky learning rate škálují s šířkou modelu, ne že by ho nechávaly konstantní.
Poučení, které si odnes: „zvětšit model“ neznamená změnit jedno číslo. Znamená to zvětšit model a znovu naladit recept. Kdo to neudělá, naměří si, že škálování nefunguje.
⚠️ Co z toho ale plyne a co ne. Velký model se s doladěným krokem dostal na 1,996, zatímco menší dal 2,012. Vypadá to, že ho konečně předehnal. Jenže rozdíl je 0,016 při sdruženém rozptylu 0,015, tedy přesně jeden rozptyl. To znamená, že se velký model dostal nanejvýš na úroveň toho menšího, ne nad ni. Tvrdit, že je lepší, by z těchhle dat nešlo. Píšu to sem schválně, protože v první verzi téhle kapitoly to tvrzení bylo, a padlo teprve při doměření na víc seedech.
A pořád to nesedí, protože chybí data
I s doladěným learning rate vyšel model na 1,996, zatímco předpověď byla 1,81. Zbývá tedy odchylka 0,18, kterou learning rate nevysvětlí. Kde je?
V datech a v počtu kroků, které jsem držel pevně. Model s půl milionem parametrů dostal přesně stejných 6 000 kroků nad stejnými 180 tisíci znaky jako model dvacetkrát menší. Zmrazený korpus má konečnou velikost a ten největší model už z něj vytáhl skoro všechno, co se z něj vytáhnout dá.
A přesně o tomhle je Chinchilla. Scaling zákon neříká „větší model je lepší“. Říká, jak
rozdělit výpočetní rozpočet mezi velikost modelu a množství natrénovaných tokenů, aby
z něj vypadla nejlepší loss. Když zvětšíš model a data necháš být, opouštíš křivku a čísla
přestanou platit. Ostatně už proložení na čtyřech bodech mělo R² = 0,94 a poslední bod
ležel nad přímkou, takže se křivka začínala ohýbat ještě dřív, než jsme narazili na pátý bod.
Co si z toho vzít
- Mocninný zákon je reálný a naměříš si ho za půl hodiny. Čtyři body, log-log měřítko,
proložená přímka,
R² = 0,94. - Exponent −0,066 je nemilosrdný. Každá další desetina loss stojí násobky výpočtu. Odtud plyne cena tréninku dnešních modelů i to, proč se výsledky srovnávají v setinách.
- Extrapolace je nebezpečná. Předpověď pro pátý bod byla mimo o 0,35, a to i když byl zákon proložený slušně. Extrapolace za rozsah, ve kterém jsi měřil, je hypotéza.
- Selhání předpovědi bylo v receptu, ne v zákoně. Learning rate se musí škálovat s modelem, jinak si naměříš, že větší je horší.
- Zbytek odchylky je datová mez. Držet data pevně a zvětšovat model znamená opustit křivku. To je celý obsah Chinchilly, jen naměřený na kuchyňském stole.
- Bez zmrazených dat a víc seedů bys nic z toho nerozlišil. Korpus se mezi měřeními měnil a jedno tvrzení v první verzi kapitoly bylo mimo právě proto.
Cvičení
- Fit říká
loss ≈ 4,32 · N^(−0,0661). Kolik parametrů by podle něj bylo potřeba naloss 1,0? Je to číslo důvěryhodné? - Kdyby ti někdo ukázal jen tabulku „
d_model96 → 2,012;d_model192 → 2,163“ a tvrdil, že škálování transformerů nefunguje, jak bys ten závěr vyvrátil dvěma měřeními? - Model
d_model96 má mezeru mezi train a val 0,166, model 192 slr 1e-3má train 1,801 a val 1,996, tedy 0,195. Co bys čekal, že se s tou mezerou stane ud_model384, a proč?
Náčrt řešení: rozbal, až si cvičení zkusíš sám
- Vyšlo by asi
4 × 10⁹parametrů, a to číslo je nesmysl. Z rovnice1,0 = 4,32 · N^(−0,0661)plyneN = (4,32)^(1/0,0661), tedy zhruba čtyři miliardy. Nedůvěryhodné je to ze tří důvodů: extrapoluješ pět řádů za rozsah, ve kterém jsi měřil; korpus má 180 tisíc znaků, takže dřív narazíš na datovou mez; a mocninné zákony mají v praxi nenulovou spodní mez danou entropií samotného jazyka, ke které se loss blíží a pod kterou se nedostane. Fit platí uvnitř měřeného rozsahu, ne mimo něj. - Zopakoval bych běh s několika learning rate a přidal kontrolu na menším modelu.
První měření ukáže, že velký model s
lr 1e-3dá 1,996, tedy dorovná menší model. Druhé ukáže, že menší model se stejnýmlr 1e-3se naopak zhorší na 2,153. Dohromady z toho plyne, že se neposunul zákon, ale optimální recept, a původní srovnání drželo pevně proměnnou, kterou držet nemělo. - Čekal bych, že poroste, ale při správně naladěném receptu ne dramaticky. Mezera roste s kapacitou modelu, protože si víc parametrů dovolí zapamatovat víc konkrétností z trénovacích dat. Při konstantním množství dat je to nevyhnutelné a nakonec se to zvrhne v přetrénování, kdy train dál klesá a val začne růst. Kdy přesně, se ale nedá odhadnout z tabulky; musí se to změřit, protože do toho mluví i learning rate, počet kroků a regularizace.
Shrnutí
- Mocninný zákon si naměříš na čtyřech modelech za půl hodiny: v log-log měřítku vyjde přímka.
- Naměřeno
loss ≈ 4,32 · N^(−0,0661)sR² = 0,94na rozsahu 5 tisíc až 137 tisíc parametrů. - Předpověď pro pátý, dvakrát větší model selhala o 0,35, protože learning rate zůstal stejný.
- Optimální learning rate klesá s velikostí modelu. Záměna je katastrofální v obou směrech a rozdíl je jedenáctinásobek rozptylu, tedy mimo jakoukoli pochybnost.
- S doladěným krokem velký model menší dorovná, ale neporazí: rozdíl je v šumu.
- Zbylá odchylka je datová mez: zvětšovat model při pevných datech znamená opustit křivku, což je přesně to, co říká Chinchilla.
Naměříš, že dvakrát větší model má horší loss než menší. Co zkontroluješ jako první?
Trénovací loss. Když je horší i ta, model se nepřeučil, ale vůbec se nenaučil, což ukazuje na chybu v receptu, ne v architektuře. Nejčastější příčina je learning rate držený konstantní přes všechny velikosti: větší modely potřebují menší krok. Teprve když je trénovací loss v pořádku a špatná je jen validační, jde o přetrénování.
Proč se scaling zákon nedá použít k extrapolaci daleko za změřený rozsah?
Protože je to proložení přímky naměřenými body, ne fyzikální zákon. Mimo měřený rozsah do hry vstupují meze, které se uvnitř neprojevily: konečné množství dat, nutnost přeladit trénovací recept a spodní mez daná entropií samotného jazyka, pod kterou se loss dostat nemůže. V experimentu v téhle kapitole selhala extrapolace hned u prvního bodu za rozsahem.
Co přesně říkají scaling zákony o vztahu velikosti modelu a množství dat?
Že se pro daný výpočetní rozpočet dá najít optimální rozdělení mezi velikost modelu a počet natrénovaných tokenů. Neříkají, že větší model je automaticky lepší: pokud zvětšíš model a data i počet kroků necháš beze změny, opouštíš křivku a naměříš horší výsledek, než zákon předpovídá. Přesně to se v téhle kapitole stalo.
