Přeskočit na obsah
coden

Transformery a velké jazykové modely: architektura krok za krokem

Jazykový model a perplexita, blok transformeru s kauzální pozorností, MLP a rezidui, malý znakový transformer napsaný od nuly, srovnání s bigramem, naučená shoda podle rodu, generování s teplotou a cesta k modelům se stovkami miliard parametrů.

14 minut Matěj Žalmánek 2026-10-16

Série Základy AI Díl 70 z 83
  1. Mapa umělé inteligence: co je co a jak to do sebe zapadá
  2. Stručná historie umělé inteligence: od Turinga po jazykové modely
  3. Data, model, trénink, inference: základní pojmy na jednom příkladu
  4. Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relace: stavebnice, ze které se skládají definice v AI
  6. Funkce a zobrazení: proč je každý model v AI funkce
  7. Logika a důkazy: pravidla, podle kterých se v AI uvažuje
  8. Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
  9. Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
  10. Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
  11. Gradientní sestup: jak se model učí
  12. Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
  13. Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
  14. Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
  15. Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
  16. Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
  17. Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
  18. Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
  19. Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
  20. Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
  21. Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
  22. Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
  23. Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
  24. Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
  25. Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
  26. Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
  27. Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
  28. Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
  29. Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
  30. Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
  31. Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
  32. Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
  33. Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
  34. Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
  35. Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
  36. Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
  38. Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
  39. Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
  40. Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
  41. Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
  42. Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
  43. Přeučení a regularizace: proč model, který zná data nazpaměť, selže
  44. Vyhodnocení modelu: křížová validace, F1 a křivka ROC
  45. Shlukování a snížení dimenze: k-means, PCA a t-SNE
  46. Klasifikace a regrese: dvě úlohy učení s učitelem
  47. Lineární regrese: nejmenší čtverce geometricky i maticově
  48. Polynomiální a nelineární regrese: jak přímku ohnout
  49. Logistická regrese: sigmoida, šance a křížová entropie
  50. Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
  51. Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
  52. Ztrátové funkce: co přesně model minimalizuje
  53. Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
  54. Ansámbly: náhodný les a gradient boosting
  55. SVM a jádrový trik: nejširší hranice a jak ji ohnout
  56. Signál a vzorkování: proč platí Nyquistův teorém
  57. Fourierova transformace: rozklad signálu na frekvence
  58. Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
  59. Zvuk a řeč: spektrogram, melová škála a MFCC
  60. Obraz jako signál: pixely, barvy, konvoluce a hrany
  61. Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
  62. Neuronová síť od nuly: zpětné šíření chyby krok za krokem
  63. Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
  64. Konvoluční sítě: jak síť poznává obrázky
  65. Rekurentní sítě: paměť pro posloupnosti a mizející gradient
  66. LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
  67. Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
  68. Embeddingy a word2vec: jak se slovo stane vektorem
  69. Mechanismus pozornosti: jak se model naučí, kam se dívat
  70. Transformery a velké jazykové modely: architektura krok za krokem
  71. Tokenizace: jak se text rozseká na kousky pro model
  72. Předtrénování a škálování: proč větší model a víc dat funguje
  73. Doladění a RLHF: jak se z doplňovače textu stane asistent
  74. Prompty, kontext a RAG: jak modelu dát správné informace
  75. Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
  76. Generativní adversariální sítě (GAN): padělatel proti detektivovi
  77. Difúzní modely: jak se z čistého šumu stane obrázek
  78. Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
  79. Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
  80. Policy gradient a PPO: učení přímo strategie
  81. Jak funguje AI agent: jazykový model ve smyčce s nástroji
  82. Programování s AI agenty: zadání, testy a kontrola
  83. 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 si odnesete
  • Co dělá jazykový model a jak vypadá blok transformeru.
  • Co přinese pozornost oproti modelu, který vidí jen předchozí znak.
  • Jak model generuje text a čím se liší od velkých jazykových modelů.

