LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
Brány a paměťová buňka LSTM, ručně nastavená buňka, která si podrží symbol přes sto kroků, jednodušší GRU, útlum chybového signálu podle nastavení zapomínací brány a poctivý pokus s učením — na buňkách napsaných od nuly.
Série Základy AI Díl 66 z 83
- Mapa umělé inteligence: co je co a jak to do sebe zapadá
- Stručná historie umělé inteligence: od Turinga po jazykové modely
- Data, model, trénink, inference: základní pojmy na jednom příkladu
- Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relace: stavebnice, ze které se skládají definice v AI
- Funkce a zobrazení: proč je každý model v AI funkce
- Logika a důkazy: pravidla, podle kterých se v AI uvažuje
- Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
- Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
- Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
- Gradientní sestup: jak se model učí
- Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
- Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
- Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
- Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
- Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
- Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
- Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
- Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
- Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
- Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
- Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
- Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
- Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
- Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
- Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
- Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
- Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
- Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
- Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
- Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
- Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
- Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
- Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
- Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
- Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
- Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
- Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
- Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
- Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
- Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
- Přeučení a regularizace: proč model, který zná data nazpaměť, selže
- Vyhodnocení modelu: křížová validace, F1 a křivka ROC
- Shlukování a snížení dimenze: k-means, PCA a t-SNE
- Klasifikace a regrese: dvě úlohy učení s učitelem
- Lineární regrese: nejmenší čtverce geometricky i maticově
- Polynomiální a nelineární regrese: jak přímku ohnout
- Logistická regrese: sigmoida, šance a křížová entropie
- Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
- Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
- Ztrátové funkce: co přesně model minimalizuje
- Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
- Ansámbly: náhodný les a gradient boosting
- SVM a jádrový trik: nejširší hranice a jak ji ohnout
- Signál a vzorkování: proč platí Nyquistův teorém
- Fourierova transformace: rozklad signálu na frekvence
- Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
- Zvuk a řeč: spektrogram, melová škála a MFCC
- Obraz jako signál: pixely, barvy, konvoluce a hrany
- Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
- Neuronová síť od nuly: zpětné šíření chyby krok za krokem
- Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
- Konvoluční sítě: jak síť poznává obrázky
- Rekurentní sítě: paměť pro posloupnosti a mizející gradient
- LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
- Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
- Embeddingy a word2vec: jak se slovo stane vektorem
- Mechanismus pozornosti: jak se model naučí, kam se dívat
- Transformery a velké jazykové modely: architektura krok za krokem
- Tokenizace: jak se text rozseká na kousky pro model
- Předtrénování a škálování: proč větší model a víc dat funguje
- Doladění a RLHF: jak se z doplňovače textu stane asistent
- Prompty, kontext a RAG: jak modelu dát správné informace
- Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
- Generativní adversariální sítě (GAN): padělatel proti detektivovi
- Difúzní modely: jak se z čistého šumu stane obrázek
- Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
- Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
- Policy gradient a PPO: učení přímo strategie
- Jak funguje AI agent: jazykový model ve smyčce s nástroji
- Programování s AI agenty: zadání, testy a kontrola
- 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 dělají brány a paměťová buňka LSTM a jak se liší GRU.
- Proč po paměťové buňce projde chybový signál mnoho kroků — a proč jen tehdy, když je zapomínací brána otevřená.
- Co brány na malé úloze opravdu přinesou a proč se prosadily na skutečných datech.
Co se hodí znát předem: Rekurentní sítě: paměť pro posloupnosti a mizející gradient
Obyčejná rekurentní síť z minulého dílu zapomínala rychle: chybový signál slábl s každým krokem a vzdálené souvislosti se nenaučila. V roce 1997 navrhli Sepp Hochreiter a Jürgen Schmidhuber buňku, která má vedle obvyklého stavu ještě jednu, chráněnou paměť — a brány, které rozhodují, kdy do ní zapsat, kdy ji smazat a kdy z ní číst. Síti LSTM trvalo dvacet let, než se naplno prosadila; v letech 2015–2017 pak překládala v Google Translate, rozpoznávala řeč v telefonech a našeptávala slova na klávesnici. V tomhle dílu ji postavíme od nuly, podíváme se dovnitř a poctivě změříme, co na malé úloze opravdu přinese.
Navazuje na díl Rekurentní sítě (RNN).
1. Brána: neuron, který pouští dál
Definice — brána
Nechť m, n ≥ 1 jsou celá čísla (m je počet složek stavu, n počet složek vstupu), ht−1 ∈ ℝm je stav sítě po kroku t − 1, xt ∈ ℝn je vstup v kroku t, W ∈ ℝm×(m+n) je matice vah a b ∈ ℝm vektor prahů. Sigmoida σ, spojení [·, ·] a násobení po složkách ⊙ jsou definované v dalším bloku. Brána je vektor
g = σ(W[ht−1, xt] + b) ∈ (0, 1)m,
který se používá jen jako činitel v násobení po složkách g ⊙ v s jiným vektorem v ∈ ℝm. Složka (g ⊙ v)k = gkvk je tedy vk zmenšená na podíl gk ∈ (0, 1): pro gk blízké 1 projde skoro beze změny, pro gk blízké 0 se skoro zastaví.
Rozdělíme-li matici na bloky W = (Wh | U) s Wh ∈ ℝm×m a U ∈ ℝm×n, je W[ht−1, xt] = Whht−1 + Uxt — stejný tvar jako v obyčejné RNN z minulého dílu.
Kohoutek, který síť sama otáčí podle toho, co právě vidí. Na rozdíl od váhy, která je po naučení pevná, se brána mění krok od kroku: u důležitého slova se otevře, u nedůležitého zavře.
Definice — sigmoida, spojení vektorů, násobení po složkách
Sigmoida je funkce
σ : ℝ → (0, 1), σ(z) = 1/1 + e−z.
Převede libovolné reálné číslo do intervalu (0, 1): σ(0) = 0,5, σ(1) = 0,731, σ(3) = 0,953, σ(6) = 0,9975, σ(−5) = 0,007. Je rostoucí a její derivace je σ′(z) = σ(z)(1 − σ(z)) pro každé z ∈ ℝ.
Hyperbolický tangens je funkce tanh : ℝ → (−1, 1), tanh z = ez − e−z/ez + e−z, s derivací tanh′ z = 1 − tanh2 z.
Obě funkce používáme i na vektory, a to po složkách: pro v ∈ ℝm je σ(v) = (σ(v1), …, σ(vm)) a stejně tanh v.
Nechť h ∈ ℝm a x ∈ ℝn. Jejich spojení je vektor
[h, x] = (h1, …, hm, x1, …, xn) ∈ ℝm+n
— nejdřív složky h, za nimi složky x (v naší síti 16 + 5 = 21 čísel).
Nechť a, b ∈ ℝm. Jejich násobení po složkách (Hadamardův součin) je vektor
a ⊙ b = (a1b1, …, ambm) ∈ ℝm,
tj. vynásobí se odpovídající si složky: (0,9; 0,1) ⊙ (2; −3) = (1,8; −0,3). Symbolem 1 = (1, …, 1) ∈ ℝm značíme vektor samých jedniček.
g = σ( W [ht−1, xt] + b )
- g
- brána — vektor čísel mezi 0 a 1, jedno pro každou složku, kterou řídí
- σ
- sigmoida — právě ona zaručí rozsah (0, 1), takže se výsledkem dá „pouštět“: násobit jím jiný vektor a dostat 0 až 100 % jeho hodnoty
- [ht−1, xt]
- co síť právě ví a co právě vidí — podle toho se brána rozhoduje, a proto se mění krok od kroku
- W
- naučené váhy — určují, na které vstupy má brána reagovat
- b
- práh — výchozí otevření brány: na začátku učení jsou váhy malé a náhodné, W[h, x] kolísá kolem nuly a brána kolem σ(b); s b = 3 je brána otevřená na 0,953, s b = 1 jen na 0,731
2. LSTM: paměť se třemi branami
Definice — buňka LSTM
Nechť m, n, T ≥ 1 jsou celá čísla, x1, …, xT ∈ ℝn je vstupní posloupnost a nechť jsou dány matice vah Wf, Wi, Wo, Wg ∈ ℝm×(m+n) a prahy bf, bi, bo, bg ∈ ℝm. Síť LSTM (long short-term memory) s m neurony má v každém kroku paměťovou buňku ct ∈ ℝm a stav ht ∈ ℝm, začíná s c0 = h0 = 0 a pro t = 1, …, T počítá (s zt = [ht−1, xt] ∈ ℝm+n):
- zapomínací brána ft = σ(Wfzt + bf) ∈ (0, 1)m;
- vstupní brána it = σ(Wizt + bi) ∈ (0, 1)m;
- výstupní brána ot = σ(Wozt + bo) ∈ (0, 1)m;
- kandidát gt = tanh(Wgzt + bg) ∈ (−1, 1)m;
- paměť ct = ft ⊙ ct−1 + it ⊙ gt;
- stav ht = ot ⊙ tanh(ct).
Kde nehrozí záměna, index t u bran vynecháváme (f, i, o, g). Slovy: brány se počítají jen z předchozího stavu a vstupu, stará paměť se do nové dostane jen vynásobením zapomínací branou a stav je výstupní branou „přivřená“ paměť.
Paměťová buňka je sešit. Zapomínací brána rozhodne, kolik ze starých poznámek vygumovat, vstupní brána, kolik nového zapsat, výstupní brána, co z poznámek teď prozradit navenek. Klíčová je první rovnice: stará paměť se do nové jen násobí zapomínací bránou a přičítá se k ní nové — žádná matice, žádná tanh. Když je brána blízko 1, informace i chybový signál po téhle „dálnici“ projdou mnoho kroků skoro beze ztráty.
ct = f ⊙ ct−1 + i ⊙ g
- ct−1, ct
- paměťová buňka před krokem a po něm — „dálnice“ ze schématu; nese informaci z kroku do kroku
- f
- zapomínací brána — kolik ze staré paměti nechat; 1 = nic nezapomenout, 0 = vymazat. Je to jediné, čím se stará paměť násobí, a proto rozhoduje, jak daleko paměť (i chyba) dosáhne
- i
- vstupní brána — zda tenhle krok stojí za zapsání; u nedůležitého vstupu ji síť zavře a paměť nepoškodí
- g
- kandidát (tanh, v intervalu (−1, 1)) — co by se zapsalo; oddělený od i, aby síť zvlášť rozhodovala „co“ a „jestli“
ht = o ⊙ tanh(ct)
- ht
- stav, který vidí zbytek sítě: výstupní vrstva i brány v příštím kroku
- o
- výstupní brána — co z paměti teď ukázat; síť si může něco pamatovat a přitom to ještě nepoužívat
- ct
- paměť; tanh ji stlačí do (−1, 1), protože součet v paměti může přerůst 1
Jeden krok buňky LSTM jako pseudokód (Wf, … jsou čtyři matice 16 × 21, bf, … čtyři prahy):
z = [h[t−1], x[t]] # spojení: 16 + 5 = 21 čísel
f = σ(W_f·z + b_f) # zapomenout?
i = σ(W_i·z + b_i) # zapsat?
o = σ(W_o·z + b_o) # přečíst?
g = tanh(W_g·z + b_g) # co zapsat
c[t] = f ⊙ c[t−1] + i ⊙ g
h[t] = o ⊙ tanh(c[t])
3. LSTM nastavená ručně
Než síť budeme učit, nastavme jednu buňku LSTM ručně na úlohu z minulého dílu: na začátku posloupnosti přijde symbol A nebo B, pak 99 rušivých symbolů, a na konci má buňka vědět, co bylo na začátku. Vstupní bránu nastavíme tak, aby se otevřela jen na A nebo B, kandidáta na +1 pro A a −1 pro B, zapomínací bránu skoro na 1 (práh 6, tedy f = 0,9975) a výstupní otevřenou.
V prvním kroku je vstupní brána otevřená (0,993) a do paměti se zapíše −0,993 — „bylo B“. Pak se brána zavře (0,007) a rušivé symboly do paměti skoro nic nezapíšou. Paměť jen pomalu slábne násobením zapomínací branou: po 100 krocích je na −0,777, tedy zbývá 0,997599 = 78 % — a výstup je pořád jasně záporný (−0,65). Obyčejná RNN takové chování také umí (stav, který se sám drží), ale v LSTM je zabudované přímo v rovnici paměti a stačí ho nastavit jednou konstantou.
Příklad — ručně nastavená buňka krok za krokem
Vstup je jeden z pěti symbolů zakódovaný jako pět čísel, z nichž jedno je 1 (xA, xB a tři rušivé). Váhy buňky:
i = σ(10(xA + xB) − 5), g = tanh(4(xA − xB)), f = σ(6), o = σ(6).
Dosazujeme do rovnic ct = f ⊙ ct−1 + i ⊙ g a ht = o ⊙ tanh(ct) (barvy podle vzorců výše); buňka má jediný neuron, takže ⊙ je obyčejné násobení.
Krok 1, symbol B (xB = 1): i = σ(10 − 5) = σ(5) = 0,993, g = tanh(−4) = −0,999, c1 = 0,9975 · 0 + 0,993 · (−0,999) = −0,993.
Krok 2, rušivý symbol: i = σ(−5) = 0,007, g = tanh 0 = 0, takže c2 = 0,9975 · c1 + 0,007 · 0 = 0,9975 · c1. Rušivý symbol do paměti nezapíše nic; paměť se jen vynásobí f.
Krok 100: totéž 99krát, c100 = 0,997599 · c1 = 0,783 · (−0,993) = −0,777, a výstup h100 = 0,9975 · tanh(−0,777) = 0,9975 · (−0,651) = −0,65.
Věčnou paměť by dala f = 1, ke které se sigmoida s rostoucím prahem libovolně blíží; s prahem 6 pomalu slábne, ale po 100 krocích je znaménko — to, co si máme pamatovat — pořád jasné.
4. GRU: jednodušší sestra
Definice — buňka GRU
Nechť m, n, T ≥ 1 jsou celá čísla, x1, …, xT ∈ ℝn je vstupní posloupnost a nechť jsou dány matice vah Wz, Wr, Wñ ∈ ℝm×(m+n) a prahy bz, br, bñ ∈ ℝm. Síť GRU (gated recurrent unit; Kjunghjun Čo a kol., 2014) s m neurony nemá oddělenou paměť, jen stav ht ∈ ℝm. Začíná s h0 = 0 a pro t = 1, …, T počítá:
- aktualizační brána zt = σ(Wz[ht−1, xt] + bz) ∈ (0, 1)m;
- resetovací brána rt = σ(Wr[ht−1, xt] + br) ∈ (0, 1)m;
- kandidát ñt = tanh(Wñ[rt ⊙ ht−1, xt] + bñ) ∈ (−1, 1)m;
- stav ht = (1 − zt) ⊙ ht−1 + zt ⊙ ñt.
Kde nehrozí záměna, index t u bran vynecháváme. Slovy: každá složka nového stavu je vážený průměr staré složky a kandidáta s vahami 1 − zk a zk. (V původním článku Čo a kol. mají role z a 1 − z prohozené; obě konvence jsou rovnocenné, liší se jen pojmenováním brány.)
Jedna brána místo dvou: co se zapíše nového, o tolik se zapomene ze starého. Resetovací brána rozhodne, nakolik se kandidát ohlíží na minulost. GRU má o čtvrtinu méně vah než LSTM — u nás 1 090 proti 1 442 (obyčejná RNN 386) — a v praxi bývá podobně dobrá.
ht = (1 − z) ⊙ ht−1 + z ⊙ ñ
- ht−1, ht
- stav před krokem a po něm — v GRU je zároveň pamětí, oddělené c tu není
- 1 − z
- kolik starého stavu ponechat — obdoba zapomínací brány f z LSTM
- z
- aktualizační brána: kolik nového zapsat — obdoba vstupní brány i; protože obě váhy dávají dohromady 1, je nový stav vážený průměr starého a kandidáta a nemůže přerůst rozsah (−1, 1)
- ñ
- kandidát, spočtený z r ⊙ ht−1 a xt — resetovací brána r v něm rozhodne, nakolik se nový obsah ohlíží na dosavadní stav
Příklad — odkud jsou počty vah 386, 1 442 a 1 090
Vstup má 5 složek (symboly A, B a tři rušivé), stav 16, výstupy 2. Každá „vrstva uvnitř buňky“ (brána nebo kandidát) má matici 16 × (16 + 5) = 336 vah a 16 prahů, dohromady 352. Výstupní vrstva má 2 × 16 + 2 = 34.
RNN: jedna vrstva, 352 + 34 = 386. LSTM: čtyři (f, i, o, g), 4 · 352 + 34 = 1 442. GRU: tři (z, r, ñ), 3 · 352 + 34 = 1 090.
GRU má tedy 1 090/1 442 = 76 % vah LSTM — o čtvrtinu méně, protože jí chybí jedna ze čtyř vnitřních vrstev.
5. Kudy teče chybový signál
Hlavní slib LSTM se dá změřit ještě před učením: kolik chybového signálu doputuje zpátky přes 60 kroků v nenaučené síti. Pro každou variantu pět náhodných sítí, každá na dvaceti posloupnostech:
Rozhoduje nastavení zapomínací brány. S prahem 3 (brána zhruba 0,95) se LSTM drží: i 59 kroků zpět dorazí 48 % signálu. S prahem 1 (brána zhruba 0,73) slábne podobně jako obyčejná RNN — 0,16 % proti 0,29 %. GRU s nulovými prahy, kde aktualizační brána začíná na 0,5, ztrácí signál nejrychleji ze všech: 3 · 10⁻⁹. Brány samy o sobě tedy nic nezaručují; dálnici je potřeba na začátku otevřít. Proto se dnes práh zapomínací brány standardně nastavuje kladný.
Věta — chybový signál na dálnici
Nechť je dána síť LSTM podle definice výše, krok t ∈ {1, …, T} a chyba E ∈ ℝ, která je diferencovatelnou funkcí výstupů sítě. Krok t chápejme jako zobrazení (ct−1, ht−1, xt) ↦ (ct, ht) a nechť ∂E/∂ct, ∂E/∂ht ∈ ℝm jsou derivace E podle výstupů kroku t (chybový signál, který do nich přichází z pozdějších kroků a z výstupní vrstvy). Pak derivace E podle vstupu ct−1 kroku t je
∂E/∂ct−1 = ft ⊙ (∂E/∂ct + ∂E/∂ht ⊙ ot ⊙ (1 − tanh2 ct)).
Důkaz. Brány ft, it, ot i kandidát gt se počítají z zt = [ht−1, xt], na ct−1 tedy nezávisí, a ct−1 vstupuje v kroku t jen do rovnice ct = ft ⊙ ct−1 + it ⊙ gt. Po složkách proto ∂ct,k/∂ct−1,k = ft,k (a pro různé složky nula). Hodnota ct působí na E přímo (signál ∂E/∂ct) a přes ht = ot ⊙ tanh(ct), kde ∂ht,k/∂ct,k = ot,k(1 − tanh2 ct,k). Řetízkové pravidlo sečte obě cesty a vynásobí je ft,k, což je tvrzení věty. ∎
Protože ct−1 je výstupem kroku t − 1 a vstupuje jen do kroku t, je levá strana zároveň signál „podle výstupu ct−1“ pro krok t − 1 a vzorec se dá opakovat krok za krokem dozadu. U obyčejné RNN je na odpovídajícím místě činitel WT a derivace tanh (díl o RNN).
∂E/∂ct−1 = ft ⊙ ( ∂E/∂ct + ∂E/∂ht ⊙ ot ⊙ (1 − tanh2 ct) )
- ∂E/∂ct, ∂E/∂ct−1
- chybový signál v paměti — ten, který jede po dálnici zpátky
- ft
- zapomínací brána — jediný činitel na přímé cestě; co dopředu propustí z paměti, to dozadu propustí ze signálu
- ∂E/∂ht ⊙ ot ⊙ (1 − tanh2 ct)
- signál, který do paměti přiteče z výstupu ht (přes výstupní bránu a tanh) — v každém kroku se na dálnici může přidat nový
Příklad — součin bran po deseti krocích
Zjednodušeně: ať má zapomínací brána v každém kroku přesně hodnotu σ(práh). Pak po deseti krocích po dálnici zbude
práh 3: 0,95310 = 0,62, práh 1: 0,73110 = 0,044
(barvy podle vzorce výše: ft = σ(práh) v každém z deseti kroků).
U GRU hraje roli f činitel 1 − z (barva podle vzorce GRU), s nulovým prahem 1 − σ(0) = 0,5, a 0,510 = 0,001.
Naměřené křivky v grafu nejsou přesně tyto součiny — brány v nenaučené síti kolísají kolem σ(práh) a signál teče i jinudy (přes h a brány) — ale pořadí tří variant s branami je stejné: čím blíž je brána k 1, tím víc signálu dojde.
6. Co přinese učení: poctivý pokus
Teď stejnou úlohu „první symbol přes mezeru“ všechny čtyři varianty učíme: 16 skrytých neuronů, obyčejný gradientní sestup na 3 000 posloupnostech, tři náhodné starty. Počítáme, kolik startů se úlohu naučilo (přesnost nad 95 %):
for varianta in RNN, LSTM práh 1, LSTM práh 3, GRU:
for mezera T in 10, 30, 60:
for start in 1, 2, 3: # tři náhodné počáteční váhy
síť = nová(varianta, start) # 16 skrytých, vstup 5, výstup 2
opakuj 3 000×:
x = A nebo B, pak T − 1 rušivých symbolů
g = zpětné šíření v čase(síť, x, cíl = první symbol)
g = g · min(1, 5 / ‖g‖) # ořezání gradientu
váhy = váhy − 0,1 · g
přesnost = podíl správných na 300 nových posloupnostech
naučila se = přesnost > 0,95
| Délka mezery | RNN | LSTM, práh 1 | LSTM, práh 3 | GRU |
|---|---|---|---|---|
| 10 kroků | 3 ze 3 | 3 ze 3 | 3 ze 3 | 3 ze 3 |
| 30 kroků | 1 ze 3 | 0 ze 3 | 3 ze 3 | 0 ze 3 |
| 60 kroků | 3 ze 3 | 0 ze 3 | 0 ze 3 | 0 ze 3 |
Výsledek je méně učebnicový, než by se čekalo, a stojí za to ho číst pozorně. Na mezeře 30 kroků se spolehlivě učí jen LSTM s otevřenou dálnicí (práh 3) — přesně podle grafu útlumu. LSTM s prahem 1 a GRU, kterým signál na začátku utíká stejně rychle jako RNN, se nenaučí nic. Obyčejná RNN je loterie: na 30 krocích uspěla jednou ze tří, na 60 krocích třikrát. Ta úspěšná si totiž vytvořila stav, který se sám drží — a když se to na začátku učení podaří, další kroky už ho jen zpevní; o vzdálenosti pak rozhoduje spíš náhoda startu než síla gradientu. Na 60 krocích nestačilo LSTM 3 000 posloupností.
Co si z toho odnést: brány dávají síti mechanismus, kterým si informaci udrží a po kterém k ní dojde chybový signál. Jestli se ho síť naučí využít, záleží na inicializaci a na množství učení. Skutečné úlohy — jazyk, řeč — mají souvislosti na desítkách až stovkách kroků a miliony příkladů, a tam se LSTM a GRU proti obyčejným RNN prosadily jasně.
7. LSTM a GRU dnes
- Historie. Původní LSTM (1997) zapomínací bránu neměla — přidali ji Felix Gers, Jürgen Schmidhuber a Fred Cummins v roce 2000. Doporučení nastavit práh zapomínací brány kladný se ustálilo kolem roku 2015.
- Vrchol. V letech 2014–2017 byly LSTM a GRU standardem pro strojový překlad (sekvence na sekvenci), rozpoznávání řeči a modelování jazyka.
- Po transformerech. Transformery vidí celou posloupnost naráz a dají se trénovat paralelně, takže v jazyce rekurentní sítě vytlačily. LSTM ale zůstávají v časových řadách, v malých zařízeních a v řízení; a moderní architektury jako xLSTM (2024) nebo stavové modely se k myšlence řízené paměti vracejí.
8. Shrnutí
- Brána je sigmoida, která po složkách pouští nebo zastavuje informaci; síť ji řídí podle vstupu.
- LSTM má paměťovou buňku, do které se jen násobí zapomínací branou a přičítá — informace i chyba po ní projdou mnoho kroků.
- Ručně nastavená buňka si podržela symbol přes 100 kroků (paměť z −0,993 na −0,777).
- GRU má dvě brány a o čtvrtinu méně vah (1 090 proti 1 442).
- Rozhoduje práh zapomínací brány: s prahem 3 doputovalo přes 59 kroků 48 % signálu a LSTM se mezeru 30 kroků naučila ve všech startech; s prahem 1 v žádném.
Chcete si to osahat? Nechte AI agenta natrénovat v PyTorchi malou LSTM a GRU na předpovídání dalšího znaku textu a porovnat je s obyčejnou RNN — a pak zkuste totéž s prahem zapomínací brány 0 a 3.
Máte na to jiný názor? Napište na support@coden-app.com.