W warstwie attention MQA, dla wejścia x: wszystkie H głów Q są obliczane niezależnie (Q_i = x · W_Q^i), natomiast K i V są obliczane raz jako pojedyncze projekcje (K = x · W_K, V = x · W_V) bez wymiaru głowy. W operacji attention każda głowa Q_i atakuje to samo wspólne K i V. Implementacyjnie sprowadza się to do broadcastu K i V po wymiarze głów. Cache przechowuje tylko jeden K i jeden V per token zamiast H — redukcja H-krotna (zwykle 8-128×).
Standardowa Multi-Head Attention generuje KV cache o rozmiarze proporcjonalnym do liczby głów H, co czyni autoregresywną inferencję długich kontekstów memory-bound i drogim — koszt rośnie liniowo z H.
Pojedyncza macierz W_K projektująca x na jedną głowę Key, współdzieloną przez wszystkie głowy Q.
Pojedyncza macierz W_V projektująca x na jedną głowę Value, współdzieloną przez wszystkie głowy Q.
H osobnych macierzy W_Q^i, dających H osobnych zapytań — zachowuje wielowymiarową przestrzeń uwagi po stronie zapytań.
MQA może obniżyć jakość modelu o 1-3% na benchmarkach i utrudniać konwergencję, zwłaszcza przy treningu od zera.
Korzyść MQA materializuje się dopiero przy długim kontekście lub dużym batch — przy krótkich promptach i batch=1 redukcja cache jest pomijalna.
Shazeer identyfikuje KV cache jako wąskie gardło inferencji i proponuje współdzielenie K/V między głowami Q.
Google używa MQA w PaLM 540B dla szybszej inferencji przy zachowaniu jakości — pierwsze duże wdrożenie produkcyjne.
TII używa MQA w Falcon-40B/180B — pierwszy szeroko dostępny open-source model z MQA.
GQA interpoluje między MHA a MQA, oferując lepszy trade-off jakość/pamięć — wypiera MQA w nowszych modelach.
Wszystkie głowy Q są zawsze aktywne; różnica vs MHA leży w strukturze parametrów, nie w wzorcu aktywacji.