Long Short-Term Memory
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
Mocne strony i ograniczenia
Implementacja
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.
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
Złożoność obliczeniowa
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.