Předtrénování a škálování: proč větší model a víc dat funguje
Předtrénování jako předpovídání dalšího tokenu, zákon škálování změřený na pěti velikostech vlastního transformeru, přeučení na malých datech, výpočet 6ND, pravidlo Chinchilly a meze, kde škálování přestává stačit.
Série Základy AI Díl 72 z 83
- Mapa umělé inteligence: co je co a jak to do sebe zapadá
- Stručná historie umělé inteligence: od Turinga po jazykové modely
- Data, model, trénink, inference: základní pojmy na jednom příkladu
- Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relace: stavebnice, ze které se skládají definice v AI
- Funkce a zobrazení: proč je každý model v AI funkce
- Logika a důkazy: pravidla, podle kterých se v AI uvažuje
- Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
- Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
- Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
- Gradientní sestup: jak se model učí
- Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
- Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
- Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
- Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
- Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
- Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
- Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
- Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
- Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
- Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
- Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
- Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
- Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
- Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
- Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
- Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
- Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
- Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
- Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
- Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
- Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
- Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
- Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
- Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
- Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
- Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
- Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
- Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
- Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
- Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
- Přeučení a regularizace: proč model, který zná data nazpaměť, selže
- Vyhodnocení modelu: křížová validace, F1 a křivka ROC
- Shlukování a snížení dimenze: k-means, PCA a t-SNE
- Klasifikace a regrese: dvě úlohy učení s učitelem
- Lineární regrese: nejmenší čtverce geometricky i maticově
- Polynomiální a nelineární regrese: jak přímku ohnout
- Logistická regrese: sigmoida, šance a křížová entropie
- Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
- Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
- Ztrátové funkce: co přesně model minimalizuje
- Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
- Ansámbly: náhodný les a gradient boosting
- SVM a jádrový trik: nejširší hranice a jak ji ohnout
- Signál a vzorkování: proč platí Nyquistův teorém
- Fourierova transformace: rozklad signálu na frekvence
- Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
- Zvuk a řeč: spektrogram, melová škála a MFCC
- Obraz jako signál: pixely, barvy, konvoluce a hrany
- Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
- Neuronová síť od nuly: zpětné šíření chyby krok za krokem
- Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
- Konvoluční sítě: jak síť poznává obrázky
- Rekurentní sítě: paměť pro posloupnosti a mizející gradient
- LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
- Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
- Embeddingy a word2vec: jak se slovo stane vektorem
- Mechanismus pozornosti: jak se model naučí, kam se dívat
- Transformery a velké jazykové modely: architektura krok za krokem
- Tokenizace: jak se text rozseká na kousky pro model
- Předtrénování a škálování: proč větší model a víc dat funguje
- Doladění a RLHF: jak se z doplňovače textu stane asistent
- Prompty, kontext a RAG: jak modelu dát správné informace
- Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
- Generativní adversariální sítě (GAN): padělatel proti detektivovi
- Difúzní modely: jak se z čistého šumu stane obrázek
- Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
- Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
- Policy gradient a PPO: učení přímo strategie
- Jak funguje AI agent: jazykový model ve smyčce s nástroji
- Programování s AI agenty: zadání, testy a kontrola
- Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat
Celá osnova série 83 z 83 témat hotovo
- Co je předtrénování a základní model.
- Jak ztráta klesá s velikostí modelu, daty a výpočtem.
- Proč 20 tokenů na parametr a proč se dnes malé modely učí mnohem déle.
Co se hodí znát předem: Transformery a velké jazykové modely: architektura krok za krokem, Tokenizace: jak se text rozseká na kousky pro model
Velké jazykové modely nevznikly díky jednomu chytrému triku. Architektura transformeru je od roku 2017 v jádru stejná — změnilo se hlavně to, jak velký model se učí, na kolika datech a kolik výpočtu se do toho vrazí. Překvapivé je, že zlepšení s velikostí je docela předvídatelné: chyba klesá podle jednoduchého mocninného zákona. V tomhle dílu si to vyzkoušíme v malém na vlastním transformeru, podíváme se, co z toho plyne pro skutečné modely, a hlavně kde ta pravidla přestávají platit.
Navazuje na díly Transformery a velké jazykové modely a Tokenizace.
1. Předtrénování: čti a hádej další token
Definice — předtrénování
Nechť
- V je konečná neprázdná množina tokenů (slovník, viz díl Tokenizace);
- x1, …, xT ∈ V je trénovací text (korpus) o T ≥ 1 tokenech;
- n ≥ 1 je délka kontextu;
- pθ je jazykový model s parametry θ ∈ ℝP: pro každý kontext c (posloupnost nejvýš n tokenů z V) je pθ(· | c) rozdělení pravděpodobnosti na V, tj. pθ(v | c) ≥ 0 pro všechna v ∈ V a ∑v ∈ V pθ(v | c) = 1.
Označme ct = (xmax(1, t−n), …, xt−1) kontext pozice t (pro t = 1 prázdný). Předtrénování je úloha najít parametry
θ* ∈ argminθ ∈ ℝP L(θ), kde L(θ) = −1/T ∑t=1T ln pθ(xt | ct)
(průměrná křížová entropie předpovědi dalšího tokenu; v praxi se minimum jen přibližně hledá gradientním sestupem). Model pθ* se nazývá základní model (base model).
Slovy: model se na obrovském množství textu učí předpovídat další token. Data nikdo neoznačuje — správnou odpovědí xt je vždy prostě další kousek textu. Je to první a nejdražší fáze učení jazykového modelu; základní model umí text pokračovat, ale ještě neumí odpovídat na otázky jako asistent — to přidává až doladění.
Představte si, že čtete miliony knih a u každého slova si nejdřív zkusíte tipnout, jaké přijde další. Abyste tipovali dobře, musíte se naučit pravopis, gramatiku, fakta o světě i to, jak lidé argumentují. Nikdo vám nemusí nic vysvětlovat — stačí otočit stránku a podívat se, jestli jste se trefili.
Ztrátu budeme měřit stejně jako v dílu o transformerech: průměrná křížová entropie na znak v natech, na validačním textu, který model při učení neviděl. Model, který hádá rovnoměrně mezi 36 znaky, má ztrátu 3,58; čím níž, tím lépe model text zná.
L(θ) = −1/T ∑t=1T ln pθ( xt | xt−n, …, xt−1 )
- xt−n, …, xt−1
- kontext: předchozích n tokenů (u nás 24 znaků). Model smí vidět jen minulost — při psaní textu budoucnost nezná
- xt
- token, který v textu skutečně následuje. Správná odpověď je přímo v textu, a proto jde učit na libovolném textu bez lidí, kteří by něco značkovali — to umožňuje učit na bilionech tokenů
- pθ
- pravděpodobnost, kterou model s parametry θ dal tomuto tokenu (softmax přes celý slovník). Je to jediné místo, kde ve vzorci vystupuje model
- ln
- logaritmus: pravděpodobnost celého textu je součin předpovědí, logaritmus z něj udělá součet. A −ln trestá sebevědomý omyl: za p = 0,5 je trest 0,69, za p = 0,01 už 4,6
- 1/T ∑
- průměr přes všech T pozic — ztráta pak nezávisí na délce textu a dá se srovnávat mezi modely i daty
- L(θ)
- to, co učení minimalizuje gradientním sestupem; jednotka je nat (přirozený logaritmus) na token, u nás na znak
Příklad — co znamená ztráta 0,552
Ztráta se dá převést na perplexitu eL: počet stejně pravděpodobných možností, mezi kterými by model musel hádat, aby byl stejně nejistý.
rovnoměrné hádání (pθ = 1/36 pro každý znak, průměr stejných čísel je to číslo samo): L = −ln 1/36 = ln 36 = 3,584, perplexita e3,584 = 36
největší náš model (d = 48): L = 0,552, perplexita e0,552 = 1,74
v bitech: 0,552/ln 2 = 0,552/0,693 = 0,80 bitu na znak
(Barvy podle vzorce pro L(θ) výše.)
Model tedy místo 36 možností váhá v průměru jen mezi necelými dvěma znaky. A kdyby text komprimoval podle svých předpovědí (aritmetickým kódováním), stačilo by mu asi 0,8 bitu na znak místo 8 bitů jednoho bajtu — předpovídání a komprese jsou dvě strany téže věci.
2. Větší model, menší chyba
Definice — zákon škálování
Nechť je pevně dána architektura modelu, trénovací data a postup učení a pro každé N ∈ ℕ, N ≥ 1, označme L(N) ztrátu na validačních datech modelu s N parametry po skončení učení (změřenou veličinu). Zákon škálování (scaling law) v počtu parametrů je empirické tvrzení, že existují konstanty E ≥ 0, A > 0 a α > 0 takové, že v měřeném rozsahu N platí
L(N) ≈ E + A · N−α.
Konstanty se získají proložením naměřených bodů. Stejně se definují zákony škálování v počtu trénovacích tokenů D nebo ve výpočtu C (veličina N se nahradí D, resp. C). Konstanta E = limN→∞ (E + AN−α) se nazývá neodstranitelná ztráta.
Slovy: ztráta klesá s velikostí modelu jako mocnina a blíží se konstantě E — nejistotě, kterou v textu nesníží ani dokonalý model (další slovo prostě není vždy jednoznačné). Je to popis naměřených dat, ne matematicky dokázaný zákon. Jared Kaplan a kol. (OpenAI, 2020) ukázali, že takový vztah sedí přes sedm řádů velikosti modelů.
Každé zdvojnásobení modelu ubere z chyby zhruba stejný podíl toho, co ještě zbývá. Na logaritmických osách je to přímka. A přímku lze protáhnout dál — proto si laboratoře mohou dopředu spočítat, jak dobrý bude model, který stojí stovky milionů dolarů, z pokusů na modelech stokrát menších.
L(N) = E + A · N−α
- N
- počet parametrů modelu — to, co měníme. Ostatní (data, počet kroků) držíme stejné, aby se vliv velikosti dal oddělit
- E
- neodstranitelná ztráta: hodnota, ke které se křivka blíží pro N → ∞. Bez ní by vzorec sliboval, že dost velký model dosáhne nulové ztráty, a to u textu, kde další slovo není jednoznačné, nejde
- A
- měřítko: jak velká je odstranitelná část chyby u modelu s jediným parametrem (N = 1). Samo o sobě nic neznamená, jen posouvá přímku nahoru a dolů
- −α
- exponent — jak rychle zvětšování pomáhá. Mocnina (ne třeba exponenciála) je tam proto, že každé zdvojnásobení má stejný účinek, ať začínáme od tisíce, nebo od miliardy parametrů; na logaritmických osách je pak ln(L − E) = ln A − α ln N přímka se sklonem −α
Pokus: znakový transformer z minulého dílu (dvě hlavy pozornosti, kontext 24 znaků) v pěti šířkách d = 4, 8, 16, 32, 48. Každý se učí stejných 1 500 kroků po 4 úsecích na stejném textu o 85 997 znacích. Nejmenší má 584 parametrů, největší 23 508.
| šířka d | parametrů | ztráta na validaci |
|---|---|---|
| 4 | 584 | 2,415 |
| 8 | 1 388 | 1,928 |
| 16 | 3 764 | 1,128 |
| 32 | 11 588 | 0,648 |
| 48 | 23 508 | 0,552 |
Ztráta klesá z 2,42 na 0,55. Proložení mocninou dává exponent α ≈ 0,45: zdvojnásobení parametrů sníží „odstranitelnou“ část chyby asi o 27 %. Kdybychom zákonu věřili, model se 100 000 parametry by měl ztrátu 0,30 a s milionem 0,15.
Věta — každé zdvojnásobení ubere stejný podíl
Nechť E ∈ ℝ, A > 0, α > 0 a L : (0, ∞) → ℝ je funkce L(N) = E + A · N−α. Pak pro každé N > 0 platí
L(2N) − E/L(N) − E = 2−α.
Důkaz. Jmenovatel je AN−α > 0, takže podíl je definovaný, a L(2N) − E/L(N) − E = A (2N)−α/A N−α = 2−α · N−α/N−α = 2−α. ∎
U nás 2−0,454 = 0,730: po zdvojnásobení zbude 73 % odstranitelné chyby, ubere se 27 %. S Kaplanovým α = 0,076 je 2−0,076 = 0,949 — zdvojnásobení ubere jen asi 5 %, a na snížení odstranitelné chyby na polovinu je potřeba model 2k ≈ 9 139krát větší, kde k = 1/0,076 ≈ 13,16 (pak (2k)−0,076 = 2−1).
Příklad — předpověď pro 100 000 parametrů
N−α = (105)−0,4536 = 10−2,268 = 0,00539
A · N−α = 44,92 · 0,00539 = 0,242
L = E + A · N−α = 0,060 + 0,242 = 0,302
(Barvy podle vzorce L(N) = E + A · N−α výše.)
Je to protažení přímky čtyřikrát za největší změřený model — přesně ten druh předpovědi, který laboratoře dělají, jen u nich je rozdíl v řádech velikosti a bodů je stovky.
def proloz(body): # body = [(N, L)] pro našich 5 modelů
nej = None
for E in mrizka(0, min(L for N, L in body), krok=0.005):
x = [ln(N) for N, L in body]
y = [ln(L - E) for N, L in body] # po odečtení E má být přímka
b, a = primka_nejmensich_ctvercu(x, y) # y ≈ a + b·x
chyba = sum((ln(L) - ln(E + exp(a) * N**b))**2 for N, L in body)
if nej is None or chyba < nej.chyba:
nej = Proložení(E=E, A=exp(a), alfa=-b, chyba=chyba)
return nej # u nás E = 0,06, A = 44,9, α = 0,454
Dvě poctivé poznámky. Pět bodů je málo a každý bod je jedno učení s jedním náhodným počátkem, takže exponent je jen hrubý odhad. A náš exponent je mnohem strmější než u skutečných modelů: Kaplan naměřil pro parametry asi 0,076. Na malém, pravidelném textu se model zlepšuje rychle; na celém internetu je co učit téměř nekonečně, a každé další zlepšení stojí mnohem víc. Exponent tedy není přírodní konstanta — závisí na datech, tokenizaci i na tom, v jakém rozsahu velikostí se měří.
3. Víc dat — a hlavně různorodých
Definice — epocha a přeučení na datech
Nechť trénovací data mají |data| ≥ 1 tokenů a učení během prvních k kroků zpracuje (i s opakováním) celkem Zk tokenů jako cílů předpovědi. Epocha je jeden průchod celými trénovacími daty; počet epoch po k krocích je
epoch(k) = Zk/|data|.
Dále mějme validační data — text, který se k učení nepoužívá — a označme Ltrén(k) a Lval(k) ztrátu (průměrnou křížovou entropii jako v definici předtrénování) modelu po k krocích na trénovacích, resp. validačních datech. Říkáme, že učení se od kroku k0 přeučuje, právě když pro všechny další kroky učení k > k0 platí
- Ltrén(k) < Ltrén(k0) (ztráta na trénovacích datech dál klesá) a zároveň
- Lval(k) > Lval(k0) (ztráta na validaci roste).
Slovy: když je dat málo, model je vidí mnohokrát dokola a začne si je pamatovat místo obecných pravidel. Velké jazykové modely se proto tradičně učí jen asi na jedné epoše; každý token vidí jednou nebo několikrát.
Kdo se na zkoušku naučí nazpaměť jedinou sbírku příkladů, vyřeší dokonale ty příklady — a u nových selže. Kdo prošel tisíc různých příkladů, každý jen jednou, naučí se postup.
epoch = K · B · n/|data|
- K
- počet kroků učení (u nás 1 500) — po každém se jednou upraví parametry
- B
- dávka: kolik náhodných úseků textu se v jednom kroku zprůměruje (u nás 4); průměr přes víc úseků dává méně rozkolísaný gradient
- n
- délka kontextu (24). Z úseku o 25 znacích vznikne 24 předpovědí — každý znak kromě prvního je jednou cílem —, takže jeden úsek „spotřebuje“ 24 trénovacích znaků
- |data|
- velikost trénovacího textu ve znacích. Čitatel je to, kolik model přečetl; podíl říká, kolikrát v průměru viděl každé místo textu
Druhý pokus: model s d = 32 (11 588 parametrů) a stejným počtem kroků, ale učený jen na prvních 1 000, 3 000 a 10 000 znacích textu.
Na 1 000 znacích (model je viděl asi 144krát) je ztráta na trénovacích datech jen 0,28, ale na validaci 1,85 — učebnicové přeučení. S 3 000 znaky klesne validace na 0,84, s 10 000 na 0,61. Celý text (85 997 znaků) ale už nepomůže: 0,65, v rámci šumu stejně.
Definice — mezera zobecnění
Nechť θ jsou parametry naučeného modelu a Ltrén(θ), Lval(θ) jeho ztráta (průměrná křížová entropie jako v definici předtrénování) na trénovacím textu, resp. na validačním textu, který se k učení nepoužil. Mezera zobecnění modelu je číslo
Δ(θ) = Lval(θ) − Ltrén(θ).
Slovy: o kolik je model horší na textu, který neviděl, než na textu, na kterém se učil. Měří, kolik z naučeného je zapamatování konkrétních dat místo obecných pravidel.
1 000 znaků: 1,85 − 0,28 = 1,57
10 000 znaků: 0,61 − 0,56 = 0,05
celý text: 0,65 − 0,56 = 0,09
(Trénovací ztráta je průměr posledních čtyř měření během učení, rozdíly jsou spočítané z nezaokrouhlených čísel.) Od deseti tisíc znaků je mezera malá, i když model text viděl čtrnáctkrát — náš text z malé gramatiky se sám opakuje, takže „nové“ věty validace vlastně nové nejsou. Ve skutečném textu se tolik neopakuje, a mezeru drží malou až to, že model každý token vidí jen jednou nebo několikrát; ztráta na trénovacích datech je pak u velkých modelů prakticky ztráta na nových textech.
Proč? Náš text jsou věty generované z malé gramatiky — po deseti tisících znaků se v něm už nic nového neobjeví. Víc stejného textu není víc informace. Tohle je u skutečných modelů velké téma: rozhoduje nejen kolik tokenů, ale kolik různorodého a kvalitního textu. Proto se data pro předtrénování pečlivě čistí, odstraňují se duplicity a kvalitní zdroje (knihy, kód, odborné texty) se v mixu zvýhodňují.
4. Výpočet a pravidlo Chinchilly
Definice — výpočetní rozpočet
FLOP (floating-point operation) je jedna aritmetická operace — sčítání nebo násobení — s čísly s plovoucí čárkou. Nechť model má N ≥ 1 parametrů a učení zpracuje celkem D ≥ 1 tokenů (i s opakováním). Výpočetní rozpočet učení C je celkový počet FLOP provedených během učení (průchody dopředu i zpětné šíření). Pro transformer platí odhad
C ≈ 6 · N · D.
Slovy: na každý token a parametr připadají asi 2 operace v průchodu dopředu a 4 při zpětném šíření. Při pevném rozpočtu C se tedy dá vybrat buď větší model na méně tokenech, nebo menší na více.
Máte rozpočet na elektřinu a čas grafických karet. Můžete ho utratit za obra, který stihne přečíst jen pár knih, nebo za menší model, který přečte celou knihovnu. Ani jedna krajnost není nejlepší.
C ≈ (2 + 4) · N · D
- N
- počet parametrů. Skoro všechny jsou váhy v maticích a každá váha se na každém tokenu použije v jednom násobení a jednom sčítání
- D
- počet zpracovaných tokenů za celé učení (i s opakováním) — každý token projde celou sítí
- 2
- dopředný průchod: násobení a sčítání = 2 operace na parametr a token
- 4
- zpětné šíření: pro každou váhu je třeba gradient podle vstupu vrstvy (aby šel signál dál dolů) i podle váhy samé (aby šla upravit) — dvakrát tolik co dopředu
- C
- výpočet v FLOP. Přibližně: chybí výpočet pozornosti mezi tokeny, který roste s délkou kontextu; u velkých modelů s kontextem o několika tisících tokenech je to malá část
Na našich modelech: stejný průběh učení, ale na vodorovné ose není krok, nýbrž spotřebovaný výpočet 6 · N · zpracované znaky. Model d = 32 spotřeboval za celé učení 1,0 · 1010 FLOP: (2 + 4) · 11 588 · 144 000 = 10 012 032 000 (barvy podle vzorce výše).
Při rozpočtu 109 FLOP jsou na tom nejlépe modely d = 8 a 16, největší model je teprve na začátku učení. Při 3 · 109 vede d = 16 a při 1010 se dotáhnou d = 32 a 48. Pro každý rozpočet existuje nejlepší velikost modelu — a s rozpočtem roste.
Přesně tohle změřili Jordan Hoffmann a kol. (DeepMind, 2022) na stovkách modelů: při optimálním využití výpočtu se mají parametry a data zvětšovat zhruba stejným tempem, asi 20 tokenů na parametr. Ukázali, že dřívější modely byly přerostlé a nedoučené. Jejich model Chinchilla se 70 miliardami parametrů porazil čtyřikrát větší Gopher za podobný výpočet.
L(N, D) = E + A/Nα + B/Dβ
- E
- neodstranitelná ztráta textu (1,69 natu na token) — stejná role jako v zákonu pro N výše
- A/Nα
- chyba za to, že model je konečně velký (A = 406,4, α = 0,34): i nekonečně dlouho učený malý model víc nepojme
- B/Dβ
- chyba za to, že model viděl jen konečně mnoho tokenů (B = 410,7, β = 0,28): i obří model se z málo dat nenaučí víc, než v nich je. Dva oddělené sčítance proto, že každý nedostatek se dá odstranit jen „svou“ veličinou
- L(N, D)
- ztráta modelu s N parametry po D tokenech — jen ta, ne C, se dá změřit; výpočet z ní dostaneme dosazením D = C/6N
Příklad — Chinchilla proti Gopheru podle vzorce
Chinchilla, N = 7 · 1010, D = 1,4 · 1012: 1,69 + 406,4/(7 · 1010)0,34 + 410,7/(1,4 · 1012)0,28 = 1,69 + 0,083 + 0,163 ≈ 1,94
Gopher, N = 2,8 · 1011, D = 3 · 1011: 1,69 + 0,052 + 0,251 ≈ 1,99
(Barvy podle vzorce L(N, D) výše.) Gopher má díky velikosti menší první člen (0,052 proti 0,083), ale málo dat ho stojí mnohem víc na druhém (0,251 proti 0,163). Výpočet obou je podobný: 6 · 7 · 1010 · 1,4 · 1012 = 5,9 · 1023 proti 5,0 · 1023 FLOP.
Věta — nejlepší velikost modelu pro daný výpočet
Nechť E ∈ ℝ, A, B, α, β > 0 a L : (0, ∞)2 → ℝ je funkce L(N, D) = E + A/Nα + B/Dβ. Nechť C > 0 a označme
G = (αA/βB)1/(α+β), Nopt = G · (C/6)β/(α+β), Dopt = G−1 · (C/6)α/(α+β).
Pak 6NoptDopt = C a pro všechna N, D > 0 splňující 6ND = C a (N, D) ≠ (Nopt, Dopt) platí L(N, D) > L(Nopt, Dopt). Při pevném výpočtu je tedy ztráta nejmenší právě pro Nopt parametrů a Dopt tokenů.
Důkaz. Z 6ND = C plyne D = C/6N, takže stačí přes N > 0 minimalizovat funkci
f(N) = L(N, C/6N) − E = AN−α + B(C/6)−βNβ.
Její derivace je
f′(N) = −αAN−α−1 + βB(C/6)−βNβ−1 = N−α−1 · (βB(C/6)−βNα+β − αA).
Závorka je ostře rostoucí v N a je nulová, právě když Nα+β = αA/βB · (C/6)β, tj. (po umocnění na 1/α + β) právě když N = Nopt. Pro N < Nopt je tedy f′(N) < 0 a pro N > Nopt je f′(N) > 0, takže f na (0, Nopt] ostře klesá a na [Nopt, ∞) ostře roste a Nopt je jediné minimum. Nakonec C/6Nopt = G−1 · (C/6)1 − β/(α+β) = Dopt. ∎
S konstantami výše je exponent β/α + β = 0,28/0,62 = 0,452 a α/α + β = 0,548: s desetkrát větším výpočtem má model vyrůst asi 100,45 = 2,8krát a data 100,55 = 3,5krát — zhruba stejným tempem.
Poctivě: pro rozpočet Chinchilly (5,9 · 1023 FLOP) z těchto konstant vyjde Nopt ≈ 32 mld. parametrů a 93 tokenů na parametr, ne 70 mld. a 20. Pravidlo 20 tokenů na parametr pochází z dalších dvou metod téže práce; pozdější přepočet (Tamay Besiroglu a kol., Epoch AI, 2024) ukázal, že proložení třetí metodou bylo nepřesné, a s opravenými konstantami vychází zase kolem 20.
Příklad — rozpočet 1024 FLOP podle pravidla 20 tokenů na parametr
D = 20N ⇒ C = 6 · N · 20N = 120 N2 ⇒ N = √C/120
N = √1024/120 = √8,3 · 1021 = 9,1 · 1010 ≈ 91 mld. parametrů
D = 20 · 9,1 · 1010 = 1,8 · 1012 ≈ 1,8 bilionu tokenů
(Barvy podle vzorce C ≈ 6 · N · D v části o výpočetním rozpočtu.)
Protože N roste s odmocninou výpočtu, stokrát větší rozpočet znamená jen desetkrát větší model (a desetkrát víc dat).
| model | rok | parametrů | tokenů | tokenů na parametr | výpočet ≈ 6ND |
|---|---|---|---|---|---|
| GPT-3 | 2020 | 175 mld. | 300 mld. | 1,7 | 3,2 · 1023 |
| Gopher | 2021 | 280 mld. | 300 mld. | 1,1 | 5,0 · 1023 |
| Chinchilla | 2022 | 70 mld. | 1 400 mld. | 20 | 5,9 · 1023 |
| Llama 3 8B | 2024 | 8 mld. | 15 000 mld. | 1 875 | 7,2 · 1023 |
Poslední řádek ukazuje, že ani Chinchilla není konečná pravda. Pravidlo 20 tokenů na parametr minimalizuje výpočet učení. Model se ale učí jednou a používá miliardkrát, a menší model je při každém dotazu levnější. Proto se dnes menší modely učí mnohem déle, než by bylo „optimální“: Llama 3 s 8 miliardami parametrů viděla 15 bilionů tokenů, přes 1 800 tokenů na parametr — a pořád se zlepšovala. Náš model d = 32 jich viděl asi 12 na parametr.
Pro srovnání velikostí: GPT-3 spotřeboval při učení asi 3,2 · 1023 FLOP, tedy zhruba 31 bilionkrát víc než náš model d = 32.
5. Kde to přestává platit
Zákony škálování jsou empirické — popisují, co se naměřilo, ne proč to tak musí být. Mají několik známých mezí:
- Neodstranitelná ztráta. Křivka se neblíží nule, ale konstantě E. U nás vyšlo E ≈ 0,06; Chinchilla pro internetový text odhadla 1,69 natu na token. Pod ni se nedostane žádný model, protože text sám je nejednoznačný. Převedeno na perplexitu: e1,69 ≈ 5,4 — i dokonalý model by podle tohoto proložení u každého tokenu váhal jako mezi pěti až šesti stejně pravděpodobnými možnostmi.
- Docházejí data. Kvalitního lidského textu na veřejném webu je konečně mnoho — odhady se pohybují ve stovkách bilionů tokenů — a největší modely se k té hranici blíží. Opakování dat pomáhá jen omezeně (u nás vidíte, jak to dopadne, když se dat opakuje moc) a doplňují se proto syntetická data generovaná jinými modely.
- Ztráta není schopnost. Nižší ztráta na dalším tokenu neříká přímo, co model umí. Některé schopnosti (třeba vícemístné sčítání) se v měřeních objevují „skokem“ až od určité velikosti, tzv. emergentní schopnosti. Část těch skoků je ale dána tím, jak se měří: když se úloha hodnotí jen jako správně/špatně, plynulé zlepšení vypadá jako náhlý zlom.
- Platí pro danou architekturu a data. Zákon změřený na jednom mixu dat a jednom tokenizátoru se nedá přenést na jiný. Exponenty se liší i mezi jazyky a doménami — u nás 0,45, u Kaplana 0,076.
Proto se velké laboratoře v posledních letech nespoléhají jen na zvětšování předtrénování. Přidávají doladění podle lidské zpětné vazby a nechávají model „přemýšlet“ déle při odpovídání — škálování se tak posouvá z učení i do používání.
6. Shrnutí
- Předtrénování = předpovídání dalšího tokenu na obrovském textu, bez ručních označení. Výsledkem je základní model.
- Ztráta klesá s velikostí modelu podle mocninného zákona; u nás z 2,42 (584 parametrů) na 0,55 (23 508), α ≈ 0,45.
- Málo dat vede k přeučení (0,28 na trénovacích datech, 1,85 na validaci); víc opakujícího se textu nepomůže.
- Výpočet ≈ 6 · parametry · tokeny. Pro každý rozpočet existuje nejlepší velikost; Chinchilla: asi 20 tokenů na parametr.
- Malé modely se dnes učí mnohem déle, protože jsou levnější při používání.
- Meze: neodstranitelná ztráta, docházející data a to, že nižší ztráta automaticky neznamená nové schopnosti.
Chcete si to osahat? Nechte AI agenta naučit malý jazykový model (třeba nanoGPT) ve třech velikostech na stejném textu a vynést ztrátu na validaci do grafu s logaritmickými osami.
Máte na to jiný názor? Napište na support@coden-app.com.