Robocikowo>ROBOCIKOWO
Architektura

MHA

2017AktywnyOpublikowano: 28 maja 2026Aktualizacja: 28 maja 2026Opublikowany
Multi-Head Attention (MHA) to mechanizm uwagi wprowadzony w pracy „Attention Is All You Need” (2017), który równolegle uruchamia h niezależnych głów Scaled Dot-Product Attention na liniowych projekcjach Q, K, V — każda głowa specjalizuje się w innym aspekcie zależności w sekwencji.
Kluczowa innowacja
Równoległe uruchomienie wielu niezależnych głów Scaled Dot-Product Attention na liniowych projekcjach Q, K, V do podprzestrzeni o niższej wymiarowości — pozwala modelowi jednocześnie uczyć się różnych typów zależności (np. składniowych, semantycznych, długodystansowych) bez zwiększania kosztu obliczeniowego względem pojedynczej głowy.
Kategoria
Architektura
Poziom abstrakcji
Building block
Poziom operacji
Element architekturyModel
Zastosowania
Self-attention w enkoderze i dekoderze TransformeraCross-attention łącząca enkoder z dekoderem w modelach Seq2SeqVision Transformer (ViT) — uwaga między patchami obrazuBERT, GPT, T5 i wszystkie LLM oparte na TransformerzeMultimodalne modele (CLIP, Flamingo) — uwaga między tokenami tekstu i obrazu

Jak działa

Krok 1: Wejście X ∈ R^(n×d_model) jest projektowane h razy przez wyuczalne macierze W^Q_i, W^K_i, W^V_i ∈ R^(d_model × d_k) (gdzie zazwyczaj d_k = d_v = d_model / h), produkując h trójek (Q_i, K_i, V_i). Krok 2: Każda głowa niezależnie liczy head_i = SoftMax(Q_i K_i^T / √d_k) V_i — to standardowy Scaled Dot-Product Attention w niższej wymiarowości. Krok 3: Wyjścia wszystkich głów są konkatenowane wzdłuż wymiaru cech: Concat(head_1, …, head_h) ∈ R^(n × h·d_v = d_model). Krok 4: Konkatenowany wynik przechodzi przez końcową macierz projekcji W^O ∈ R^(d_model × d_model), produkując ostateczne wyjście MHA(Q, K, V) = Concat(head_1, …, head_h) W^O. W oryginalnym Transformerze h=8, d_model=512, d_k=d_v=64.

Rozwiązany problem

Pojedyncza głowa Scaled Dot-Product Attention uśrednia wszystkie zależności w jeden wektor — model musi kompromisem dzielić ograniczoną pojemność reprezentacji między różne typy relacji (gramatyczne, semantyczne, koreferencje, długodystansowe). MHA rozwiązuje to dzieląc d_model na h równoległych podprzestrzeni, w których każda głowa może niezależnie specjalizować się w innym wzorcu uwagi.

Komponenty

Liniowe projekcje Q, K, V (per głowa)Tworzenie wielu reprezentacji wejścia

Trzy zestawy wyuczalnych macierzy wagowych W^Q_i, W^K_i, W^V_i ∈ R^(d_model × d_k) dla każdej z h głów. Projektują wspólne wejście do h niezależnych podprzestrzeni.

Głowy uwagi (Attention heads)Równoległe wyliczanie uwagi w podprzestrzeniach

h niezależnych instancji Scaled Dot-Product Attention działających równolegle. Każda głowa może wyuczyć się innego wzorca uwagi (składnia, semantyka, koreferencje, pozycje sąsiednie).

Multi-Query Attention (MQA)Wszystkie głowy współdzielą jedną parę K, V — zmniejsza KV cache w inferencji.
Grouped-Query Attention (GQA)Grupy głów Q dzielą wspólne K, V — kompromis między MHA a MQA (LLaMA 2/3, Mistral).

Oficjalna

Konkatenacja główŁączenie wyników równoległych głów

Wyjścia wszystkich h głów (każde ∈ R^(n×d_v)) są łączone wzdłuż wymiaru cech do tensora R^(n × h·d_v).

Końcowa macierz projekcji W^OFuzja wyników głów do d_model

Wyuczalna macierz W^O ∈ R^(d_model × d_model) miksująca informacje między głowami i dopasowująca wymiarowość do reszty sieci.

Implementacja

Pułapki implementacyjne
Pominięcie skalowania przez √d_kKrytyczna

Bez dzielenia iloczynów skalarnych Q K^T przez √d_k przy większych wymiarach softmax przechodzi w skrajne wartości, gradienty zanikają i model nie uczy się.

Rozwiązanie:Zawsze stosuj scaled dot-product attention — to integralna część MHA, nie opcja.
Błędna maska causal w dekoderzeKrytyczna

Brak lub niepoprawna maska górno-trójkątna w dekoderze pozwala modelowi „widzieć przyszłość” podczas trenowania — perplexity wygląda dobrze, ale generacja jest zepsuta.

Rozwiązanie:Zweryfikuj maskę na małym przykładzie — porównaj wyjście z pełną sekwencją vs. prefix po prefiksie. Powinny być identyczne dla każdej pozycji i.
Błędny reshape przy split/concat główWysoka

