← zpět na zápisky

AI / LLM9 min čtení

Jak se peče jazykový model

Celý trénink LLM na jedno posezení, s minimem matiky a maximem drzosti

AUTORSKÁ POZNÁMKA

Tohle je průvodce pro lidi, kteří chtějí vědět, co se v tom stroji děje, ale nechtějí kvůli tomu tři semestry lineární algebry. U každého kroku je jedna analogie, jeden řádek matiky (fakt jen jeden) a jeden odkaz, kam jít, když vás to chytne.

Pořadí je stejné jako ve skutečné výrobě: od textu přes stroj až k hotovému asistentovi.


1. TOKENIZACE — ROZSEKÁNÍ TEXTU NA LEGO

Model nečte písmena ani slova. Čte tokeny, tedy kousky textu, které vznikly tak, že algoritmus prošel obří hromadu textu a postupně slepoval nejčastější dvojice znaků do větších celků. Časté slovo "the" je jeden token. Slovo "Vrchlabí" je klidně čtyři, protože si ho stroj musí poskládat z kostiček, které měl po ruce.

Analogie: je to Lego. Máte omezenou sadu kostek (typicky 30 až 150 tisíc druhů) a jakýkoli text se z nich dá poskládat. Proto model umí "číst" slovo, které nikdy neviděl, jen ho postaví z kousků.

Matika: text → posloupnost celých čísel (t1,t2,…,tn)(t_1, t_2, \dots, t_n), každé z intervalu [0,V)[0, V), kde V je velikost slovníku. GPT-2 má V=50 257V = 50\,257.

Kam dál: Sennrich, Haddow & Birch (2016), "Neural Machine Translation of Rare Words with Subword Units" — původní paper o BPE. A pak si zkuste zadat pár vět do https://platform.openai.com/tokenizer, protože až uvidíte, kolik tokenů sní česká diakritika, pochopíte, proč modely umí anglicky levněji.

2. EMBEDDINGY — KAŽDÉ KOSTCE DÁME SOUŘADNICE

Číslo 4 731 samo o sobě nic neznamená. Tak každému tokenu přidělíme dlouhý seznam čísel (vektor) a ty vektory se během tréninku posunou tak, aby tokeny s podobným významem ležely blízko sebe. "Král" a "královna" skončí vedle sebe. "Král" a "šroubovák" ne.

Analogie: každé slovo dostane GPS souřadnice ve světě, který má místo dvou rozměrů třeba 4 096. Nikdo ty souřadnice nezadává ručně. Slovo se tam nastěhuje samo podle toho, v jaké společnosti se v textech vyskytuje.

Matika: E∈RV×dE \in \mathbb{R}^{V \times d}, řádek E[t]E[t] je vektor tokenu t. Pro Llamu 2 70B je d=8 192d = 8\,192.

Kam dál: Mikolov et al. (2013), "Efficient Estimation of Word Representations in Vector Space" — word2vec, ten slavný kraˊl−muzˇ+zˇena≈kraˊlovna\text{král} - \text{muž} + \text{žena} \approx \text{královna}.

3. ATTENTION, KAŽDÝ TOKEN SE ROZHLÉDNE PO MÍSTNOSTI

Tady je ten trik, kvůli kterému transformer vyhrál. Každý token se podívá na všechny tokeny před sebou a zeptá se: "Kdo z vás je pro mě teď důležitý?" Zájmeno "ona" se otočí za nejbližším ženským jménem. Sloveso "zaplatil" se otočí za tím, kdo a co.

Analogie: večírek. Každý host má na krku cedulku s tím, co nabízí (klíč), a v hlavě to, co hledá (dotaz). Pro každou dvojici se spočítá, jak k sobě ladí, a každý host si pak namíchá koktejl z toho, co říkají ty nej-ladící (hodnoty). Slovo "attention" znamená přesně to: komu věnuju pozornost a v jakém poměru.

Matika (ten jediný řádek, který stojí za zapamatování):

Attention⁡(Q,K,V)=softmax⁡ ⁣(QKTdk)⋅V\operatorname{Attention}(Q, K, V) = \operatorname{softmax}\!\left( \frac{Q K^{\mathsf{T}}}{\sqrt{d_k}} \right) \cdot V

Dělení dk\sqrt{d_k} je tam proto, aby při velkých vektorech nebyly skalární součiny obrovské a softmax se nezasekl na jediném hostu. Detail, ale detail, bez kterého to netrénuje.

A protože jeden pohled po místnosti nestačí (jeden si všímá gramatiky, druhý významu, třetí toho, co je v uvozovkách), dělá se to paralelně vícekrát: multi-head. Několik hostů na jednom večírku, každý si všímá něčeho jiného.

Kam dál: Vaswani et al. (2017), "Attention Is All You Need". Ale nejdřív si přečtěte Jay Alammar, "The Illustrated Transformer" — tam jsou k tomu obrázky, které v původním paperu chybí.

