Mechanizm atencji (attention mechanism) to najważniejsza innowacja w historii przetwarzania języka naturalnego. Wprowadzony w artykule „Attention Is All You Need" (Vaswani et al., 2017), stał się fundamentem transformerów — architektury napędzającej ChatGPT, Claude, Gemini i praktycznie każdy nowoczesny model AI. Zrozumienie atencji to klucz do zrozumienia, jak działają LLM.

Intuicja: czytanie ze zrozumieniem

Kiedy czytasz zdanie „Bank nad rzeką był porośnięty mchem", jak rozumiesz słowo „bank"? Patrzysz na kontekst — słowa „rzeką" i „mchem" wskazują na brzeg rzeki, nie instytucję finansową. Twój mózg selektywnie skupia uwagę na najistotniejszych słowach.

Mechanizm atencji robi dokładnie to samo: dla każdego elementu wejścia (tokenu) oblicza, ile uwagi poświęcić każdemu innemu elementowi, budując kontekstową reprezentację.

Dlaczego atencja była potrzebna?

Przed transformerami dominowały sieci rekurencyjne (RNN, LSTM). Przetwarzały tekst sekwencyjnie — token po tokenie, od lewej do prawej. Problem:

  • Wąskie gardło pamięci — informacja z początku zdania musi „przeżyć" przejście przez dziesiątki/setki kroków, tracąc szczegóły
  • Brak równoległości — każdy krok zależy od poprzedniego, nie można zrównoleglić na GPU
  • Trudność z długimi zależnościami — w zdaniu „Kot, który wczoraj bawił się z piłką w ogrodzie pani Kowalskiej, zasnął" podmiot (kot) i orzeczenie (zasnął) są daleko od siebie

Atencja rozwiązuje te problemy: każdy token może „patrzeć" na każdy inny token jednocześnie, niezależnie od odległości.

Self-Attention — krok po kroku

Self-attention (samoatencja) to mechanizm, w którym element sekwencji oblicza relację z każdym innym elementem tej samej sekwencji. Oto jak działa:

Krok 1: Tworzenie wektorów Query, Key, Value

Dla każdego tokenu wejściowego (reprezentowanego jako wektor embeddingu) tworzymy trzy wektory przez mnożenie przez wyuczone macierze:

  • Query (Q) — „czego szukam?"
  • Key (K) — „co oferuję?"
  • Value (V) — „jaką informację niosę?"

Analogia biblioteczna: Q to zapytanie w wyszukiwarce, K to tytuły/tagi książek, V to treść książek. Mechanizm szuka dopasowań Q–K, a następnie zwraca ważoną kombinację V.

Krok 2: Obliczanie wag atencji (Attention Scores)

Dla każdej pary tokenów obliczamy iloczyn skalarny Query jednego tokenu z Key drugiego:

score(i, j) = Q_i · K_j / √d_k

Gdzie d_k to wymiar wektorów Key (dzielenie stabilizuje gradienty — bez niego duże wymiary prowadzą do ekstremalnych wartości).

Wynik: macierz uwag (attention matrix) o wymiarach n × n (n = długość sekwencji).

Krok 3: Normalizacja Softmax

Wagi atencji przechodzą przez Softmax, który przekształca je w rozkład prawdopodobieństwa (wartości ≥ 0, suma = 1 w każdym wierszu):

α_ij = softmax(score(i, j))

Teraz α_ij mówi: „ile uwagi token i poświęca tokenowi j".

Krok 4: Ważona suma wartości

Wyjście dla tokenu i to ważona suma wektorów Value wszystkich tokenów:

output_i = Σⱼ α_ij · V_j

Tokeny, na które zwrócono dużą uwagę (wysoki α), mają duży wpływ na wynik. Tokeny z niskim α są ignorowane.

Ładowanie wizualizacji...

Formuła zbiorcza

Attention(Q, K, V) = softmax(Q · Kᵀ / √d_k) · V

To cała magia — jedna linijka wzoru leżąca u podstaw rewolucji AI.

Multi-Head Attention

Pojedyncza głowa atencji uczy się jednego „rodzaju" relacji. Ale w języku relacje są wielowymiarowe: syntaktyczne (podmiot–orzeczenie), semantyczne (synonim, antonim), koreferencyjne (zaimek–rzeczownik).

Multi-head attention rozwiązuje to przez uruchomienie wielu głów atencji równolegle, każda z własnymi macierzami Q, K, V:

MultiHead(Q, K, V) = Concat(head₁, ..., headₕ) · W_O

