Sparse attention
Чтобы уйти от квадрата, необязательно сжимать сами токены. Можно сохранить их, но разрешить лишь небольшую часть связей. Sparse attention (разрежённое внимание) превращает полную матрицу в маршрутную сеть: дешевле, но теперь важно, куда по ней способна добраться информация.
Не все прошлые токены нужны напрямую
В causal attention запрос на позиции
Для одного и того же запроса найдите самые дальние доступные позиции в каждом паттерне. Затем сравните число связей. Одинаковый бюджет чтения обязательно даёт одинаковый доступ к контексту?
Экономия появляется не из-за прозрачных клеток на картинке, а потому, что запрещённые оценки действительно не вычисляются. Структура должна быть известна заранее и поддерживаться реализацией.
При постоянной ширине окна
Окно одного слоя — не предел модели
В первом слое токен получает сведения от ближайших соседей. Во втором — уже от соседей этих соседей. Поэтому receptive field (поле восприятия) расширяется с глубиной: локальные связи складываются в более длинный путь.
Начните с одного слоя локального окна и найдите недоступную дальнюю позицию. Увеличивайте глубину по одному слою до появления пути к ней. Затем смените топологию, сохранив глубину, и объясните разницу.
Добавить несколько коротких путей
Чистое окно хорошо передаёт локальный контекст, но далёкие токены встречаются лишь через много слоёв. Поэтому к окну добавляют редкие дальние рёбра.
- Dilated attentionСвязи идут на расстояния 1, 2, 4, 8 и быстро покрывают длинный префикс. Далеко, но не ко всем позициям.
- Глобальные слои и токеныРедкие глобальные узлы или слои создают общие точки доступа. В causal-режиме используются только уже доступные позиции.
- Гибридный паттернЛокальное окно сохраняет детали, редкие мосты сокращают дальние маршруты. Связей мало, но граф остаётся связным.
Редкая матрица ещё не гарантирует скорость
GPU эффективнее выполняет крупные регулярные операции, чем множество отдельных умножений в случайных местах. Поэтому практический sparse attention часто работает не с одиночными связями, а с целыми блоками.
- Нерегулярные связиМало арифметических операций, но множество мелких несмежных обращений к памяти.
- Block-sparseТе же смысловые ограничения собраны в регулярные плитки, удобные для параллельного вычислителя.