Sieci RNN od LSTM do atencji liniowej: dlaczego rekurencja przegrała i jak wróciła
Część 4 serii o architekturach. Aktualizacja rekurencyjna, dlaczego gradienty zanikają albo eksplodują przy długich sekwencjach (0,9¹⁰⁰ to 2,7 × 10⁻⁵), jak naprawiły to bramki LSTM, dlaczego transformery i tak zastąpiły sieci RNN i jak modele przestrzeni stanów oraz atencja liniowa przywróciły rekurencję o stałym zużyciu pamięci do dzisiejszych hybrydowych LLM.
Przed transformerami modele sekwencji były rekurencyjne: czytały po jednym tokenie i przenosiły dalej stan o stałym rozmiarze. Transformery zastąpiły je niemal całkowicie, a potem najlepsze pomysły z rekurencji po cichu wróciły. Model na mojej maszynie do inferencji to hybryda, w której większość warstw jest rekurencyjna. To część 4 serii o architekturach, po decoder-only, encoder-only i encoder-decoder.
Aktualizacja rekurencyjna
Podstawowa sieć RNN trzyma stan ukryty h i aktualizuje go przy każdym wejściu:
h_t = tanh( W_hh · h_{t−1} + W_xh · x_t + b )
Stan ma stały rozmiar niezależnie od długości sekwencji, więc pamięć przy inferencji jest stała, a każdy krok kosztuje tyle samo. To właściwość, z której zrezygnowały transformery, i powód, dla którego rekurencja ciągle wraca.
Dlaczego RNN trudno było trenować
Trening korzysta z propagacji wstecznej w czasie (BPTT): gradient późnego wyjścia względem wczesnego wejścia przechodzi przez każdy krok pośredni, a jakobiany kolejnych kroków mnożą się po drodze. W przybliżeniu skaluje się on jak czynnik jednego kroku podniesiony do potęgi równej liczbie kroków:
0,9¹⁰⁰ ≈ 2,7 × 10⁻⁵ zanikanie: wczesne wejścia przestają wpływać na uczenie
1,1¹⁰⁰ ≈ 13 781 eksplodowanie: trening wybucha
Przeanalizowali to Bengio, Simard i Frasconi (1994) oraz Hochreiter (1991). Zwykła sieć RNN nie potrafi niezawodnie uczyć się zależności obejmujących więcej niż kilkadziesiąt kroków. Na eksplodujące gradienty jest tania poprawka: przycinanie gradientu. Zanikające gradienty wymagały nowej architektury.
LSTM: bramkowana autostrada dla gradientu
LSTM (Hochreiter i Schmidhuber, 1997; bramkę zapominania wprowadzili Gers i in., 2000) dodaje stan komórki c, aktualizowany addytywnie pod kontrolą wyuczonych bramek:
f, i, o = σ(…) bramki zapominania, wejścia, wyjścia (0…1)
c_t = f ⊙ c_{t−1} + i ⊙ candidate_t
h_t = o ⊙ tanh(c_t)
Gdy bramka zapominania jest bliska 1, stan komórki i jego gradient przechodzą przez krok prawie bez zmian. Gradient nie musi już przetrwać stu mnożeń przez funkcję ściskającą. GRU (Cho i in., 2014) upraszcza ten sam pomysł do dwóch bramek.
Sieci LSTM napędzały tłumaczenie maszynowe, rozpoznawanie mowy i rozpoznawanie pisma odręcznego przez większą część lat 2010–2019. Wciąż są rozsądnym wyborem przy małych problemach z szeregami czasowymi; moje repozytorium lstm stroi taką sieć do prognozowania metodą grid search.
Dlaczego wygrały transformery
Zabójczym ograniczeniem nie była jakość, tylko równoległość. h_t zależy od h_{t−1}, więc trening na sekwencji 1000 tokenów wymaga 1000 sekwencyjnych kroków, bez względu na to, ile rdzeni GPU stoi bezczynnie. Transformer przetwarza wszystkie pozycje sekwencji treningowej naraz, a atencja daje każdemu tokenowi bezpośrednią, jednokrokową ścieżkę do każdego innego tokenu, bez długiego łańcucha, przez który musiałby przejść gradient. Na GPU to przesądza sprawę: dużo więcej danych przy tym samym nakładzie obliczeń.
Ceną transformera była pamięć przy inferencji: cache KV rośnie z każdym tokenem, a każdy krok dekodowania go czyta (liczby są w notatce o cache KV).
Rekurencja wraca i da się ją trenować równolegle
Współczesne odrodzenie zachowuje stan zajmujący stałą ilość pamięci, ale sprawia, że rekurencja jest liniowa względem stanu, co pozwala trenować równolegle:
- Modele przestrzeni stanów (SSM). S4 (Gu i in., 2021) i Mamba (Gu i Dao, 2023) używają ustrukturyzowanych rekurencji liniowych. Przy treningu korzystają z równoległych scanów albo splotów, a przy inferencji działają jak RNN. Mamba uzależnia rekurencję od wejścia (jest selektywna) i właśnie dzięki temu stała się konkurencyjna w modelowaniu języka.
- RWKV (Peng i in., 2023): sformułowanie RNN z treningiem w stylu transformera.
- Atencja liniowa i DeltaNet: atencja zapisana na nowo jako rekurencyjna aktualizacja stanu, trenowana w podziale na fragmenty. Gated DeltaNet dodaje zanik i aktualizację regułą delta (matematyka jest w notatce o modelach hybrydowych).
Coraz więcej nowych modeli, takich jak Jamba i Qwen3-Next, używa ich w hybrydach: wiele warstw rekurencyjnych dla taniego kontekstu o stałym zużyciu pamięci plus kilka warstw z pełną atencją dla dokładnego przywoływania. Tak jest zbudowany model, na którym pracuję codziennie, i to dlatego jego kontekst 262K tokenów w ogóle mieści się na jednej karcie 24 GB.
Zasady, których się trzymam
- Stała pamięć na token to powód, żeby sięgać po rekurencję. Jeśli długość kontekstu nie jest Twoim ograniczeniem, zwykła atencja jest prostsza.
- Spodziewaj się hybryd, a nie czystych sieci RNN, w modelowaniu języka na dużą skalę. Dokładne przywoływanie wciąż wymaga trochę atencji.
- Przy małych danych sekwencyjnych LSTM to wciąż tani, mocny punkt odniesienia, zanim sięgniesz po transformer.
Źródła: Hochreiter, Untersuchungen zu dynamischen neuronalen Netzen (1991). Bengio, Simard i Frasconi, Learning long-term dependencies with gradient descent is difficult (1994). Hochreiter i Schmidhuber, Long Short-Term Memory (1997). Gers, Schmidhuber i Cummins, Learning to Forget (2000). Cho i in., GRU (2014). Gu i in., S4 (2021). Gu i Dao, Mamba (2023). Peng i in., RWKV (2023).