Как стать автором
Поиск
Написать публикацию
Обновить
2ГИС
Главные по городской навигации

Эволюция внимания в LLM: от квадратичной сложности к эффективным оптимизациям

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров2.4K

Мы живём в эпоху больших языковых моделей — инструментов вроде ChatGPT, Gemini, Claude, которые поражают своими способностями: они пишут тексты, отвечают на сложные вопросы, генерируют код и даже ведут осмысленные диалоги. Но задумывались ли вы, как им удаётся не просто понимать отдельные фразы, но и удерживать смысл длинных документов, многочасовых бесед или даже целых книг?

В статье разберём путь от понимания человеческого восприятия до современных оптимизаций механизма внимания в LLM. 

Сложность человеческой речи

Прежде чем погружаться в технические детали, сначала — про масштаб задачи. 

За кажущейся легкостью, с которой мы общаемся каждый день, скрывается поразительная сложность. Человеческая речь — результат миллионов лет эволюции. Сейчас мы, не задумываясь, жонглируем грамматическими правилами, улавливаем тончайшие оттенки значений слов — семантику, понимаем слова в зависимости от ситуации — контекста. Мы распознаем иронию, сарказм, читаем между строк, улавливая подтекст. Морфология, синтаксис, семантика, прагматика — все эти слои переплетены в единую ткань речи. Наш мозг выполняет эту колоссальную вычислительную задачу практически мгновенно, позволяя нам не просто обмениваться информацией, но и понимать друг друга на глубоком уровне. 

И мы захотели научить машину справляться с этой невероятно сложной задачей.

Эффект коктейльной вечеринки

Представьте: вы на шумной вечеринке. Вокруг играет музыка, смеются люди, ведутся десятки разговоров. Но когда ваш друг начинает что-то рассказывать, ваш мозг автоматически настраивается на его голос, фокусируется именно на этой «частоте». Остальные звуки становятся фоном.

Это явление, известное как «эффект коктейльной вечеринки», — яркая демонстрация одной из способности нашего мозга: внимания. 

Что же происходит в этот момент? Мозг не просто пассивно воспринимает все звуки. Он активно управляет своим восприятием. Внимание работает как мощный фильтр: оно не блокирует другие звуки физически, но позволяет нам избирательно усилить релевантный сигнал — голос собеседника — и подавить или проигнорировать все остальное, что мешает пониманию. Мы не пытаемся обработать каждый звук с одинаковой интенсивностью; вместо этого мы динамически распределяем наши когнитивные ресурсы, фокусируясь на том, что важно для текущей задачи — поддержания диалога. Эта способность фокусироваться, отфильтровывать ненужное и сконцентрироваться на главном — не просто трюк восприятия. Это фундаментальный механизм, позволяющий нам ориентироваться в сложном мире, эффективно обрабатывать информацию и не утонуть в ее бесконечном потоке. И именно этот принцип — избирательность, фокусировка на важном — окажется ключевым, когда мы перейдем к тому, как машины учатся понимать язык, особенно когда речь идет о длинных и сложных текстах.

Что такое Attention в нейронных сетях

Подобно человеческому мозгу, большие языковые модели используют механизм внимания (Аttention) для обработки информации.

Вот слово «человек». Само по себе это очень абстрактное понятие:

  • Что это за человек?

  • Какие у него характеристики?

  • В каком он контексте?

Векторное представление одиночного токена «человек» малоинформативно.

Но когда мы читаем: «Загадочный человек в чёрной шляпе медленно шёл по улице», картина меняется. Теперь наш «человек» обретает характеристики:

Каждый токен отправляет «поисковый запрос» к другим токенам в контексте. Другие токены отвечают, насколько они релевантны и полезны. Векторное представление нашего «человека» обогащается информацией от соседних слов.

Механизм работы Attention

  1. Query (запрос) — «что ищет токен».

  2. Key (ключ) — «какую информацию предлагает токен».

  3. Value (значение) — «какой информацией делится токен».

Токен «человек» сравнивает свой запрос с ключами всех остальных токенов и получает от них релевантную информацию.

Проблемы классического Attention

Квадратичная сложность

Здесь начинаются технические сложности. В классическом Аttention каждый токен смотрит на все остальные токены. Для последовательности из n токенов это даёт нам сложность O(n²).

Последствия квадратичной сложности:

  • Ограниченное контекстное окно (исторически ~16K токенов);

  • Огромные требования к вычислительным ресурсам;

  • Невозможность обработки длинных документов;

  • Высокая стоимость обучения и инференса.

Кэширование как первая оптимизация

Первая важная оптимизация основана на том, что LLM генерируют текст последовательно, токен за токеном, и каждый новый токен смотрит только назад в прошлое, а не в будущее.

Это позволяет кэшировать уже вычисленные ключи (Keys) и значения (Values). Вместо пересчета всего с нуля, мы переиспользуем KV-cache.

PagedAttention: виртуализация памяти для LLM

Проблема фрагментации

Разработчики PagedAttention обнаружили шокирующую статистику: до 50% дорогой видеопамяти тратилось впустую из-за фрагментации.

Проблема возникала из-за неопределенности: когда пользователь отправляет запрос, невозможно узнать, сколько токенов понадобится для ответа. Возможно, один токен («Привет!»), а возможно, тысячи (краткое изложение «Войны и мира»).

Поэтому системы заранее резервировали место под 2000 токенов непрерывно в памяти:

  • Внутренняя фрагментация: использовалось 100 токенов из зарезервированных 2000.

  • Внешняя фрагментация: между большими блоками оставались неиспользуемые «зазоры».

Современные фреймворки, такие как PyTorch и Tensorflow, накладывают ограничение, что KV cache для токенов должны идти в памяти друг за другом непрерывно.
Современные фреймворки, такие как PyTorch и Tensorflow, накладывают ограничение, что KV cache для токенов должны идти в памяти друг за другом непрерывно.