Co se hodí znát předem: Mechanismus pozornosti: jak se model naučí, kam se dívat, Embeddingy a word2vec: jak se slovo stane vektorem, Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí

ChatGPT, Claude, Gemini i Llama mají uvnitř tutéž architekturu: transformer. Popsal ji tým z Googlu v roce 2017 v článku s nenápadným názvem „Attention Is All You Need“ a do pár let vytlačila z jazyka skoro všechno ostatní. Velký jazykový model je v jádru transformer, který se naučil jedinou věc — předpovídat další kousek textu — na obrovském množství textu. V tomhle dílu postavíme transformer od nuly, v malém: model, který píše po znacích a má 11 tisíc parametrů místo stovek miliard. Principy jsou ale přesně stejné.

Navazuje na díly Mechanismus pozornosti, Embeddingy a Aktivace, inicializace a normalizace.

1. Jazykový model: předpověz další znak

Definice — jazykový model a perplexita

Nechť 𝒱 je konečná neprázdná množina tokenů (slovník; u nás 36 znaků). Jazykový model je předpis, který každé posloupnosti x1, …, xt−1 ∈ 𝒱 (t ≥ 1; pro t = 1 je posloupnost prázdná) přiřadí rozdělení pravděpodobnosti dalšího tokenu, tj. čísla P(v | x1, …, xt−1) pro v ∈ 𝒱 taková, že

P(v | x1, …, xt−1) ≥ 0   pro každé v ∈ 𝒱   a   ∑v ∈ 𝒱 P(v | x1, …, xt−1) = 1.

Nechť x1, …, xT ∈ 𝒱, T ≥ 1, je text. Ztráta modelu na tomto textu (průměrná křížová entropie dalšího tokenu, v natech na token) a perplexita jsou

L = 1/T ∑t=1T −ln P(xt | x1, …, xt−1),   PP = eL.

Model se učí tak, že se jeho parametry hledají, aby L na trénovacím textu byla co nejmenší. Platí

PP = 1/T√∏t=1T P(xt | x1, …, xt−1),

tedy perplexita je převrácená hodnota geometrického průměru pravděpodobností skutečných tokenů. Model, který v každém kroku volí rovnoměrně mezi k tokeny, má PP = k — proto se perplexita čte jako počet rovnocenných možností, mezi kterými model v průměru váhá.

Laicky řečeno

Našeptávač v telefonu, jen mnohem lepší. Kdo umí dobře odhadnout další slovo, musí rozumět gramatice, souvislostem i tomu, o čem se mluví — jinak by se trefoval špatně. Celá „inteligence“ velkých jazykových modelů vznikla jako vedlejší produkt téhle jednoduché úlohy.

L = 1/T ∑t=1T −ln P( xt | x1, …, xt−1 ),   perplexita = eL

x1, …, xt−1
kontext — všechno, co model zatím viděl (u nás nejvýš posledních 24 znaků); jen z toho smí hádat
xt
znak, který v textu skutečně následuje — správná odpověď je zadarmo přímo v textu, proto stačí obyčejný text bez ručního značkování
P
pravděpodobnost, kterou model tomuto znaku dal (softmax z jeho výstupu přes všech 36 znaků)
−ln
trest za překvapení: za jistou správnou odpověď (P = 1) nula, za P = 0,5 trest ln 2 ≈ 0,693, a když dal model skutečnému znaku skoro nulu, trest roste nade všechny meze; logaritmus navíc z násobení pravděpodobností celé věty udělá součet
L
průměrná ztráta v natech na znak (průměr přes všech T pozic, aby nezávisela na délce textu); eL ji převede zpět na „počet rovnocenných možností“
Model, který dá každému z 36 znaků stejnou šanci, má L = ln 36 = 3,584 a perplexitu přesně 36.
Příklad — ztráta a perplexita na třech znacích

Model dal třem skutečným znakům pravděpodobnosti 0,5, 0,25 a 0,8:

