Linear attention
До сих пор мы пытались сделать квадрат меньше. Linear attention идёт дальше: меняет порядок умножений так, чтобы матрица «каждый с каждым» вообще не появлялась.
Не считать каждую пару отдельно
Обычный causal attention для каждого нового запроса заново просматривает всё прошлое. Linear attention сначала сворачивает ключи и значения в одну компактную сводку, а затем применяет к ней запрос. Число шагов растёт вместе с длиной контекста, а не с её квадратом.
Зафиксируйте длину контекста и сравните режимы «Пары» и «Сводка». Какие промежуточные данные нужны каждому? Затем увеличьте длину и объясните, почему перестановка умножений возможна для показанного ядра, но не переносится автоматически на softmax.
Скобки можно переставить
Обозначим через
Заглавные
В causal-режиме строчные
Каждый токен один раз обновляет оба состояния. Числитель читает содержание, а знаменатель приводит результат к правильному масштабу.
Основополагающая работаLinear TransformerАвторы показали, как признаковое отображение ядра (kernel feature map) и ассоциативность устраняют квадрат по длине.Контекст становится обновляемой памятью
В causal-режиме сводку не нужно пересчитывать. Каждый токен один раз дописывает в неё свой вклад; следующий запрос читает уже обновлённое состояние. Поэтому linear attention можно исполнять как рекуррентную сеть — с постоянным объёмом памяти относительно длины контекста.
- Пришёл токен
- Обновили память
- Получили ответ
Фиксированное состояние смешивает прошлое
Полный attention (full attention) хранит отдельный адрес для каждой позиции. Linear attention сворачивает весь контекст в состояние фиксированного размера. Когда похожих записей становится много, они начинают делить одни и те же направления памяти: старый факт может примешаться к новому.
- Отдельные позицииможно вернуться к конкретному токену; память растёт с контекстом
- Общее состояниеразмер не зависит от длины текста; записи могут смешиваться
- Новый фактдобавляется за один шаг; старый не исчезает автоматически