Внимание в LLM · часть 9

Сжатая память

«Сжать attention» можно двумя принципиально разными способами. Первый уменьшает число позиций: много токенов превращаются в несколько memory slots (ячеек памяти). Второй сохраняет каждую позицию, но записывает её ключи и значения через узкий latent-вектор.

Сократить позиции или ширину записи

Контекст можно представить как таблицу: одна ось отвечает за позиции n, другая — за размер представления d. Сжатие любой оси экономит память, но только уменьшение числа позиций сокращает количество попарных сравнений.

Сначала сосчитайте сохраняемые позиции и размер записи одной позиции. Переключите ось сжатия и определите, какая из этих величин изменилась. Что потребуется восстановить, чтобы снова обратиться к отдельному исходному токену?

Что именно сжимается

nm
Ось сжатия
Сжатие позиций16 позиций превращаются в 4 ячейки памяти; одна сторона attention-матрицы становится короче.
ячейка 1M1позиции 1–4
ячейка 2M2позиции 5–8
ячейка 3M3позиции 9–12
ячейка 4M4позиции 13–16
Осталось 25% исходной памяти64 оценки вместо 256
Две разные оси сжатия attentionСжатие позиций уменьшает число записей; сжатие признаков уменьшает размер каждой записи. Эти операции ограничивают разные стороны доступа к исходному контексту.

Много токенов становятся несколькими сводками

Небольшой набор latent-запросов читает длинный вход через cross-attention и собирает m сводных представлений. Дальнейшие слои работают уже с ними, поэтому при mn основная стоимость зависит от nm, а не от n2.

Z=Attention(L,X,X)
ZRm×d,mn

Latent-запросы L сворачивают n входных позиций X в m ячеек памяти.

Последствия сжатия нескольких фактов в общую ячейку
  1. ДоКаждый факт хранится отдельно.
  2. ПослеНесколько фактов разделяют одну сводку.
  3. РискТочная деталь может исчезнуть при смешивании.
Исследовательский примерPerceiver ARCross-attention сворачивает длинный вход в небольшое число latent-позиций и сохраняет причинный порядок с помощью маски.

Каждая позиция остаётся, но хранится компактнее

Multi-head Latent Attention (MLA) сначала проецирует скрытое состояние токена в низкоразмерный ctKV. Полные ключи и значения разных голов можно восстановить из этого общего latent-представления, поэтому в кэше достаточно хранить компактный вектор и небольшую позиционную часть ключа.

Сжатие и восстановление ключей и значений в MLA
  1. Полное состояниеht
  2. Общий latentctKV
  3. Восстановление для головK1,V1;;KH,VH
ctKV=WDKVht
kt,hC=WhUKctKV
vt,hC=WhUVctKV

Проекция в узкое пространство создаёт общий latent; отдельные проекции голов восстанавливают нужные K,V.

Первое применениеDeepSeek-V2MLA сжимает KV-кэш в latent-вектор; в отчёте указано сокращение кэша на 93,3%. Популярная LLMDeepSeek-V3Архитектура наследует MLA для эффективного вывода и длинного контекста.

У каждого сжатия — своё узкое место

Сжатие полезно лишь пока узкое представление сохраняет информацию, необходимую будущим запросам. Но две оси сжатия теряют разные вещи.

Компромиссы разных осей сжатия attention
  1. Сжатие позицийсокращает число оценок сходства; смешивает несколько токенов в одной сводке
  2. MLAуменьшает KV-кэш и обмен с памятью; ограничивает ширину представления каждой позиции
  3. Гибридможет экономить обе оси; усложняет обучение и восстановление деталей