Transformer je architektura, na které stojí všechny dnešní LLM. Nemusíš umět matematiku, abys pochopil, co dělá: je to stroj, který pro každý token spočítá, na které jiné tokeny se má dívat, a podle toho upřesní jeho význam. Tomu koukání se říká attention (pozornost) a je to celý ten průlom z roku 2017, který spustil dnešní boom.
🪜 Chceš vidět, proč attention musí existovat? Od bigramu k transformeru staví model čtyřikrát za sebou a u každého ukazuje, na čem selhal, se skutečnými čísly z tréninku.
Problém, který attention řeší
Vezmi větu: „Servery spadly, protože jim došla paměť.“
Aby model rozuměl slovu jim, musí ho spojit se servery. Starší architektury (RNN) četly text slovo po slově a čím dál od sebe slova byla, tím spíš se spojení ztratilo. Transformer se dívá na všechna slova najednou a u každého si spočítá, jak moc souvisí s ostatními:
token "jim" se dívá na:
"Servery" ████████░░ 0.62
"spadly" ███░░░░░░░ 0.18
"paměť" ██░░░░░░░░ 0.11
"protože" █░░░░░░░░░ 0.05
Význam tokenu jim se pak upraví hlavně podle serverů. Tomuhle vážení se říká attention, model se sám naučil, kam se dívat.
Co je softmax
Padne to tu několikrát, tak si to odbydeme: softmax převede libovolná čísla na
pravděpodobnosti. Umocní každé číslo na e (takže je vždycky kladné a rozdíly se zvětší)
a vydělí je součtem, aby dohromady daly jedničku.
[2,0, 1,0, 0,1] → softmax → [0,63, 0,23, 0,14]
Používá se dvakrát: uvnitř attention (váhy, kolik brát od koho) a na konci modelu (pravděpodobnosti dalšího tokenu).
Attention je jediné místo v celém modelu, kde spolu tokeny komunikují. Všechno ostatní, včetně feed-forward vrstvy, zpracovává každý token izolovaně.
Vrstvy a hlavy
Dvě čísla, na která narazíš v popisu každého modelu:
- Hlavy (attention heads): v jedné vrstvě běží víc pozorností současně a každá sleduje jiný typ vztahu. Jedna hlídá gramatickou shodu, jiná odkazy zájmen, další téma odstavce. Nikdo jim to nepřidělil, vyplynulo to z tréninku.
- Vrstvy: celý blok (attention + zpracování) se opakuje. Malý model má vrstev desítky, velký stovky. Každá vrstva pracuje s výstupem té předchozí, takže význam se postupně zpřesňuje: spodní vrstvy řeší slovní druhy a vazby, vyšší abstraktní věci jako záměr nebo tón.
tokeny → [vrstva 1] → [vrstva 2] → ... → [vrstva N] → pravděpodobnosti dalšího tokenu
gramatika vazby význam, záměr
Proč jsou dlouhé texty drahé
Attention porovnává každý token s každým. Dvojnásobně dlouhý vstup tak neznamená dvakrát, ale zhruba čtyřikrát víc práce:
1 000 tokenů → 1 000 000 dvojic
2 000 tokenů → 4 000 000 dvojic
Tohle je hlavní důvod, proč mají modely omezené kontextové okno a proč je zpracování dlouhého dokumentu pomalé a drahé. Moderní modely to zmírňují chytřejšími implementacemi, ale princip zůstává: dlouhý kontext není zadarmo.
Co si z toho odnést prakticky
- Pozice v promptu má vliv. Model se dívá na všechno, ale ne stejně silně. Důležité instrukce patří na začátek nebo na konec, ne doprostřed dlouhého bloku dat.
- Souvislý text je pro model čitelnější než změť. Když mu naházíš deset nesouvisejících útržků, attention se rozmělní. Proto se u RAG vyplatí kvalita a řazení podkladů.
- Velikost okna není jediné měřítko. Model s oknem 200 000 tokenů umí do kontextu pojmout celou knihu, ale kvalita práce s informací uprostřed bývá horší (viz kontextové okno).
- Rychlost se dá odhadnout. Delší vstup = delší čekání na první token; delší výstup = delší celkové generování. Když ti aplikace „sekne“, podívej se nejdřív na délky.
🏗️ Tohle byl přehled. Konkrétní architekturu vrstvu po vrstvě, včetně rozměrů a toho, kde leží parametry, rozebírá anatomie modelu. Na ni navazuje attention do hloubky s KV cache a GQA.
Co je uvnitř kromě attention
Aby byl obrázek úplný, jen krátce a bez matematiky:
- Embedding vrstva převede tokeny na vektory (podobně jako embeddingy).
- Poziční informace modelu řekne, v jakém pořadí tokeny jsou, attention sama o sobě pořadí nezná.
- Feed-forward část za attention „přemýšlí“ nad tím, co pozornost vybrala. Právě tady leží většina parametrů modelu, tedy i většina naučených znalostí.
- Výstupní vrstva převede výsledek na pravděpodobnosti přes celý slovník.
💡 Znalosti modelu nejsou uložené jako fakta v tabulce, ale rozprostřené v miliardách čísel těchto vrstev. Proto je nejde přesně dohledat, opravit ani zaručit, a proto model, který si má být jistý, potřebuje podklady v kontextu.
Cvičení
- Kontext se zdvojnásobí z 4 000 na 8 000 tokenů. Kolikrát víc práce udělá attention a kolikrát víc feed-forward vrstva?
- V bloku jsou dvě části: attention a feed-forward. Která z nich umožňuje tokenům si mezi sebou předat informaci, a proč na tom záleží?
Náčrt řešení: rozbal, až si cvičení zkusíš sám
- Attention čtyřikrát, feed-forward dvakrát. Attention porovnává každý token s každým, takže roste s druhou mocninou délky, zatímco FFN zpracovává každý token zvlášť, takže roste lineárně. Odtud plyne, že u krátkých kontextů dominuje cena FFN a teprve u dlouhých se attention stane hlavní položkou. Proto se kolem dlouhého kontextu točí tolik optimalizací.
- Attention, a je to jediné takové místo v celém modelu. Feed-forward vrstva vidí každý token izolovaně, takže bez attention by model nedokázal spojit „ji“ s podstatným jménem o pět slov dřív. Všechno, čemu říkáme porozumění kontextu, se odehrává v tomhle jednom mechanismu.
Shrnutí
- Attention = model si pro každý token spočítá, na které ostatní se má dívat.
- Víc hlav sleduje víc typů vztahů, víc vrstev význam postupně zpřesňuje.
- Porovnávání každého s každým dělá dlouhý kontext kvadraticky drahým.
- Znalosti jsou rozpuštěné ve vahách, ne uložené jako záznamy, odtud halucinace.
Co dělá „attention“ a proč to byl průlom?
Pro každý token spočítá, jak silně souvisí s ostatními tokeny, a podle toho upřesní jeho význam. Průlom to byl proto, že model vidí celý text najednou a vzdálenost mezi slovy mu nevadí, starší architektury čtoucí slovo po slově dlouhé vazby ztrácely.
Proč zdvojnásobení délky promptu zdraží zpracování zhruba čtyřikrát?
Attention porovnává každý token s každým, takže počet dvojic roste s druhou mocninou délky. Dvojnásobek tokenů znamená čtyřnásobek porovnání, proto jsou dlouhé kontexty pomalé a drahé.
Proč nejde v modelu „opravit“ konkrétní fakt, jako se opraví řádek v databázi?
Protože fakta nejsou uložená jako záznamy. Jsou rozprostřená v miliardách vah napříč vrstvami. Jediné spolehlivé řešení je dodat správnou informaci do kontextu při dotazu (RAG), ne hledat ji v modelu.
