Sparse Attention
Разреженное внимание позволяет каждому токену учитывать только выбранное подмножество других токенов, например локальное окно, глобальные токены или токены из top-k, снижая затраты при обработке длинных последовательностей.
Разреженное внимание — это семейство механизмов внимания, в которых каждый запрос оценивает только выбранное подмножество ключей, а не все ключи последовательности. Полное самовнимание для N токенов вычисляет N² оценок на одну голову, поэтому удвоение длины документа вчетверо увеличивает стоимость внимания, тогда как схема, в которой каждый токен обращается к k другим, требует N·k операций. Схему можно задать заранее, например окном фиксированного размера, или выбирать по содержимому, например брать ключи с наивысшими оценками для каждого запроса. В Sparse Transformer OpenAI 2019 года использовались шаблоны с шагом, требовавшие O(N√N) операций для моделирования последовательностей длиной в десятки тысяч шагов, а современные большие языковые модели (LLMs) используют разреженные слои, чтобы обрабатывать контекстные окна длиной более 100 000 токенов.
Распространённые шаблоны разреженности#
Фиксированные шаблоны заранее определяют, какие пары нужно оценивать. При внимании со скользящим окном каждому токену доступны только предыдущие w токенов: Mistral 7B использует окно размером 4096 токенов, а модели с открытыми весами gpt-oss от OpenAI чередуют плотные слои со слоями, использующими окна из 128 токенов. Такое же чередование плотных слоёв и слоёв с локальной полосой применялось в GPT-3. Каждый слой с окном передаёт информацию ещё на w токенов вперёд, поэтому глубокая сеть всё равно связывает удалённые токены. Шаблоны с шагом добавляют каждый s-й предыдущий токен, чтобы информация могла за один слой передаваться на большие расстояния. Глобальные токены обращаются ко всем позициям, и все позиции могут обращаться к ним: Longformer назначает их токенам задачи, например токену классификации, BigBird также добавляет случайные связи, а токены-поглотители внимания оставляют первые несколько токенов видимыми каждому запросу, чтобы генерация в потоковом режиме оставалась стабильной.
Шаблоны, зависящие от содержимого, выбирают пары на основе данных. Native Sparse Attention от DeepSeek (NSA, 2025) объединяет сжатые сводки блоков ключей, выбор наиболее релевантных блоков и скользящее окно; всё это обучается end-to-end. DeepSeek Sparse Attention в DeepSeek-V3.2 запускает небольшой «молниеносный индексатор», который оценивает каждый предыдущий токен для каждого запроса, а затем вычисляет полное внимание только для 2048 токенов с наивысшими оценками. Поэтому основная стоимость внимания для каждого запроса остаётся постоянной, как бы ни увеличивался контекст. В производственных моделях часто сочетают эти правила:
Как шаблон обеспечивает экономию#
Маска, применённая к плотной матрице оценок, всё равно вычисляет каждую оценку, поэтому ускорение обеспечивают ядра, пропускающие пустые блоки матрицы. Ядра Flash Attention напрямую поддерживают скользящие окна, а FlexAttention в PyTorch компилирует любую функцию маски в блочно-разреженное ядро GPU. create_block_mask показывает, какие блоки такое ядро пропускает для окна размером 1024 токена и четырёх токенов-поглотителей:
from torch.nn.attention.flex_attention import create_block_mask
seq_len, window, sinks = 8192, 1024, 4
def local_plus_sinks(b, h, q_idx, kv_idx):
"""Causal attention to the previous 1,024 tokens plus the first 4 tokens."""
causal = q_idx >= kv_idx
return causal & ((q_idx - kv_idx <= window) | (kv_idx < sinks))
# FlexAttention разбивает маску на блоки 128 x 128, чтобы ядра могли пропускать пустые блоки
block_mask = create_block_mask(local_plus_sinks, B=None, H=None, Q_LEN=seq_len, KV_LEN=seq_len, device="cpu")
print(block_mask)Вывод показывает sparsity=85.47% — долю блоков размером 128 × 128 в матрице оценок 8,192 × 8,192, в которых нет ни одной допустимой пары, — и изображает шаблон в виде диагональной полосы для окна и столбца слева для токенов-поглотителей. Когда flex_attention запускается под управлением torch.compile, его ядро полностью пропускает эти блоки.
Разреженное внимание и смежные понятия#
- Flash Attention: ядро с учётом ввода-вывода вычисляет точное внимание для каждой пары, разбивая работу на блоки в быстрой внутрикристальной памяти. Эти блоки также служат единицами, которые пропускают блочно-разреженные ядра.
- Линейное внимание: сохраняет все пары, но заменяет softmax отображением признаков, благодаря чему все предыдущие ключи и значения сжимаются в состояние фиксированного размера.
- Деформируемое внимание: механизм компьютерного зрения, в котором каждый запрос обращается к нескольким точкам выборки со смещениями, обучаемыми на карте признаков, а не к фиксированному шаблону.
- Смесь экспертов (MoE): разреженность параметров, при которой каждый токен активирует лишь несколько экспертных сетей, а шаблон внимания остаётся плотным.
Применение#
Основное применение — языковые модели с длинным контекстом: разреженные слои ограничивают вычислительные затраты, а слои с окнами также ограничивают размер KV-кэша. Благодаря этому модели могут за один запрос обобщать длинные отчёты или искать информацию в крупных кодовых базах. BigBird применил свой разреженный шаблон к последовательностям ДНК, где вход из тысяч пар оснований намного длиннее обычного предложения, чтобы предсказывать промоторные области. В компьютерном зрении количество токенов растёт вместе с разрешением изображения, поэтому модели ограничивают внимание локальными областями: Swin Transformer обращается к токенам внутри смещённых окон. YOLO12 — детектор, ориентированный на внимание, созданный исследователями Университета Буффало и Университета Китайской академии наук и доступный в пакете Ultralytics, — использует внимание по областям: этап backbone с шагом 16 разбивает карту признаков изображения размером 640 пикселей на четыре горизонтальные полосы по 400 токенов и вычисляет внимание внутри каждой полосы. Таким образом, оценивается четверть из 2,56 миллиона пар, необходимых для полного внимания ко всем 1600 токенам.










