Trefon.
← Wszystkie notatki 9 min

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.

Jacek Trefon
  • deep dive
  • RNN
  • LSTM
  • architektura
  • atencja liniowa
Kod ↗

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

  1. 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.
  2. Spodziewaj się hybryd, a nie czystych sieci RNN, w modelowaniu języka na dużą skalę. Dokładne przywoływanie wciąż wymaga trochę atencji.
  3. 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).

Masz podobny problem?

Opisz swój problem

30-minutowa rozmowa techniczna z inżynierem, który to buduje. Bez działu sprzedaży, bez slajdów.