Grouped query attention (GQA) — это способ сделать механизм внимания в трансформерах быстрее и экономнее по памяти без сильной потери качества. В такой схеме несколько query-голов делят общие key и value, поэтому модель хранит и читает меньше промежуточных данных во время инференса.
GQA применяют прежде всего в больших языковых моделях, где узким местом часто становится не сама математика, а передача key-value данных и работа с памятью. Этот подход занимает промежуточное место между обычным multi-head attention и более жёстким multi-query attention.
Содержание статьи
Как коротко определить GQA
GQA — это групповая организация attention-голов, при которой query-головы разбиваются на группы, а каждая группа использует общий набор key и value. За счёт этого уменьшается объём вычислений и нагрузка на память.
Если упростить, то в стандартном внимании каждая голова работает со своими key и value. В multi-query attention один набор key и value делят вообще все query-головы. В GQA используется средний вариант: общие key и value есть не у всех сразу, а у отдельных групп.
Именно поэтому GQA часто рассматривают как компромисс между точностью standard multi-head attention и скоростью multi-query attention.
Почему вообще понадобился новый вариант attention
Новый вариант attention понадобился из-за роста размеров моделей и длины контекста. Чем крупнее модель и чем больше токенов во входе, тем тяжелее хранить и многократно читать промежуточные key и value.
Обычный multi-head attention дал трансформерам высокую выразительность. Но у него есть цена: много матриц весов, много промежуточных представлений, высокая нагрузка на память и пропускную способность. На практике это особенно заметно в decoder-only моделях, которые генерируют текст токен за токеном.
При генерации модель постоянно обращается к уже вычисленным key-value парам. Если таких данных много, задержка растёт. Поэтому исследователи начали искать способы сократить объём этих операций без полного отказа от сильных сторон стандартного внимания.
Как работает standard multi-head attention
Standard multi-head attention создаёт для каждого токена несколько независимых представлений внимания, чтобы модель могла одновременно учитывать разные типы связей в последовательности. Для этого используются векторы query, key и value.
Для каждого токена модель строит три вектора. Query показывает, какую информацию токен ищет. Key описывает, какую информацию токен содержит. Value несёт содержимое, которое будет передано дальше с учётом веса внимания.
Дальше query одного токена сравнивается с key других токенов. По этим совпадениям вычисляются веса внимания. После нормализации модель получает, на какие токены нужно смотреть сильнее, а на какие слабее.
Затем value-векторы суммируются с учётом этих весов, и токен получает обновлённое контекстное представление.
Слово multi-head означает, что такой процесс идёт параллельно в нескольких головах внимания. Каждая голова учится видеть свой тип зависимости: синтаксис, дальний контекст, согласование слов, тематические связи и другие закономерности, которые модель находит во время обучения.
Что такое query, key и value
Query, key и value — это три вида представления одного и того же токена, которые нужны для вычисления внимания. Query отвечает за поиск, key — за совпадение, value — за передачу информации.
Эти векторы получают из исходного эмбеддинга токена через линейные преобразования с разными матрицами весов. То есть модель не хранит отдельные словарные query или key заранее: она вычисляет их на лету внутри слоя.
Что делает softmax в механизме внимания
Softmax превращает сырые оценки совпадения между query и key в нормированные веса внимания. После этого сумма всех весов равна единице.
Благодаря этому модель распределяет внимание между токенами как доли. Если вес близок к нулю, вклад токена почти исчезает. Если вес высокий, значение этого токена заметно влияет на итоговое представление.
В чём слабое место standard multi-head attention
Слабое место standard multi-head attention — большой расход памяти и вычислительных ресурсов. Чем больше голов и длиннее последовательность, тем дороже обслуживание всего механизма.
У каждой головы есть собственные проекции для query, key и value. Это увеличивает число операций и объём промежуточных данных. На длинных последовательностях цена становится особенно заметной.
Для современных языковых моделей это означает ещё и давление на KV cache — кэш key-value пар, который нужен во время генерации. Когда модель выдаёт текст постепенно, этот кэш постоянно растёт, а обращения к нему начинают влиять на скорость ответа.
Что такое multi-query attention и как он устроен
Multi-query attention (MQA) упрощает standard multi-head attention: все query-головы используют один общий набор key и один общий набор value на слой. Это заметно снижает расход памяти и ускоряет инференс.
Идея простая. Query остаются раздельными по головам, поэтому модель всё ещё может смотреть на данные под разными углами. Но key и value больше не дублируются для каждой головы отдельно. Их вычисляют один раз и переиспользуют.
Такой подход уменьшает объём хранения и число обращений к памяти. Для декодирования это особенно полезно, потому что именно key-value данные постоянно читаются при генерации следующего токена.
Какие ограничения есть у MQA
Главное ограничение MQA — более жёсткое упрощение архитектуры. Когда все головы делят один набор key и value, модель теряет часть гибкости.
- Снижается точность по сравнению со standard multi-head attention в задачах, где важны тонкие различия между головами.
- Архитектура становится менее выразительной, потому что разнообразие key-value представлений сокращается.
- Переход не всегда удобен для готовых моделей, если архитектура изначально обучалась в другой конфигурации.
Как работает grouped query attention
Grouped query attention делит query-головы на несколько групп, и каждая группа получает собственный общий набор key и value. Это уменьшает нагрузку на память, но сохраняет больше разнообразия, чем MQA.
Представьте, что в стандартном attention у каждой головы свой комплект key-value. В MQA весь слой живёт с одним комплектом на всех. В GQA таких комплектов несколько. Не один и не по одному на каждую голову, а промежуточное число.
Из-за этого GQA удобно описывать как шкалу. Если число групп равно числу голов, получается обычный multi-head attention. Если группа одна, получается multi-query attention. Все промежуточные варианты — это и есть GQA.
Здесь важен гиперпараметр: сколько именно групп key-value использовать. От него зависит баланс между скоростью, расходом памяти и качеством модели.
Чем GQA отличается от MHA и MQA
GQA отличается степенью совместного использования key и value. Он сохраняет часть независимости голов, но убирает полное дублирование, характерное для standard multi-head attention.
| Подход | Как устроены key/value | Скорость и память | Гибкость представлений |
| Multi-head attention | У каждой головы свои key и value | Самая высокая нагрузка | Максимальная |
| Grouped query attention | Общие key и value внутри группы голов | Ниже, чем у MHA | Выше, чем у MQA |
| Multi-query attention | Один набор key и value на все головы | Самая низкая нагрузка | Минимальная из трёх |
Если смотреть на архитектуру без лишней теории, то GQA — это средний путь. Он убирает часть избыточности MHA, но не режет структуру так сильно, как MQA.
Почему GQA ускоряет инференс
GQA ускоряет инференс потому, что модели нужно хранить и читать меньше key-value данных. Это снижает давление на память и уменьшает объём промежуточных операций.
Во время генерации токенов языковая модель не пересчитывает всё с нуля. Она опирается на накопленный KV cache. Чем он компактнее, тем быстрее доступ к нужным представлениям.
При этом GQA не сводит всё к единственному набору key-value на слой, как MQA. Поэтому потери в качестве обычно ниже, чем при самом жёстком упрощении.
Какие преимущества даёт GQA
Основное преимущество GQA — более удачный баланс между качеством модели и стоимостью инференса. Для крупных LLM это практическое преимущество, а не теоретическая мелочь.
- Меньше нагрузка на память при хранении и чтении key-value представлений.
- Быстрее декодирование по сравнению со standard multi-head attention.
- Больше гибкости, чем у multi-query attention, потому что групп несколько, а не одна.
- Удобный промежуточный вариант для настройки архитектуры под нужный компромисс.
- Хорошая совместимость с практикой обучения и дообучения, где нужен не максимальный радикализм, а разумная экономия ресурсов.
Есть ли у GQA недостатки
Да, у GQA есть ограничения. Он снимает часть проблем standard multi-head attention, но не устраняет все издержки attention-механизма.
Во-первых, это всё ещё компромисс. При уменьшении числа групп модель экономит память, но одновременно урезает разнообразие представлений key-value. Если групп сделать слишком мало, архитектура начнёт вести себя ближе к MQA со всеми его ограничениями.
Во-вторых, выбор числа групп нельзя назвать формальностью. Это полноценный архитектурный параметр, который влияет на поведение модели.
Наконец, GQA не отменяет базовую зависимость внимания от длины последовательности. Он облегчает вычисления и работу с памятью, но не превращает attention в бесплатную операцию.
Где GQA используется на практике
GQA используют прежде всего в больших языковых моделях, где важны быстрый инференс и разумный расход памяти. Особенно заметна его польза в decoder-only архитектурах для генерации текста.
Этот подход уже применялся в заметных семействах LLM, включая модели Llama, Mistral и Granite. Причина понятна: для больших моделей скорость ответа и стоимость обслуживания зависят не только от числа параметров, но и от того, как устроен механизм внимания.
Можно ли представить GQA как настраиваемую шкалу
Да, GQA удобно понимать именно как настраиваемую шкалу между MHA и MQA. Число групп определяет, к какому полюсу архитектура будет ближе.
Если групп много, модель ближе к standard multi-head attention: больше независимых представлений, выше расход ресурсов. Если групп мало, поведение приближается к multi-query attention: ниже нагрузка на память, но сильнее упрощение.
Такое представление полезно на практике. Оно показывает, что GQA — не один жёсткий алгоритм с единственной конфигурацией, а семейство промежуточных вариантов.
Как объяснить GQA простыми словами
GQA можно объяснить так: несколько голов внимания работают в команде и используют общий набор служебных данных вместо полного набора для каждой головы. Это сокращает издержки, но не лишает каждую голову своей роли полностью.
Есть простой образ. Standard multi-head attention — это когда у каждого сотрудника свой архив документов. MQA — один общий архив на всех. GQA — несколько архивов по отделам. Документы дублируются меньше, доступ остаётся удобным, а работа не превращается в очередь у одного шкафа.
Что важно запомнить о grouped query attention
Grouped query attention — это способ оптимизировать attention в трансформерах за счёт совместного использования key и value внутри групп query-голов. Он нужен для ускорения инференса и снижения нагрузки на память в больших языковых моделях.
По смыслу GQA находится между двумя крайними вариантами. От standard multi-head attention он наследует большую выразительность, чем у MQA. От multi-query attention — часть выигрыша по памяти и скорости.
Если нужен один короткий вывод, он такой: GQA помогает LLM работать быстрее и дешевле по памяти, не срезая архитектуру так сильно, как MQA.