Gdzie headᵢ = Attention(Q · W_Qᵢ, K · W_Kᵢ, V · W_Vᵢ)

Typowy transformer ma 8–128 głów atencji. Każda głowa specjalizuje się w innym aspekcie — np. jedna śledzi relacje syntaktyczne, inna semantyczne, inna pozycyjne.

Masked (Causal) Attention

W modelach generujących tekst (GPT, Claude) token nie powinien „widzieć" przyszłych tokenów — bo w momencie generowania ich jeszcze nie ma. Rozwiązanie: maskowana atencja — macierz uwag jest zamaskowana trójkątną macierzą, zerując wagi dla tokenów leżących „w przyszłości".

To sprawia, że generowanie jest autoregresyjne: model generuje token po tokenie, opierając się wyłącznie na tokenach wcześniejszych.

Enkoder vs. Dekoder

  • Enkoder (BERT) — dwukierunkowa atencja, token widzi wszystkie inne tokeny. Idealny do rozumienia tekstu
  • Dekoder (GPT, Claude) — jednokierunkowa (maskowana) atencja. Idealny do generowania tekstu
  • Enkoder-dekoder (T5, oryginalny transformer) — enkoder rozumie wejście, dekoder generuje wyjście. Cross-attention łączy oba

Cross-Attention

W modelach enkoder-dekoder cross-attention pozwala dekoderowi „patrzeć" na wynik enkodera:

  • Q pochodzi z dekodera (bieżący token generowany)
  • K i V pochodzą z enkodera (zrozumiany tekst wejściowy)

Kluczowe w tłumaczeniu maszynowym: dekoder generując słowo w polskim, „patrzy" na odpowiednie słowo w angielskim tekście źródłowym.

KV-Cache — optymalizacja inference

Podczas generowania tekstu model oblicza atencję dla każdego nowego tokenu. Ale K i V dla wcześniejszych tokenów się nie zmieniają. KV-cache przechowuje te wartości, unikając redundantnych obliczeń. Bez niego generowanie byłoby O(n²) z każdym nowym tokenem; z KV-cache jest O(n).

To dlatego modele z długim kontekstem wymagają dużo pamięci RAM — KV-cache rośnie liniowo z długością kontekstu.

Flash Attention

Standardowa atencja wymaga macierzy uwag n × n w pamięci — dla kontekstu 100K tokenów to 10 miliardów pozycji. Flash Attention (Tri Dao, 2022) to implementacja atencji, która:

  • Nie materializuje pełnej macierzy uwag w pamięci
  • Wykorzystuje hierarchię pamięci GPU (SRAM vs. HBM)
  • Osiąga 2–4× przyspieszenie bez zmiany wyniku

Flash Attention umożliwił praktyczne użycie kontekstów 100K–1M tokenów.

Atencja poza NLP

Mechanizm atencji okazał się uniwersalny:

  • Vision Transformers (ViT) — obrazy dzielone na łatki (patches), przetwarzane jak tokeny tekstu
  • AlphaFold — atencja między aminokwasami w łańcuchu białkowym przewiduje strukturę 3D
  • DALL-E, Stable Diffusion — cross-attention między tekstem (prompt) a generowanym obrazem
  • Perceiver — ujednolicona architektura atencji dla tekstu, obrazów, dźwięku i wideo
  • Modele audio — atencja w rozpoznawaniu mowy (Whisper) i generowaniu muzyki

Skalowanie i wyzwania

Złożoność O(n²)

Fundamentalne wyzwanie: self-attention ma złożoność obliczeniową i pamięciową O(n²), gdzie n to długość sekwencji. Podwojenie kontekstu oznacza czterokrotny wzrost kosztów.

Efektywne warianty atencji

Badacze opracowali wiele wariantów redukujących złożoność:

  • Sparse Attention — zamiast pełnej macierzy n × n, atencja do podzbioru tokenów
  • Linear Attention — aproksymacja softmax eliminująca kwadratową zależność
  • Sliding Window Attention (Mistral) — lokalna atencja w oknie + globalna dla wybranych tokenów
  • Ring Attention — dystrybucja długich kontekstów na wiele GPU

Podsumowanie

Mechanizm atencji to prawdopodobnie najważniejsza innowacja AI XXI wieku. Formuła softmax(QKᵀ/√d) · V — elegancko prosta — umożliwiła modelom „rozumienie" kontekstu na niespotykaną skalę. Od tokenizacji tekstu przez atencję do generowania odpowiedzi — atencja jest sercem każdego LLM.