4. REZIDUÁLNÍ PROUD, TEDY DÁLNICE, NA KTEROU KAŽDÁ VRSTVA JEN PŘIPÍŠE

Model má desítky vrstev (Llama 70B má 80). Kdyby každá vrstva svůj vstup přepsala, po třiceti vrstvách by z původního slova nezbylo nic. Tak to dělají chytřeji: vstup se kopíruje dál nezměněný a vrstva k němu jen přičte svou poznámku.

Analogie: sdílený dokument, kterým prochází 80 editorů. Nikdo nemaže, každý jen doplní komentář na okraj. Kdo chce, přečte si původní text i po osmdesáti kolech.

Matika: xl+1=xl+F(xl)x_{l+1} = x_l + F(x_l). To je celé. Ta jednoduchost je fíčura: gradient má vždycky přímou cestu zpátky, protože derivace x podle x je 1.

Za attention následuje v každé vrstvě ještě malá dopředná síť (MLP), která pracuje s každým tokenem samostatně... něco jako "teď, když víš, komu jsi věnoval pozornost, si to promysli". Většina parametrů modelu sedí právě tady.

Kam dál: He et al. (2015), "Deep Residual Learning for Image Recognition" — odsud to transformery zdědily. A z tvojí složky Xie et al. (DeepSeek, 2026), "mHC: Manifold-Constrained Hyper-Connections" — co se stane, když někdo zkusí tu dálnici rozšířit na víc pruhů a zjistí, že se rozpadne stabilita, dokud tu "derivaci rovnou jedné" nevrátí zpátky.

5. CÍL, NE "UHODNI SLOVO", ALE "ROZDEJ SÁZKY"

Teď to důležité, co se v populárních vysvětleních nejčastěji zkazí. Model netrénujeme, aby uhodl další slovo. Trénujeme ho, aby pro každé slovo ve slovníku řekl, s jakou pravděpodobností přijde. Po "Dobrý" dá vysokou váhu na "den", slušnou na "večer", malou na "nápad" a mikroskopickou na "šroubovák".

Analogie: bookmaker. Nechceme, aby tipnul vítěze. Chceme, aby vypsal kurzy na všechny koně, a trestáme ho podle toho, jak nízký kurz dal na toho, který nakonec doběhl. Bookmaker, který dává 99 % jednomu koni, dopadne z dlouhodobého hlediska hůř než ten, kdo poctivě rozloží sázky tam, kde je opravdu nejistota.

Matika: pro správný další token t∗t^{*} je ztráta

L=−log⁡p(t∗)L = -\log p(t^{*})

Sečteno přes miliardy pozic v textu. Když model dal správnému tokenu p = 0,5, platí 0,69. Když mu dal 0,01, platí 4,6. Když mu dal 0,99, platí 0,01. Tomu se říká cross-entropy a je to jediné, co model během předtréninku "chce".

Z toho plyne věc, kterou kalomaze popisuje hezky: model, který má nízkou ztrátu, musí umět reprezentovat nejistotu. Musí vědět, kde je text předvídatelný (kód, matematika) a kde je volný (poezie, chat). Není to memorování. Je to naučená mapa toho, kde je jazyk pevný a kde tekutý.

Kam dál: kalomaze, "Understanding Transformers... (beyond the Math)" (2025) — hlavně kapitola o výstupní vrstvě. A Karpathy, "Let's build GPT: from scratch, in code, spelled out" (YouTube, 2023) — dvě hodiny, po kterých to celé napíšete v 300 řádcích Pythonu.

6. GRADIENT DESCENT, SESTUP Z HORY SE ZAVÁZANÝMI OČIMA

Máme ztrátu. Máme miliardy čísel (parametrů), která ji ovlivňují. Jak je nastavit? Pro každé číslo spočítáme, o kolik by se ztráta změnila, kdybychom ho trochu pohnuli (to je gradient), a pohneme jím opačným směrem. Mnohokrát. Řádově miliony kroků.

Analogie: stojíte v mlze na kopci a chcete dolů. Nevidíte nic, ale cítíte sklon pod nohama. Uděláte krok z kopce. Ohmatáte znovu. Krok. Proměnných je 70 miliard, ale princip je pořád ten samý — cítit sklon, krok, cítit sklon.

Matika: θ←θ−η ∇θL\theta \leftarrow \theta - \eta\, \nabla_{\theta} L. Písmeno η\eta je délka kroku (learning rate). Příliš velký krok a přeskočíte údolí. Příliš malý a jste tam do Vánoc.

Kam dál: 3Blue1Brown, série "Neural networks" (YouTube) — kapitoly o gradient descentu a backpropagation mají nejlepší vizualizace, co znám.

7. ŠKÁLOVÁNÍ, ANEB RECEPT, KTERÝ PLATÍ PŘEKVAPIVĚ PŘESNĚ

Kolik dat, kolik parametrů, kolik výpočtu? Ukázalo se, že to není věštění. Ztráta klesá s velikostí modelu a objemem dat podle hladkých křivek, ze kterých se dá předpovědět, jak dobrý bude model, který jste ještě nespustili.

