Lekce 04 · 16 min čtení
Neuronka (forward pass)
Co se děje, když vektor projde jednou vrstvou. Lineární vrstva, softmax, předpověď dalšího tokenu.
Úvod
Máme slova jako vektory. Teď s nimi konečně něco spočítáme. Cíl je pořád stejný jako od první lekce: vzít kontext a odhadnout, jaký token přijde dál. Jen už to nebudeme dělat tabulkou, ale neuronovou sítí.
To slovo zní jako něco z mozku nebo ze sci-fi. Ve skutečnosti je „neuronová síť" jen hromada násobení a sčítání, plus jedna funkce navrch. V téhle lekci si projdeme forward pass: cestu od vstupního vektoru k pravděpodobnosti dalšího tokenu. Žádné učení zatím, jen průchod dat sítí. Učení necháme na příště.

Vstup dovnitř, pár vah a součtů, pravděpodobnosti ven. Poslušně hlásím: forward pass.
Jeden neuron
Začneme tím nejmenším kouskem. Neuron dostane na vstupu pár čísel, každé vynásobí svojí váhou, sečte to a přičte jedno číslo navíc zvané bias. To je celé.
Řekněme, že vstup popisuje kontext třemi čísly: kolik je v něm „pití", „vojny"
a „postav". Neuron, který hlídá token pivo, bude mít velkou váhu u „pití" a
skoro nulovou u „vojny". Když pak dostane kontext plný piva, jeho výstup vyletí
nahoru.
Tomu výslednému číslu se říká logit. Je to zatím syrové skóre, ne pravděpodobnost. Může být klidně záporné nebo větší než jedna. Pravděpodobnost z něj uděláme až za chvíli.
Vrstva je jen matice
Jeden neuron předpovídá jeden token. My ale chceme skóre pro všechny
kandidáty naráz: pivo, hospoda, regiment, Švejk. Takže neuronů
postavíme vedle sebe víc, každý se svojí řádkou vah. A z řádek vah se stane
matice.
Spočítat všechny logity najednou pak není nic jiného než maticové násobení: matice vah krát vstupní vektor , plus vektor biasů .
Nelekej se toho zápisu. Maticové násobení tady znamená přesně tohle: vezmi každou řádku matice, vynásob ji po složkách se vstupem, sečti. Jeden řádek, jeden logit. Čtyři řádky, čtyři logity. To je všechno, co se v „lineární vrstvě" děje.
Zkus si to. Posouvej vstupní signály a sleduj, jak řádky vah převedou kontext na logity a jak se z nich pak stanou pravděpodobnosti:
NeuronVisualizer · lineární vrstva + softmax
Posouvej vstupní signály a koukej, jak se mění logity a pravděpodobnosti dalšího tokenu.
Vstup (kontext)
Výstup (další token)
- pivologit +1.70 · 37%
- hospodalogit +1.48 · 29%
- regimentlogit +0.22 · 8%
- Švejklogit +1.34 · 26%
Model by teď vsadil na pivo.
Když přidáš „pití", vyletí pivo a hospoda. Když přidáš „vojnu", začne vyhrávat
regiment. Ty váhy jsem nastavil ručně, aby to dávalo smysl, ale v reálném modelu
přesně tahle čísla model najde sám trénováním. O tom je příští lekce.
Softmax: z logitů pravděpodobnosti
Logity jsou syrová skóre. Můžou být záporná, různě velká, nedají se sečíst na jedničku. Potřebujeme z nich udělat pravděpodobnosti: samá kladná čísla, co dohromady dají 1. Od toho je tu softmax.
Slovy: každý logit pošli přes (čímž se stane kladným a větší rozdíly se ještě zvýrazní), a pak vyděl součtem všech, aby to dohromady dalo jedničku. Logit, který byl největší, dostane největší kus pravděpodobnosti.
Teplota
V playgroundu výš je posuvník „teplota". Když logity před softmaxem vydělíš nějakým číslem, ovládáš, jak ostré výsledné rozdělení bude. Nízká teplota dělá model rozhodný (skoro vždy vsadí na favorita), vysoká teplota ho zklidní a rozprostře pravděpodobnost mezi víc možností. K tomu se vrátíme, až budeme generovat text.
V kódu
Pojďme celý forward pass napsat ručně, bez numpy, ať je vidět, že na maticovém násobení není nic magického. Vstup, váhy, logity, softmax, předpověď. Klikni Run.
Zkus změnit vstup x. Dej „vojnu" nahoru (x = [0.1, 0.9, 0.3]) a pusť to
znovu. Uvidíš, že favorit přeskočí na regiment. Přesně to dělá síť pořád
dokola: vezme kontext, prožene ho vrstvou, vyplivne rozdělení nad tokeny.
Cvičení
Cvičení · lekce4-cv1
Neuron má váhy w = [3, 2] a bias 1. Na vstup dostane x = [1, 0].
Jaký bude jeho logit?
Cvičení · lekce4-cv2
Do softmaxu přijdou dva logity, oba se rovnají 2. Jaká bude pravděpodobnost
toho prvního? (Zadej jako desetinné číslo.)
Cvičení · lekce4-cv3
Na kolik se vždycky sečtou všechny pravděpodobnosti, které vyleze ze softmaxu?
Cvičení · lekce4-cv4
V playgroundu výš najdi takové nastavení vstupů, při kterém vyhraje Švejk.
Které signály jsi musel zvednout? Napiš sem, co ti zabralo.
Shrnutí
- Neuron = vynásob vstupy vahami, sečti, přičti bias. Výsledek je logit, syrové skóre.
- Vrstva je jen víc neuronů vedle sebe, takže celý výpočet je maticové násobení . Jeden řádek vah, jeden logit.
- Softmax převede logity na pravděpodobnosti: samá kladná čísla se součtem 1. .
- Celé dohromady je forward pass: kontext jde dovnitř, rozdělení nad tokeny jde ven.
- Váhy jsme tu nastavili ručně. V reálu si je model najde sám.
Co bude příště
Pořád jsme jen prohnali čísla sítí. Funguje to jen proto, že jsem váhy ručně nastavil, aby to dávalo smysl. To je ale podvod. V reálu nikdo neví, jaké váhy napsat, a u milionů čísel by to ani nešlo.
V Lekci 5 (Učení) přijde to nejdůležitější: jak síť ty správné váhy najde sama. Začne s náhodnými čísly, podívá se, jak moc se spletla, a kousek po kousku se posune správným směrem. Říká se tomu gradient descent a je to motor, který roztáčí celou dnešní AI.