Расчёт потребления памяти

Для современной модели KV-cache на один токен требует:

2 вектора × 5120 размерность × 40 слоев × 2 байта (FP16) = 800 КБ/токен

При резервировании под 2000 токенов: 1.6 ГБ видеопамяти только на один запрос!

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

Решение через виртуализацию

PagedAttention применил подход из операционных систем — виртуализацию памяти:

Логическое представление: [Токен1][Токен2][Токен3][Токен4]...

Физическое размещение: [Блок A][Блок C][Блок B][Блок D]...

Ключевые преимущества:

  • Память делится на блоки фиксированного размера

  • Выделение происходит по мере необходимости.

  • Блоки можно переиспользовать между запросами.

  • Процесс «думает», что память непрерывна, а физически она разбросана.

Например, ниже два запроса — у них логическое представление будет непрерывным, а физически — разбросанным. 

Такой подход позволяет при параллельном сэмплировании переиспользовать одинаковые начальные последовательности, а различающиеся части отображать в разные блоки. Для этого мы используем vLLM. Это первое решение, которое использует PagedAttention. Мы тоже этим пользуемся — это решает проблему с пропускной способностью.

Infinite Attention: обработка длинных контекстов

Далее рассмотрим, что происходило с обработкой длинных контекстов. 

На заре нейросетей было ограничение где-то в 16 тысяч токенов. Постепенно допустимое число токенов возрастало. 

Сейчас у топовых моделей контекстное окно может достигать 200 тысяч токенов. Однако, напомню, что attention квадратичный. Есть KV-cache, который немного снижает это ограничение, но всё равно нужны новые идеи.

Концепция сегментированного внимания

Google предложил элегантное решение, вдохновленное тем, как люди читают книги. Мы же не пытаемся держать в голове все главы одновременно. Мы читаем по одной главе, запоминаем суть, и переходим к следующей.

Алгоритм работы:

  1. Сегментация: длинная последовательность делится на сегменты ограниченного размера.

  2. Локальный attention: внутри каждого сегмента работает классический attention.

  3. Сжатие в память: после обработки сегмента остается «сжатое» представление.

  4. Преемственность: следующий сегмент может обращаться к памяти предыдущих.

Эта идея (которая, кстати, представлена в OpenSource) позволяет обрабатывать контексты практически неограниченной длины, сохраняя линейную сложность.

Есть и другие подходы, о них дальше.

RAG vs Cache-Augmented Generation

Классический RAG

Retrieval Augmented Generation стал стандартом для подключения внешних знаний:

  1. База знаний разбивается на чанки.

  2. Каждый чанк векторизуется.

  3. По запросу ищутся релевантные чанки.

  4. Найденная информация подставляется в контекст.

У RAG есть ограничения:

  • Сложности с таблицами и структурированными данными.

  • Дополнительная инфраструктура.

  • Потенциальная потеря контекста между чанками.

Agentic RAG

Альтернативный подход для небольших баз знаний. Мы описываем модели, что знаем про предметную область, и даём ей возможность самой понять, в какой документ заглянуть:

Например, мы делали бота по медицинскому страхованию. Там немного документов, но важна точность. Мы описываем каждый документ: разделы, цели, содержание. Модель проваливается в нужный документ. Это хороший подход, но его сложно поддерживать — база знаний может измениться, и структуру надо обновлять.

Преимущества:

  • Использование нативных механизмов LLM

  • Отсутствие потери контекста

  • Простота реализации

  • Переиспользование кэша между запросами

Cache-Augmented Generation

Есть ещё идея — использовать key-value кэш. Если база знаний небольшая, мы её векторизуем, запоминаем, и переиспользуем кэш от запроса к запросу. Это позволяет использовать нативные механизмы attention. Модель сама извлекает нужные токены. Это хорошая идея, и, возможно, она получит больше распространения. Подход называется cache-augmented generation. Он нативный, но работает только с небольшими базами знаний. Если документов много — становится затратно.

Преимущества CAG: 

  • Скорость для повторных запросов 

  • Снижение нагрузки 

  • Экономия ресурсов 

Недостатки CAG: кэш требует места и может устаревать. 

DeepSeek V3: революция в сжатии KV-cache

DeepSeek поставил вопрос ребром: а действительно ли нам нужны все 5120 чисел для эффективного представления ключей и значений?

Ответ оказался: нет! Они вспомнили про латентные пространства из автокодировщиков.

Латентное пространство для KV-cache
Латентное пространство для KV-cache

Процесс:

  1. Сжатие: keys и values проецируются в латентное пространство (5120 → 64 размерности)

  2. Кэширование: сохраняются только сжатые представления

  3. Восстановление: при необходимости векторы восстанавливаются одним матричным умножением

Результат: сокращение потребления видеопамяти в 80 раз без существенной потери качества!

Экономический эффект тоже существенный: пропускная способность повысилась на 600%, значительно снизилось стоимость обучения (хвастались, что DeepSeek V3  обучили за $5 млн),  а требования к инфраструктуре существенно ниже.

Выводы

Эволюция механизма attention демонстрирует зрелость области машинного обучения. Современные модели способны обрабатывать огромные контексты благодаря таким техникам, как Infini-Attention. А PagedAttention и Multi-head Latent Attention позволяют эффективнее расходовать память во время обучения и инференса.

Возможно, скоро все оптимизации станут настолько обычными, что разработчики будут использовать их «из коробки», даже не задумываясь о сложности происходящего под капотом.

Теги:
Хабы:
+30
Комментарии1

Публикации

Информация

Сайт
2gis.ru
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Россия
Представитель
Наталья Акберова