L = −ln 0,5 − ln 0,25 − ln 0,8/3 = 0,693 + 1,386 + 0,223/3 = 2,303/3 = 0,768

perplexita = e0,768 = 2,15   (= ∛2 · 4 · 1,25, geometrický průměr čísel 1/P)

Barvy odpovídají členům vzorce výše.

Perplexita 2,15 znamená, že model byl v průměru stejně nejistý, jako kdyby rovnoměrně hádal mezi zhruba dvěma znaky.

Učíme na větách z dílu o embeddinzích (král vládl v paláci, dcera si hrála na hřišti…), tentokrát po znacích: 85 997 znaků k učení, 13 815 jiných k vyhodnocení, abeceda o 36 znacích. Model vidí posledních 24 znaků.

2. Blok transformeru

Definice — blok transformeru (dekodér)

Nechť 𝒱 je slovník o V tokenech, d ∈ ℕ dimenze modelu, Tmax ∈ ℕ největší délka kontextu, dff ∈ ℕ vnitřní šířka MLP a c1, …, cT ∈ 𝒱 vstupní tokeny, 1 ≤ T ≤ Tmax. Vektory tokenů píšeme jako řádky. Parametry modelu jsou matice embeddingů E ∈ ℝV×d (řádek E[c] patří tokenu c), matice pozičních embeddingů P ∈ ℝTmax×d, parametry pozornosti, W1 ∈ ℝd×dff, c1 ∈ ℝdff, W2 ∈ ℝdff×d, c2 ∈ ℝd, Wout ∈ ℝd×V, bout ∈ ℝV a parametry tří normalizací vrstvy. Transformer (dekodér s jedním blokem) spočte pro t = 1, …, T:

  1. vstupní vektory xt = E[ct] + P[t] ∈ ℝd;
  2. (h1, …, hT) = (x1, …, xT) + Attn(LN(x1), …, LN(xT)), kde Attn je kauzální vícehlavá sebepozornost (vícehlavá pozornost z dílu Mechanismus pozornosti s kauzální maskou níže — token t vidí jen tokeny 1, …, t) a LN je normalizace vrstvy (níže);
  3. yt = ht + MLP(LN(ht)), kde MLP(u) = ReLU(uW1 + c1)W2 + c2 a ReLU(r) = max(0, r) po složkách — MLP se použije na každou pozici zvlášť;
  4. logity zt = LN(yt)Wout + bout ∈ ℝV;
  5. rozdělení dalšího tokenu P(ct+1 = v | c1, …, ct) = softmax(zt)v pro v ∈ 𝒱.

Kroky 2 a 3 tvoří blok transformeru; hlubší model opakuje bloky s vlastními parametry a výstup y jednoho bloku je vstupem x dalšího. Náš model má jeden blok, V = 36, d = 32, Tmax = 24, dff = 64 a 2 hlavy.

Laicky řečeno

Pozornost je porada: každý znak se podívá na předchozí a posbírá od nich, co potřebuje. MLP je přemýšlení o samotě: každý znak si posbírané zpracuje. Reziduální spojení („+“) znamená, že se původní informace nikdy neztratí, jen se k ní přidává — dálnice pro gradient z dílu o aktivacích. Kauzální maska zakazuje dívat se dopředu: při učení by jinak model „opisoval“ znak, který má předpovědět.

znaky (posledních 24) embedding znaku + pozice LayerNorm → pozornost (2 hlavy) LayerNorm → MLP (32 → 64 → 32) LayerNorm → softmax přes 36 znaků ++ reziduální spojení blok
Náš transformer: jeden blok, dvě hlavy pozornosti, d = 32

xt = E[ct] + P[t]

