Transformer
Jak działa
Wejście jest tokenizowane i osadzane w przestrzeni d_model, po czym dodawane jest positional encoding. Sekwencja przechodzi przez stos identycznych bloków: każdy blok zawiera multi-head self-attention (Query/Key/Value liczone z embeddingów; attention(Q,K,V)=softmax(QK^T/√d_k)V) oraz pozycyjną sieć feed-forward (zazwyczaj 4× szerokość d_model). Wokół każdej pod-warstwy stosowane są połączenia rezydualne i LayerNorm. W wariancie enkoder-dekoder dekoder ma dodatkową warstwę cross-attention nad wyjściem enkodera oraz maskowanie causal w self-attention.
Rozwiązany problem
Modelowanie zależności długozasięgowych w sekwencjach z możliwością pełnego zrównoleglenia obliczeń podczas treningu — czego nie umożliwiały RNN/LSTM ze względu na sekwencyjną naturę propagacji w czasie.
Mocne strony i ograniczenia
Komponenty
Mechanizm pozwalający każdej pozycji w sekwencji uczestniczyć w obliczeniach wszystkich pozostałych pozycji. Wejście jest projektowane na trzy macierze: Query (Q), Key (K), Value (V). Wagi uwagi obliczane są jako softmax(QK^T/sqrt(d_k)) i mnożone przez V. Wiele 'głów' wykonuje tę operację równolegle w niskowymiarowych podprzestrzeniach, a wyniki są konkatenowane i projektowane przez macierz W_O.
Oficjalna
Dwuwarstwowa sieć MLP (Linear → aktywacja → Linear) stosowana niezależnie do każdej pozycji sekwencji. W oryginale: ReLU, wymiar ukryty d_ff = 4·d_model. W nowoczesnych modelach często GLU/SwiGLU/GeGLU (LLaMA, PaLM).
Oficjalna
Normalizacja aktywacji w obrębie warstwy (per-token), kluczowa dla stabilności trenowania głębokich Transformerów. W oryginale Post-LN (po sub-blocku); współcześnie dominuje Pre-LN (przed sub-blocku) lub RMSNorm (uproszczona wersja bez centrowania).
Oficjalna
Dodawanie wejścia sub-bloku do jego wyjścia (y = x + f(x)). Umożliwia trenowanie modeli o setkach warstw bez vanishing gradients i daje 'residual stream' — interpretowalny kanał komunikacji między warstwami (Elhage et al. 2021).
Mechanizm wstrzykiwania informacji o pozycji tokena do modelu pozbawionego rekurencji. W oryginale: addytywne sinusoidalne PE. Współcześnie dominują pozycje względne (RoPE — Rotary Position Embedding, ALiBi), które generalizują na dłuższe konteksty.
Oficjalna
Implementacja
Oryginalny układ Post-LayerNorm (LN po residualu) prowadzi do dużych norm aktywacji w głębokich stosach (>12 warstw) i wymaga kosztownego learning-rate warmup oraz precyzyjnego strojenia inicjalizacji. Bez tego trening rozjeżdża się.
Jeśli iloczyn skalarny Q·K nie jest dzielony przez sqrt(d_k), softmax wpada w region nasycony dla dużych d_k, gradient zanika i model się nie uczy.
Naiwna implementacja alokuje macierz T×T w HBM, co dla T=32K i fp16 wymaga 2 GB per warstwa — szybko wyczerpuje pamięć GPU przy długich kontekstach.
Podczas inferencji autoregresyjnej KV-cache zajmuje O(L · T · d_model · 2) pamięci. Dla LLaMA-3-70B przy T=128K to ~40 GB — ograniczenie batch size i throughput.
Pomyłka w trójkątnej masce (np. off-by-one, mask po softmax zamiast przed) powoduje wyciek przyszłych tokenów do trenowania — model wygląda na świetny w treningu, ale zawodzi w inferencji.
Wagi modeli BERT (Post-LN) i GPT-2/LLaMA (Pre-LN) nie są wymienne w tym samym kodzie — załadowanie wag w niewłaściwy układ daje śmieciową predykcję bez błędu runtime.
Ewolucja
Bahdanau et al. wprowadzają mechanizm soft attention w tłumaczeniu maszynowym opartym na RNN — prekursor self-attention.
Vaswani et al. publikują architekturę Transformer, eliminując rekurencję na rzecz wyłącznie multi-head self-attention.
Devlin et al. (BERT, encoder-only) i Radford et al. (GPT, decoder-only) udowadniają, że pre-trening Transformera na ogromnych korpusach + fine-tuning to dominujący paradygmat NLP.
Brown et al. (GPT-3, 175B) i Kaplan et al. (scaling laws) pokazują przewidywalne skalowanie wydajności wraz z parametrami, danymi i compute.
Dosovitskiy et al. pokazują, że Transformer pracujący na patchach obrazu pokonuje CNN na ImageNet — start ekspansji Transformerów poza NLP.
Dao et al. wprowadzają I/O-aware exact attention, redukując ruch HBM↔SRAM i czyniąc trening długokontekstowy praktycznym.
Mistral AI udostępnia Mixtral — open-weight MoE Transformer dorównujący GPT-3.5 przy ułamkowym koszcie inferencji.
OpenAI o1 i DeepSeek-R1 wprowadzają test-time compute scaling przez długie chain-of-thought na bazie Transformera — nowa oś skalowania.
Złożoność obliczeniowa
Złożoność czasowa: O(T² · d_model) per warstwa (uwaga) + O(T · d_model · d_ff) (FFN). Złożoność przestrzenna: O(T² + T·d_model) per warstwa (naiwnie) → O(T·d_model) z FlashAttention.
Wąskie gardło obliczeniowe
Standardowa self-attention skaluje się jak O(T²) względem długości sekwencji, co staje się dominującym kosztem przy długich kontekstach (>8K tokenów). Pamięciowo macierz uwagi T×T staje się niemożliwa do zmaterializowania bez technik tile-based (FlashAttention).
Paradygmat wykonania
Wariant MoE (Switch Transformer, Mixtral) zmienia paradygmat na conditional/mixture, ale jest to rozszerzenie klasycznego Transformera, nie sam Transformer.
Klasyczny Transformer aktywuje wszystkie parametry dla każdego tokena. Routing pojawia się dopiero w wariantach MoE-FFN, gdzie część parametrów (eksperci) jest aktywowana warunkowo.
Równoległość
Pełna równoległość względem pozycji w sekwencji była głównym powodem dominacji Transformerów nad RNN — RNN wymagały sekwencyjnego rozwijania w czasie również w treningu.
Wymagania sprzętowe
Dense matmul (QK^T, attention·V, FFN) idealnie pasują do Tensor Cores. NVIDIA H100/H200/B200 z FP8/FP16/BF16 są de facto standardem trenowania i inferencji Transformerów.
Google TPU v4/v5/v6 były projektowane z myślą o Transformerach (PaLM, Gemini). XLA + JAX/Flax dają wysoką wydajność na dużych skalach.
Inferencja małych Transformerów (np. BERT-base) na CPU AVX-512/AMX jest możliwa (Intel oneDNN, llama.cpp), ale opóźnienia rosną liniowo z długością sekwencji.
FPGA są używane w wyspecjalizowanych zastosowaniach niskolatencyjnych (HFT, edge), ale ograniczenia pamięci HBM i toolchainu czynią je niszowym wyborem.