Zamieszanie kolejności wymiarów (batch, heads, seq, d_k) vs (batch, seq, heads, d_k) przy reshape/transpose prowadzi do mieszania informacji między pozycjami a głowami.

Rozwiązanie:Używaj nazwanych tensorów lub einsum z jasną notacją indeksów; testuj na sekwencji o znanym wzorcu uwagi.
Niewłaściwy KV cache w inferencjiWysoka

Ponowne liczenie K, V dla wszystkich poprzednich tokenów przy każdym nowym tokenie autoregresyjnym daje O(n³) zamiast O(n²) i degraduje throughput LLM 10–100×.

Rozwiązanie:Implementuj KV cache: trzymaj K, V z poprzednich kroków i appendij tylko nowy token. Rozważ MQA/GQA przy dużych modelach.

Ewolucja

Oryginalny paper · 2017 · NeurIPS 2017 · Ashish Vaswani
Attention Is All You Need
Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin
2017
Wprowadzenie Multi-Head Attention w Transformerze
Punkt przełomowy

Vaswani et al. definiują MHA z h=8 głowami i d_k=64 jako kluczowy element architektury Transformer, zastępując rekurencję pełną równoległością.

2018
BERT i GPT-1 — MHA w skali

Google (BERT) i OpenAI (GPT-1) udowadniają, że MHA skaluje się do setek milionów parametrów i dominuje benchmarki NLP.

2019
Multi-Query Attention (MQA)

Noam Shazeer („Fast Transformer Decoding”) proponuje MQA — jeden wspólny K, V dla wszystkich głów Q, redukując KV cache i przyspieszając inferencję.

2022
FlashAttention — IO-aware MHA
Punkt przełomowy

Tri Dao et al. wprowadzają FlashAttention — exact MHA z tilingiem w SRAM, eliminując materializację macierzy n×n w HBM. 2–4× szybciej, mniejsze zużycie pamięci.

2023
Grouped-Query Attention (GQA) w LLaMA 2
Punkt przełomowy

Ainslie et al. proponują GQA — kompromis między MHA a MQA, grupy głów Q dzielą K, V. Adoptowane przez LLaMA 2, Mistral, LLaMA 3 jako standard dla LLM ery 2023+.

Hiperparametry (konfigurowalne osie)

Liczba głów (h)Krytyczna

Liczba równoległych głów uwagi. Musi dzielić d_model. Więcej głów = bardziej zróżnicowane wzorce uwagi, ale mniejsza wymiarowość d_k każdej głowy.

8Oryginalny Transformer (d_model=512)
12BERT-base (d_model=768)
16BERT-large, GPT-2 (d_model=1024)
96GPT-3 175B (d_model=12288)
Wymiarowość per głowa (d_k = d_v)Wysoka

Wymiar Q, K, V dla pojedynczej głowy. Konwencjonalnie d_k = d_model / h, ale to nie jest wymóg — można rozdzielić niezależnie.

64Standard w większości modeli (h=8, d_model=512 → d_k=64)
128GPT-3, LLaMA — większa pojemność per głowa
Wzorzec maski uwagiKrytyczna

Maskowanie pozycji niedozwolonych: causal (dekoder, GPT), full (enkoder, BERT), padding mask, custom (sliding window).

causalDekodery autoregresyjne — GPT, LLaMA
full bidirectionalEnkodery — BERT, ViT

Złożoność obliczeniowa

Złożoność czasowa: O(n² · d_model). Złożoność przestrzenna: O(n² + n · d_model).

Wąskie gardło obliczeniowe

Iloczyn Q K^T i softmax o złożoności O(n²)

Macierz wag uwagi n×n musi być w pełni materializowana (lub strumieniowana jak w FlashAttention) — to dominuje koszt zarówno czasu jak i pamięci HBM przy długich sekwencjach.

Paradygmat wykonania

Tryb główny
Gęsty

Każda głowa aktywuje się dla każdego tokena — w przeciwieństwie do sparse attention czy MoE wszystkie ścieżki obliczeniowe są zawsze używane.

Wzorzec aktywacji
Wszystkie ścieżki aktywne

Równoległość

Poziom równoległości
W pełni równoległy

Wszystkie h głów oraz wszystkie pozycje w sekwencji liczone są równolegle. To kluczowa różnica względem RNN i powód masowej skalowalności Transformera na GPU/TPU.

Zakres
TreningInferencjaPomiędzy tokenamiPomiędzy warstwami

Wymagania sprzętowe

Podstawowe

Operacje GEMM (Q K^T i Attention·V) idealnie pasują do Tensor Cores; wszystkie h głów liczone w równoległych blokach.

Podstawowe

Systolic array TPU jest zoptymalizowany pod gęste mnożenia macierzy — bezpośrednio wykorzystywany przez Transformery na TPU (BERT, T5, PaLM).

Ograniczony

Wykonalne na CPU, ale O(n²) bez wsparcia sprzętowego daje niską przepustowość — używane głównie w inferencji małych modeli.