E[ct]
řádek matice embeddingů (36 × 32) pro znak ct — naučený vektor, který říká, co to je za znak
P[t]
poziční embedding (24 × 32) — říká, kde znak stojí. Je nutný, protože pozornost je jen vážený součet a pořadí sčítanců nevidí: bez něj by poslední „l“ ve slově „sel“ i v nesmyslu „esl“ vidělo stejnou trojici znaků a model by obě slova nerozlišil
xt
vstupní vektor tokenu t (modře ve schématu); sečtení místo spojení vedle sebe šetří dimenzi a síť si obě informace umí oddělit

h = x + Attn(LN(x)),   y = h + MLP(LN(h)),   z = LN(y) Wout + bout

x
vstup bloku; přičítá se k výstupu pozornosti beze změny (reziduální spojení), takže blok se učí jen opravu a gradient má přímou cestu dolů
LN
normalizace vrstvy před každou částí — drží vektory v rozumném rozsahu, ať se učení nerozjede; dává se na vstup části, ne na reziduální cestu, aby ta zůstala čistá
Attn
kauzální vícehlavá pozornost (zeleně ve schématu) — jediné místo, kde si tokeny vyměňují informace
MLP
MLP(u) = ReLU(uW1 + c1)W2 + c2 s vnitřní šířkou 64 (jantarově ve schématu) — zpracuje každý token zvlášť; pozornost jen průměruje, nelinearitu a „přemýšlení“ dodává tahle část
z
logity: pro každou pozici 36 čísel, softmax z nich dá P(další znak) (fialově ve schématu)
Náš model má jeden blok; velké modely opakují první dva řádky desítkykrát, výstup jednoho bloku je vstupem dalšího.
Definice — normalizace vrstvy (LayerNorm)

Nechť d ∈ ℕ, d ≥ 1, γ, β ∈ ℝd jsou naučené parametry (na začátku γ = (1, …, 1), β = (0, …, 0)) a ε > 0 je malá konstanta (u nás ε = 10−5; brání dělení nulou). Pro vektor u = (u1, …, ud) ∈ ℝd označme jeho průměr a rozptyl složek

μ(u) = 1/d ∑j=1d uj,   σ2(u) = 1/d ∑j=1d (uj − μ(u))2.

Normalizace vrstvy je funkce LN : ℝd → ℝd se složkami

LN(u)j = γj · uj − μ(u)/√σ2(u) + ε + βj,   j = 1, …, d.

Na matici tokenů (řádek = token) se LN použije na každý řádek zvlášť. Před násobením γ a přičtením β mají tedy složky každého tokenu průměr 0 a rozptyl (téměř) 1. Na rozdíl od batch normalizace se průměr a rozptyl počítají přes složky jednoho tokenu, takže výsledek nezávisí na tom, co je v dávce.

Příklad (γ = 1, β = 0): u = (1; 2; 3; 6), μ = 3, σ2 = 4 + 1 + 0 + 9/4 = 3,5, √3,5 = 1,871 (ε je proti 3,5 zanedbatelné)  →  LN(u) = (−2/1,871; −1/1,871; 0; 3/1,871) = (−1,069; −0,535; 0; 1,604).

Definice — kauzální maska

Nechť T ≥ 1 je počet tokenů a sij ∈ ℝ (i, j = 1, …, T) skóre pozornosti tokenu i vůči tokenu j, už vydělená √dk. Kauzální maska nahradí skóre nad úhlopříčkou hodnotou −∞:

ŝij = sij pro j ≤ i,   ŝij = −∞ pro j > i,

a kauzální pozornost spočte váhy softmaxem po řádcích z ŝ s konvencí e−∞ = 0, tj. pro i = 1, …, T:

aij = esij/∑m=1i esim pro j ≤ i,   aij = 0 pro j > i.

Token i tedy váží jen sebe a tokeny před sebou a jeho váhy dávají součet ∑j=1i aij = 1.

