Robocikowo>ROBOCIKOWO
Architektura

Long Short-Term Memory

mature
Bramkowany wariant sieci rekurencyjnej, który dzięki komórce stanu i bramkom (input, forget, output) skutecznie modeluje zależności długoterminowe i łagodzi problem zanikającego gradientu.
Kategoria
Architektura
Poziom abstrakcji
Primitive
Poziom operacji
ModelInferencjaTrening
Zastosowania
Tłumaczenie maszynowe (seq2seq + atencja)Rozpoznawanie mowy on-device i offline ASRModelowanie i prognozowanie szeregów czasowych (finansowych, energetycznych)Generowanie tekstu i podpisywanie obrazów (image captioning)Modelowanie sekwencji biologicznych (DNA, białka)Rozpoznawanie pisma odręcznego i HTR

Jak działa

1. Bramka zapominania: f_t = σ(W_f·[h_{t-1}, x_t] + b_f). Decyduje, co usunąć z poprzedniego stanu komórki. 2. Bramka wejścia + kandydat: i_t = σ(W_i·[h_{t-1}, x_t] + b_i), g_t = tanh(W_g·[h_{t-1}, x_t] + b_g). Decyduje, jaką nową informację dodać. 3. Aktualizacja stanu komórki: c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_t. Addytywna suma zapobiega znikaniu gradientu (Constant Error Carousel). 4. Bramka wyjścia: o_t = σ(W_o·[h_{t-1}, x_t] + b_o), h_t = o_t ⊙ tanh(c_t). Filtruje, co z komórki przekazać dalej. 5. W wariancie BiLSTM: dwie sieci LSTM przetwarzają sekwencję w obu kierunkach, a ich stany są konkatenowane. 6. W seq2seq: enkoder LSTM koduje całą sekwencję do wektora kontekstu, dekoder LSTM generuje wyjście krok po kroku.

Rozwiązany problem

Vanilla RNN cierpi na problem zanikającego gradientu: przy długich sekwencjach sygnał błędu eksponencjalnie maleje, uniemożliwiając sieci naukę zależności odległych o setki kroków. LSTM rozwiązuje ten problem przez wprowadzenie addytywnej komórki stanu (cell state) — osobnego kanału informacyjnego biegnącego przez sekwencję z minimalnymi przekształceniami — oraz bramek sterujących przepływem informacji, które pozwalają selektywnie zapamiętywać i zapominać.

Kluczowe mechanizmy

Komórka stanu (cell state) — kanał informacyjny z minimalnymi przekształceniami liniowymi
Bramka zapominania: f_t = σ(W_f · [h_{t-1}, x_t] + b_f)
Bramka wejścia: i_t = σ(W_i · [h_{t-1}, x_t] + b_i) oraz kandydat: g_t = tanh(W_g · [h_{t-1}, x_t] + b_g)
Aktualizacja stanu: c_t = f_t ⊙ c_{t-1} + i_t ⊙ g_t
Bramka wyjścia: o_t = σ(W_o · [h_{t-1}, x_t] + b_o), wyjście: h_t = o_t ⊙ tanh(c_t)
Constant Error Carousel (CEC) — addytywna ścieżka stanu zapobiegająca zanikaniu gradientu
Peephole connections (opcjonalnie) — bramki obserwują c_{t-1}
Wariant dwukierunkowy (BiLSTM) — konkatenacja stanów z dwóch kierunków

Mocne strony i ograniczenia

Mocne strony
Skutecznie modeluje zależności długoterminowe (setki kroków)
Łagodzi problem zanikającego gradientu dzięki addytywnej komórce stanu
Streamowa inferencja: O(1) pamięci na token
Liniowa złożoność względem długości sekwencji (vs O(T²) w Transformerze)
Dobre wyniki na małych i średnich zbiorach danych
Dojrzała implementacja na CPU/GPU/akceleratorach edge
Ograniczenia
Wciąż sekwencyjny — słaba paralelizacja treningu po długości sekwencji
Większa liczba parametrów na komórkę vs vanilla RNN (4× macierze wagi)
Trudniejsza optymalizacja vs Transformer dla dużych modeli
Słabsza wydajność niż Transformer na bardzo długich kontekstach tekstowych
Skala efektywna ograniczona (rzadko powyżej setek milionów parametrów w produkcji NLP)
Tuning hiperparametrów (warstwy, dropout, gradient clipping) jest mało wybaczający

Implementacja

Pułapki implementacyjne
Sekwencyjne przetwarzanie blokuje równoległość treninguŚrednia

LSTM przetwarza czas sekwencyjnie — brak możliwości pełnego zrównoleglenia jak w Transformerze. Trening na długich sekwencjach jest wąskim gardłem throughput.

Gradient clipping obowiązkowy — exploding gradientsŚrednia

LSTM jest podatne na eksplodujące gradienty bez clippingu. Standardem jest clip_grad_norm=1.0 lub clip_grad_value — pominięcie tego prowadzi do NaN strat w kilka iteracji.

Ewolucja

Oryginalny paper · 1997 · Neural Computation · Sepp Hochreiter
Long Short-Term Memory
Sepp Hochreiter, Jürgen Schmidhuber
1997
Hochreiter i Schmidhuber publikują oryginalny LSTM z bramkami input i output oraz Constant Error Carousel.
1999
Gers, Schmidhuber i Cummins dodają bramkę zapominania (forget gate) — wariant standardowy do dziś.
2000
Gers i Schmidhuber wprowadzają peephole connections, pozwalające bramkom obserwować stan komórki.
2014
Cho et al. proponują GRU — uproszczony wariant LSTM z dwoma bramkami.
2014
Sutskever, Vinyals i Le pokazują seq2seq oparty na LSTM, osiągając SOTA w tłumaczeniu maszynowym.
2016
Google wdraża GNMT — produkcyjny LSTM seq2seq z atencją w Google Translate.
2017
Pojawienie się Transformera ("Attention Is All You Need") rozpoczyna proces wypierania LSTM w NLP.
2024
Beck, Hochreiter i in. publikują xLSTM — odświeżony wariant LSTM skalujący się jak modele Transformerowe.

Złożoność obliczeniowa

Charakterystyki obliczeniowe
Złożoność czasowa: O(T · d²) jak w RNN, ze stałą ok. 4× większą (4 bramki)
Pamięć treningu: O(T · d) dla BPTT
Inferencja streamowa O(1) pamięci na token
Bardzo dobrze wspierane jądra cuDNN LSTM dla nVIDIA GPU
Słaba paralelizacja po długości sekwencji — silnie sekwencyjny w treningu
Liczba parametrów na komórkę: 4(d_h · (d_h + d_x) + d_h)
Uwagi do benchmarku

W Penn Treebank LSTM osiągał perplexity ~78 (vs ~120 dla vanilla RNN). Google Neural Machine Translation (8-warstwowy LSTM seq2seq z atencją) w 2016 r. zredukował błąd tłumaczenia o ~60% względem PBMT. W ASR (Switchboard) głębokie LSTM osiągały WER ok. 5,5% — przez wiele lat SOTA. Na klasycznych benchmarkach time-series (M4) LSTM pozostaje jednym z najsilniejszych podejść neuralnych.

Wymagania sprzętowe

cuDNN dostarcza zoptymalizowane fused kernele dla LSTM — 5-10× szybsze niż naiwna implementacja PyTorch. Szczególnie ważne przy dużych batch sizes.