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

Квадратичная цена attention

Full attention (полное внимание) сравнивает каждый запрос с каждым ключом. Для n токенов возникает n2 оценок: контекст удваивается — работы становится примерно вчетверо больше. Это не случайная неэффективность реализации, а прямое следствие полной связности.

Каждая пара требует оценки

В матрице QK строки соответствуют запросам, а столбцы — ключам. Один новый токен добавляет не одну ячейку, а новую строку и новый столбец. Поэтому сторона матрицы растёт линейно, а её площадь — квадратично.

Сначала сравните полный квадрат при длинах 4 и 8, затем включите причинную маску. Сосчитайте разрешённые пары в обоих случаях. Убирает ли треугольная форма квадратичный порядок роста?

Матрица связей

n2
Длина последовательности
Форма attention
У каждого из 4 запросов есть 4 ключей: всего 16 попарных оценок.
запрос 1q14 ключей
запрос 2q24 ключей
запрос 3q34 ключей
запрос 4q44 ключей
вычисляется16 / 16
16 оценокУдвоение n увеличивает число пар примерно в четыре раза
Откуда возникает квадрат по длине контекстаПричинная маска оставляет треугольник разрешённых пар. Их число меньше, чем в полном квадрате, но по-прежнему имеет квадратичный порядок роста.

Causal mask отсекает верхний треугольник, но меняет только постоянный множитель: вместо n2 остаётся примерно половина квадрата.

Считать квадрат лучше — не значит убрать его

FlashAttention не хранит всю матрицу оценок в медленной памяти и обрабатывает её блоками. Это резко сокращает обмен данными, но каждая допустимая пара qi,kj по-прежнему участвует в вычислении. Результат остаётся точным — и число операций остаётся квадратичным по длине контекста.

Как FlashAttention меняет реализацию, не меняя число пар
  1. Обычная реализацияn×nМатрица материализуется; дороги и вычисления, и промежуточная память.
  2. FlashAttentionМатрица читается блоками; обмен с памятью меньше, но участвуют те же пары.
n2илиn(n+1)2Θ(n2)

Полная и causal-матрица различаются площадью, но принадлежат одному классу сложности.

Как перестать перебирать все пары

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

Начните с точного вычисления и по очереди сравните с ним остальные способы. Для каждого решите, меняются ли доступные связи, представление памяти или само правило вычисления весов. Какая экономия совместима с сохранением исходного результата?

Четыре режима масштабирования

n2
Способ вычисления attention
Сохранить все пары. Порядок вычисления можно улучшить, но ни одна связь не исчезает.
запрос 1q116 ключей
запрос 3q316 ключей
запрос 5q516 ключей
запрос 7q716 ключей
запрос 10q1016 ключей
запрос 12q1216 ключей
запрос 14q1416 ключей
запрос 16q1616 ключей
256 обращенийвесь контекст; точный full attention
Четыре способа изменить стоимость attentionТочное вычисление экономит на промежуточном хранении; остальные способы меняют связи, память или ядро внимания. Одинаковая оценка стоимости не означает одинаковый результат.
Три способа уйти от квадратичного внимания
  1. Разредить графSparse attention (разрежённое внимание) оставляет окно, выбранные блоки или глобальные токены.
  2. Сжать памятьМножество ключей и значений заменяется mn представителями.
  3. Факторизовать правилоСначала строится компактный итог по K,V, затем к нему обращаются запросы.

Сэкономленная работа имеет цену

Full attention позволяет любой позиции напрямую обратиться к любой другой. Именно эту свободу альтернативы ограничивают, сжимают или описывают иной математической формой.

Компромиссы способов ускорить attention
  1. Sparse attentionПреимущество: сохраняет детали доступных токенов. Цена: дальняя связь может отсутствовать.
  2. Сжатая памятьПреимущество: сохраняет глобальный обзор. Цена: часть мелких различий теряется.
  3. Linear attentionПреимущество: масштабируется линейно по n. Цена: меняет ядро и характер выбора.