Příklad: třetí token z pěti má skóre (už vydělená √dk) (1; 0,5; 2; 3; 1). Poslední dvě patří budoucím tokenům a vypadnou: e1 = 2,718, e0,5 = 1,649, e2 = 7,389, součet 11,756  →  váhy (2,718/11,756; 1,649/11,756; 7,389/11,756; 0; 0) = (0,231; 0,140; 0,629; 0; 0). Bez masky by nejvíc váhy dostal čtvrtý token, tedy znak, který má model teprve předpovědět.

Díky masce se z jednoho úseku T znaků učí T předpovědí najednou: pozice t vidí přesně kontext x1, …, xt a hádá xt+1. U nás d = 32 a 2 hlavy, takže každá hlava má dk = 16 a skóre se dělí √16 = 4.

Model má 11 588 parametrů. Pod kapotou je malá automatická derivace: každá operace (násobení matic, softmax s maskou, LayerNorm…) si pamatuje, jak spočítat svůj gradient, a zpětné šíření projde výpočet odzadu — přesně jako PyTorch. Test kontroluje, že se gradienty shodují s numerickou derivací.

Příklad — odkud je 11 588 parametrů

embeddingy: E 36 × 32 + P 24 × 32 = 1 152 + 768 = 1 920

pozornost: WQ, WK, WV, WO po 32 × 32 + LN (γ, β) = 4 · 1 024 + 2 · 32 = 4 160

MLP: W1 32 × 64 + c1 + W2 64 × 32 + c2 + LN = 2 048 + 64 + 2 048 + 32 + 64 = 4 256

výstup: LN + Wout 32 × 36 + bout = 64 + 1 152 + 36 = 1 252

celkem 11 588; síť bez pozornosti nemá druhý řádek: 11 588 − 4 160 = 7 428

def transformer(znaky, M):                        # znaky: indexy posledních ≤ 24 znaků
    T = len(znaky)
    x = M.E[znaky] + M.P[:T]                      # T × d: co je to za znak + kde stojí
    a = layer_norm(x, M.g1, M.b1)
    Q, K, V = a @ M.Wq, a @ M.Wk, a @ M.Wv
    hlavy = []
    for r in range(M.hlav):                       # každá hlava má svých d_k = d / hlav sloupců
        q, k, v = Q[:, r], K[:, r], V[:, r]
        S = q @ k.T / sqrt(d_k)
        S[j > i] = -inf                           # kauzální maska: nedívat se dopředu
        hlavy.append(softmax(S, po_radcich=True) @ v)
    h = x + spoj_vedle_sebe(hlavy) @ M.Wo         # reziduum kolem pozornosti
    b = layer_norm(h, M.g2, M.b2)
    y = h + relu(b @ M.W1 + M.c1) @ M.W2 + M.c2   # reziduum kolem MLP
    return layer_norm(y, M.g3, M.b3) @ M.Wout + M.bout   # T × 36 logitů

3. Učení a co přinese pozornost

0123 0100020003000 krok učení (iterace) ztráta (nats na znak)
Ztráta během učení (3 000 kroků po 4 úsecích); čárkovaně bigramový model transformer stejná síť bez pozornosti bigram
Modelztráta na nových větáchperplexita
rovnoměrné hádání ze 36 znaků3,58436
četnost znaků (unigram)3,06821,5
předchozí znak (bigram)1,9477,0
síť bez pozornosti (7 428 parametrů)1,9947,3
transformer0,5321,7

Síť bez pozornosti vidí jen aktuální znak (a jeho pozici), takže je to v podstatě bigram — a taky ho jen dorovná. S pozorností model vidí celé slovo a začátek věty a perplexita klesne ze 7,0 na 1,7: v průměru váhá jen mezi necelými dvěma možnostmi.

Definice — srovnávací modely: unigram a bigram

Nechť 𝒱 je abeceda o V znacích, x1, …, xN ∈ 𝒱 trénovací text a α > 0 vyhlazovací konstanta (u nás α = 0,1). Pro a, b ∈ 𝒱 označme