Analogie: pečete chleba a zjistíte, že poměr mouky a vody funguje stejně pro bochník i pro průmyslovou pec. Není to samozřejmost — u většiny věcí na světě to tak není.

Matika: Chinchilla (2022) dává jako výpočtově optimální poměr přibližně 20 trénovacích tokenů na jeden parametr. Model se 70 mld parametrů chce ~1,4 bilionu tokenů. (Dnešní modely trénují na násobcích toho poměru, protože je levnější mít menší model, který se pak levně provozuje.)

Kam dál: Hoffmann et al. (2022), "Training Compute-Optimal Large Language Models". A Kaplan et al. (2020), "Scaling Laws for Neural Language Models" — starší verze, která to celé odstartovala.

8. POST-TRÉNINK, Z PAPOUŠKA INTERNETU UDĚLAT ASISTENTA

Model po předtréninku je dokončovač textu. Dáte mu otázku a on klidně vygeneruje dalších deset otázek, protože tak vypadají fóra. Aby z něj byl asistent, přijdou tři kroky:

SFT (supervised fine-tuning). Ukážete mu pár desítek tisíc příkladů "otázka → dobrá odpověď". Naučí se formát. Stále stejná cross-entropy, jen na ručně psaných datech.

Preference (RLHF / DPO). Lidé porovnávají dvě odpovědi a řeknou, která je lepší. Z toho se model učí, co se líbí, nikoli jen co je pravděpodobné. RLHF na to staví zvláštní "model odměny" a používá posilované učení; DPO to zkracuje a učí se rovnou z párů.

RL na uvažování (2024–25). Model dostane úlohy s ověřitelnou odpovědí (matika, kód), nechá se přemýšlet a dostane odměnu jen za správný výsledek. Bez lidí. Z tohohle vznikly reasoning modely typu o1 a DeepSeek-R1.

Analogie: předtrénink je přečíst knihovnu. SFT je stáž, kde vám ukážou, jak se píše mail. Preference jsou šéf, který vám mailů vrací s poznámkou "tohle ne". RL na uvažování je zkouška, kde nikoho nezajímá, jak jste na to přišli, jen zda je výsledek správný.

Matika (DPO, jeden řádek): zvyšuj log p(preferovaná) − log p(odmítnutá) oproti původnímu modelu. Formálně

LDPO=−log⁡σ ⁣(β[log⁡π(yw∣x)πref(yw∣x)−log⁡π(yl∣x)πref(yl∣x)])L_{\mathrm{DPO}} = -\log \sigma\!\left( \beta \left[ \log \frac{\pi(y_w \mid x)}{\pi_{\mathrm{ref}}(y_w \mid x)} - \log \frac{\pi(y_l \mid x)}{\pi_{\mathrm{ref}}(y_l \mid x)} \right] \right)

kde ywy_w je vítězná a yly_l poražená odpověď.

Kam dál: Ouyang et al. (2022), "Training language models to follow instructions with human feedback" (InstructGPT). Rafailov et al. (2023), "Direct Preference Optimization". DeepSeek-AI (2025), "DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning".

9. VZORKOVÁNÍ, A TEPLOTA NENÍ NÁHODA

Hotový model vám na každé pozici dá rozdělení. Něco z něj musíte vytáhnout. "Teplota" je parametr, kterým to rozdělení zostříte nebo zploštíte, než z něj taháte.

Analogie: máte kolo štěstí s políčky různé velikosti. Teplota 1 = kolo tak, jak ho model nakreslil. Teplota nízká = velké políčko ještě zvětšíte, malá skoro zmizí. Teplota vysoká = všechna políčka se přiblíží stejné velikosti. Pak roztočíte. Žádná náhoda se nikam "nepřidává"; jen se mění tvar kola.

Matika: pi∝exp⁡(zi/T)p_i \propto \exp(z_i / T). Při T→0T \to 0 vyhrává vždy nejvyšší ziz_i (greedy). Při T=1T = 1 je to přesně to, co model natrénoval.

Kam dál: Holtzman et al. (2019), "The Curious Case of Neural Text Degeneration" — proč greedy dekódování zacyklí i výborný model, a odkud je nucleus sampling.


CELÝ RECEPT NA JEDNU KARTIČKU

text → tokeny → vektory → [attention + MLP, přičíst k proudu] × NN vrstev → kurzy na každý token → cross-entropy → gradient → opakovat bilionkrát → SFT → preference → RL na výsledek → hotovo, nastavte teplotu.

Nic z toho není jednotlivě těžké. Těžké je, že to funguje až ve chvíli, kdy je toho neuvěřitelně moc — a že nikdo přesně neví, proč zrovna tenhle mix. Většina dílů je tam proto, že se osvědčily, ne proto, že by je někdo odvodil. Což je dobrá zpráva: znamená to, že spousta z nich se dá ještě zlepšit.