Lekce 05 · 16 min čtení
Učení (gradient descent)
Jak si síť najde svoje váhy sama. Loss, gradient, learning rate a sjíždění z kopce.
Úvod
V minulé lekci jsme prohnali kontext sítí a vypadla z toho předpověď. Fungovalo to ale jen proto, že jsem váhy nastavil ručně, aby dávaly smysl. To je podvod. V reálu má model miliony vah a nikdo netuší, jaká čísla tam napsat.
Tahle lekce je o tom, jak si síť ta čísla najde sama. Princip je překvapivě lidský: zkus to, koukni, jak moc ses spletl, a posuň se kousek tím správným směrem. A pak znovu. A znovu. Tomu postupu se říká gradient descent a roztáčí prakticky celou dnešní AI.

Gradient ukazuje nahoru. Švejk jde opačně, dolů k menší chybě.
Loss: jak moc se model plete
Aby se model mohl zlepšovat, musí nejdřív vědět, jak moc je špatný. Od toho je loss (česky chyba): jedno číslo, které říká, jak daleko jsou předpovědi modelu od pravdy. Velký loss = velký omyl. Loss nula = trefa.
Typicky se počítá jako průměr čtverců odchylek: vezmi rozdíl mezi tím, co model řekl, a tím, co mělo být, umocni na druhou (ať jsou kladné i záporné chyby stejně zlé) a zprůměruj.
Celé učení je teď jen jeden cíl: udělej loss co nejmenší. Otázka je jak.
Gradient: kudy z kopce
Představ si loss jako kopec. Na vodorovné ose je váha, na svislé chyba. Ty stojíš někde na svahu a chceš dolů, do údolí, kde je chyba nejmenší. Jenže je mlha a vidíš jen kousek pod nohy.
Co uděláš? Nahmatáš, kterým směrem to jde nejprudčeji dolů, a uděláš krok tam. A přesně tohle ti řekne gradient: je to sklon kopce v místě, kde stojíš. Říká, kterým směrem chyba nejrychleji roste. Takže když chceš dolů, jdeš přesně opačným směrem, než ukazuje gradient.
To je celý trik. Gradient ukazuje do kopce, ty jdeš z kopce.
Jeden krok dolů
Krok se dělá takhle: vezmi váhu, spočítej v tom místě gradient a posuň se proti němu o kousek. Ten kousek řídí learning rate (rychlost učení), označuje se :
A pak znovu, ze nové pozice. Krok za krokem se kutálíš do údolí, gradient se cestou zmenšuje (svah je u dna mírnější) a kroky se přirozeně zkracují, až se zastavíš skoro na dně.
Zkus si to. Měň learning rate a sleduj, co kulička dělá:
GradientDescent · sjíždíme z kopce chyby
Kulička je hodnota váhy. Každý krok ji posuneme dolů z kopce. Pohraj si s learning rate.
Klikni „krok" jednou, nebo „spustit" pro animaci. Sleduj, jak velikost kroku závisí na strmosti kopce.
Pohraj si hlavně s learning rate, protože je to nejošemetnější číslo v celém učení:
- Moc malý a kulička se plíží jako hlemýžď, trénink trvá věčnost.
- Tak akorát a hezky sklouzne do dna za pár kroků.
- Moc velký a kulička přeskočí dno, vyletí na druhou stranu výš, než byla, a začne se rozhoupávat až úplně uteče. Toho se reálně bojí každý, kdo trénuje sítě.
V kódu
Pojďme model opravdu něco naučit. Máme pár bodů, u kterých zhruba platí
y = 2·x, jenže model to neví. Začne s vahou 0 a sám si má číslo 2 najít,
jen z dat a gradient descentu. Update váhy si napíšeme ručně. Klikni Run.
Koukni, jak loss klesá a w se plíží k dvojce. Nikdo modelu neřekl, že odpověď
je 2. Jen se opakovaně díval, jak moc se plete, a posouval vahu z kopce. Tohle
je celé učení v kostce. Pravá síť dělá přesně totéž, jen pro miliony vah naráz.
Zkus to rozbít
Změň lr na 0.2 a pusť to znovu. Loss místo klesání vystřelí do astronomických
čísel a w utíká pryč od správné dvojky. To je ten „moc velký krok" z playgroundu,
jen v kódu. Pak zkus 0.001 a uvidíš opak: krok je tak malý, že za 20 kol model
sotva odlepí.
Cvičení
Cvičení · lekce5-cv1
Váha je w = 5, gradient v tom místě je 4, learning rate je 0.5. Jaká bude
váha po jednom kroku gradient descentu?
Cvičení · lekce5-cv2
Když je kulička přesně na dně (v minimu chyby), čemu se rovná gradient?
Cvičení · lekce5-cv3
Stejná situace (w = 5, gradient 4), ale learning rate je teď 2. Kam se
váha posune? (Výsledek ti napoví, proč je velký learning rate nebezpečný.)
Cvičení · lekce5-cv4
V playgroundu nebo v kódu si pohraj s learning rate. Najdi hodnotu, při které se to ještě učí, a hodnotu, při které už to utíká pryč. Napiš sem zhruba, kde je ta hranice.
Shrnutí
- Loss je jedno číslo, jak moc se model plete. Cíl učení je udělat ho co nejmenší.
- Gradient je sklon loss: ukazuje směr, kterým chyba nejrychleji roste. Učení jde proti němu, tedy z kopce dolů.
- Krok: . Learning rate řídí, jak velký ten krok je.
- Moc malý learning rate = pomalu. Moc velký = řešení uteče. Tak akorát = pěkná konvergence do dna.
- Opakuj dokola pro všechny váhy a model se naučí sám. Tohle je motor celé dnešní AI.
Co bude příště
Máme všechny dílky: tokeny, embeddingy, forward pass i učení. Čas je slepit dohromady.
V Lekci 6 (Bigram neural model) postavíme první opravdu trénovaný model.
Žádné ručně nastavené váhy. Dáme mu Švejka, necháme ho hádat další token, počítat
loss a sjíždět z kopce, dokud se sám nenaučí, že po slově pan často přijde
Švejk. Asi 30 řádků a poprvé uvidíš trénovací smyčku v plné kráse.