C(b) = |{t ∈ {1, …, N} : xt = b}|,   C(a, b) = |{t ∈ {2, …, N} : xt−1 = a ∧ xt = b}|

počet výskytů znaku b a počet výskytů dvojice „a a hned za ním b“. Pro kontext x1, …, xt−1 a znak b ∈ 𝒱 jsou

  1. unigram — jazykový model, který kontext ignoruje: P(b | x1, …, xt−1) = C(b) + α/N + α · V;
  2. bigram — jazykový model, který z kontextu použije jen poslední znak a = xt−1 (pro t ≥ 2): P(b | x1, …, xt−1) = P(b | a) = C(a, b) + α/∑c ∈ 𝒱 C(a, c) + α · V.

V obou případech je součet přes b ∈ 𝒱 roven 1 a díky α > 0 nemá žádný znak pravděpodobnost 0 (ztráta −ln 0 by byla nekonečná). Vzorec bigramu je rozebraný hned pod definicí.

P(b | a) = C(a, b) + α/∑c C(a, c) + α · V

C(a, b)
kolikrát v trénovacím textu po znaku a následovalo b — čím častěji, tím pravděpodobnější
∑c C(a, c)
kolikrát se a objevilo vůbec (s nějakým následníkem) — dělením z počtů vzniknou podíly
α
vyhlazení, u nás α = 0,1: každá dvojice dostane „desetinu výskytu“ navíc, takže i v tréninku nevídaná dvojice má malou kladnou pravděpodobnost
V
počet znaků abecedy (36); α se přičetlo V-krát v čitatelích, proto musí být V-krát i ve jmenovateli, aby součet přes b zůstal 1
Příklad — co bigram ví po znaku „š“

V trénovacím textu je za „š“ 952 znaků, z toho „l“ 278krát a „e“ 299krát:

P(l | š) = 278 + 0,1/952 + 0,1 · 36 = 278,1/955,6 = 0,291

P(e | š) = 299 + 0,1/955,6 = 0,313

Barvy odpovídají členům vzorce výše.

Tytéž dvě čísla dá bigram po „princezna š“ i po „princ š“ — o rodu nemá jak vědět. Perplexitu z tabulky dostaneme jako eztráta: bigram e1,947 = 7,00, transformer e0,532 = 1,70.

4. Co se model naučil: shoda podle rodu

Konkrétní zkouška: dáme modelu text „osoba š“ a podíváme se, s jakou pravděpodobností doplní „l“ (tedy „šla“) místo „e“ („šel“). Aby se rozhodl správně, musí se podívat o několik znaků zpátky, na podmět.

DvojiceP(„šla“) po mužském tvaruP(„šla“) po ženském tvaru
muž / žena3 %95 %
král / královna1 %86 %
otec / matka5 %74 %
syn / dcera6 %93 %
chlapec / dívka49 %63 %
princ / princezna1 %68 %

V průměru čeká transformer „šla“ po ženských osobách s pravděpodobností 80 % a po mužských jen 11 %. Síť bez pozornosti rod nerozliší vůbec (26 % a 29 %): vidí jen „š“. Model ale není dokonalý — u dvojice chlapec/dívka váhá (49 % proti 63 %).

Příklad — rozdělení dalšího znaku po „princezna š“

Číslo v tabulce je jedna složka softmaxu z posledního řádku logitů: P(„l“) = ezl/∑c ezc přes všech 36 znaků. Po „princezna š“ dává transformer

P(l) = 0,679,   P(e) = 0,314,   součet 0,993

síť bez pozornosti: P(l) = 0,281,   P(e) = 0,259

Transformer skoro všechnu pravděpodobnost rozdělí mezi „šla“ a „šel“ — pozná, že za podmětem začíná sloveso. A které z nich, rozhoduje rod podmětu o několik znaků zpátky. Síť bez pozornosti zná jen „š“, a tak se chová podobně jako bigram (P(l | š) = 0,291, P(e | š) = 0,313).

p r i n c e z n a ␣ š l a princezna␣šla hlava 1 znak, na který se dívá (pozice) znak, který se ptá (pozice) p r i n c e z n a ␣ š l a princezna␣šla hlava 2 znak, na který se dívá (pozice) znak, který se ptá (pozice)
Váhy pozornosti obou hlav pro text „princezna šla“ (řádek se ptá, sloupec odpovídá)

Váhy ukazují, že se hlavy většinou dívají jeden až tři znaky zpátky — sestavují si z nich slabiky a slova. Matice je trojúhelníková: nad úhlopříčkou nic není, to je kauzální maska.

5. Generování textu a teplota

Text se generuje znak po znaku: model spočte pravděpodobnosti dalšího znaku, jeden se vylosuje (s teplotou z dílu o softmaxu), přidá se na konec a opakuje se to. Začátek „královna “:

Teplotavygenerovaný text
0královna vládla v paláci a a seděla na trůnu. král vládla v paláci a a seděla n
0,5královna vládla v paláci a a seděla na trůna ři. k obědu byl jablko a na talíři
1královna vládla v paláci a ahrušel po ulice a lidi. král na hřišti jako a malý.
1,5královna v paláci a achráce. muž šela po u aví česka má hranicekla ahoj. chlavn

S teplotou 0 (vždy nejpravděpodobnější znak) model opakuje své nejčastější věty — a i tak dělá chyby („a a“, „král vládla“): rod u slovesa, které je od podmětu daleko, se nenaučil vždycky. Kolem teploty 0,5–1 vznikají nové kombinace známých kousků. S teplotou 1,5 se text rozpadá na skoro-slova. Stejný knoflík mají i velké jazykové modely.

pk = exp(zk/τ)/∑j exp(zj/τ)

zk
logit znaku k na poslední pozici — co model „navrhuje“; učil se s τ = 1
τ
teplota (v tabulce „Teplota“, ve vzorci τ, aby se nepletla s délkou textu T) — dělí rozdíly logitů: τ < 1 je zvětší a rozdělení zostří, τ > 1 je zmenší a rozdělení zploští; pro τ → 0 zbude jen nejpravděpodobnější znak
pk
pravděpodobnost, s jakou se znak k vylosuje; součet přes všechny znaky je 1 pro každou teplotu
Teplota nemění pořadí znaků, jen jak moc má vítěz přednost: poměr dvou pravděpodobností při teplotě τ je jejich poměr při teplotě 1 umocněný na 1/τ.
Příklad — „princezna š“ při různých teplotách

Při teplotě 1 je P(l) = 0,679 a P(e) = 0,314, poměr 0,679/0,314 = 2,16. Protože pk ∝ ezk (∝ znamená „rovná se až na kladný násobek, společný pro všechna k“), je exp(zk/τ) = (ezk)1/τ ∝ pk1/τ a stačí umocnit a znovu normalizovat:

τ = 0,5:   poměr 2,162,00 = 4,68,   pl = 0,824,   pe = 0,176

τ = 1:   poměr 2,161,00 = 2,16,   pl = 0,679,   pe = 0,314

τ = 1,5:   poměr 2,160,67 = 1,67,   pl = 0,595,   pe = 0,355

Barvy odpovídají členům vzorce výše.

Při τ = 0,5 se „šla“ vylosuje skoro v pěti případech ze šesti, při τ = 1,5 už jen asi v 59 %.

def generuj(model, zacatek, delka, tau):
    text = zacatek
    for _ in range(delka):
        z = model(text[-24:])[-1]            # logity posledního znaku
        if tau == 0:
            k = argmax(z)                    # vždy nejpravděpodobnější
        else:
            p = softmax(z / tau)
            u = random()                     # rovnoměrně z [0, 1)
            k = 0
            while u > p[k]:                  # ruleta: znak k zabírá úsek délky p[k]
                u -= p[k]
                k += 1
        text += znaky[k]                     # přidat a pokračovat s delším textem
    return text

6. Od 11 tisíc ke stovkám miliard

  • Stejná architektura, jiné měřítko. GPT-2 (2019) měl 1,5 miliardy parametrů a 48 bloků, GPT-3 (2020) 175 miliard a 96 bloků — patnáctmilionkrát víc než náš model. Místo 24 znaků vidí tisíce až statisíce tokenů.
  • Tokeny místo znaků. Velké modely nepíšou po znacích, ale po kouscích slov — o tom je díl o tokenizaci.
  • Poziční informace. Místo naučených pozičních embeddingů se dnes používají rotace (RoPE), které lépe zvládají delší texty.
  • Učení. Předtrénování na bilionech tokenů trvá měsíce na tisících grafických karet; pak přichází doladění, aby z modelu, který doplňuje text, byl asistent. Obojí probírají další díly.

N ≈ nbloků · ( 4d2 + 8d2 ) = 12 · nbloků · d2

4d2
pozornost: matice WQ, WK, WV, WO, každá d × d (hlavy si jen dělí sloupce, počet parametrů nemění)
8d2
MLP: velké modely mají vnitřní šířku 4d, tedy d · 4d + 4d · d; MLP drží dvě třetiny parametrů
nbloků
počet bloků nad sebou — každý má vlastní matice
N
počet parametrů bez embeddingů; posuny, LayerNorm a embeddingy jsou proti d2 členům u velkých modelů zanedbatelné
Odhad, který používají Kaplan a kol. (2020, „Scaling Laws for Neural Language Models“). Náš model má vnitřní šířku MLP jen 2d, proto u něj vychází 8d2 na blok.
Příklad — GPT-2, GPT-3 a náš model

GPT-2 (48 bloků, d = 1 600): 12 · 48 · 1 6002 = 1,47 miliardy (uváděno 1,5 miliardy)

GPT-3 (96 bloků, d = 12 288): 12 · 96 · 12 2882 = 174 miliard (uváděno 175 miliard)

náš model (1 blok, d = 32): 1 · (4 · 322 + 4 · 322) = 8 192 v maticích bloku (MLP má u nás šířku 2d, proto 4d2 místo 8d2); zbylých 3 396 z 11 588 jsou embeddingy, výstupní vrstva, posuny a LayerNorm — u malého modelu nejsou zanedbatelné

Barvy odpovídají členům vzorce výše. Rozměry jsou z článků Radford a kol. (2019) a Brown a kol. (2020). Výpočetní cena učení se odhaduje na 6N operací na token (dopředný průchod 2N, zpětný asi 4N); GPT-3 se učil na 300 miliardách tokenů, tedy 6 · 175 · 109 · 300 · 109 ≈ 3,15 · 1023 operací — Brown a kol. uvádějí 3,14 · 1023.

7. Shrnutí

  • Jazykový model předpovídá další token; učí se křížovou entropií na velkém textu.
  • Blok transformeru = kauzální vícehlavá pozornost + MLP, obojí s reziduálním spojením a normalizací vrstvy.
  • Náš transformer s 11 588 parametry dosáhl perplexity 1,7; bigram 7,0 a stejná síť bez pozornosti 7,3.
  • Pozornost mu dovolila naučit se shodu podle rodu: „šla“ po ženských osobách 80 %, po mužských 11 %.
  • Generuje se znak po znaku a teplota řídí, jak odvážně; velké modely jsou totéž ve větším.

Chcete si to osahat? Nechte AI agenta napsat tento transformer v PyTorchi (je to asi sto řádků, třeba podle Karpathyho „nanoGPT“) a naučit ho na vaší oblíbené knize — a sledujte, jak se s počtem kroků zlepšuje text.

Máte na to jiný názor? Napište na support@coden-app.com.

Agent na vašem počítači, ovládaný z telefonu