В новом видео на своем канале немецкий исследователь искусственного интеллекта Янник Кильхер (Yannic Kilcher) разобрал научную статью «Fastformer: Additive Attention Can Be All You Need». Авторы этой работы предлагают альтернативную архитектуру внимания, призванную решить главную проблему классических трансформеров — квадратичную вычислительную сложность от длины последовательности. Однако Янник Кильхер скептически отнесся к терминологии авторов и подробно объяснил, почему предложенное решение, по его мнению, корректнее называть динамическим полносвязным слоем, а не полноценным механизмом внимания.
📉 Квадратичное бутылочное горлышко классического внимания 5:03
Чтобы понять суть инновации и причины скепсиса ведущего, необходимо вспомнить, как работает классический механизм самовнимания (Self-Attention) в трансформерах. На вход слоя подается последовательность токенов (например, слов в предложении «My house is very green»). Задача трансформера — пошагово улучшать векторные представления (эмбеддинги) этих токенов от слоя к слою, чтобы в финале каждый токен «понимал» свой смысл в контексте всего текста.
Для этого из каждого токена с помощью линейных преобразований генерируются три вектора:
- Query (Запрос): Описывает, какую информацию данный токен хочет узнать о других токенах в тексте.
- Key (Ключ): Описывает содержание самого токена, выполняя роль своего рода «адреса» для других запросов.
- Value (Значение): Содержит фактическую информацию токена, которая будет передана дальше.
В классическом трансформере каждый вектор запроса умножается на каждый вектор ключа (скалярное произведение), формируя матрицу попарного взаимодействия всех токенов. Полученные значения нормализуются через функцию Softmax, превращаясь в распределение весов (гистограмму релевантности). На эти веса затем умножаются векторы значений (Value).
Именно этот шаг вычисления попарных взаимодействий создает квадратичную сложность $O(N^2)$ относительно длины последовательности $N$, что делает обработку длинных текстов крайне неэффективной.
🚀 Архитектура Fastformer: аддитивный подход вместо матричного умножения 9:33
Авторы Fastformer предлагают полностью отказаться от вычисления попарных взаимодействий между токенами. На вход модели точно так же подаются независимые токены, которые через стандартные линейные трансформации превращаются в индивидуальные векторы Query, Key и Value. Однако вместо того чтобы сопоставлять каждый запрос с каждым ключом, Fastformer агрегирует все индивидуальные запросы в один-единственный глобальный вектор запроса (Global Query Vector) для каждой головы внимания.
Процесс формирования этого глобального вектора устроен следующим образом:
- Каждый индивидуальный вектор запроса $q_i$ умножается на фиксированный, обучаемый в процессе бэкпропагейшна вектор параметров $W$.
- Полученные скалярные величины пропускаются через функцию Softmax для получения весов $\alpha_i$.
- Исходные векторы запросов суммируются с учетом весов $\alpha_i$, формируя единый глобальный запрос.
Янник Кильхер обращает внимание на то, что математически эта процедура (умножение на обучаемый вектор с последующим Softmax) эквивалентна логистической регрессии, где вектор $W$ выступает в роли разделяющей гиперплоскости. По мнению ведущего, вектор $W$ работает как статический классификатор признаков, который в процессе обучения настраивается на поиск конкретных элементов — например, ищет в предложении названия стран. Если токен содержит такой признак, его вес $\alpha$ будет высоким, и он внесет наибольший вклад в глобальный запрос.
🔍 Элементное умножение и линейная сложность 18:02
После создания глобального вектора запроса модель должна сопоставить его с ключами. Поскольку запрос всего один, классическое скалярное произведение выдало бы на выходе один вектор вместо последовательности. Чтобы сохранить размерность, авторы Fastformer используют покоординатное (элементное) умножение (Element-wise product) глобального запроса с каждым индивидуальным вектором ключа $k_i$.
В результате получаются промежуточные векторы $P_i$. Избавиться от квадратичной сложности удается благодаря сочетанию двух линейных операций. Из-за отсутствия промежуточного нелинейного Softmax между этапами агрегации запросов и ключей начинает работать сочетательное (ассоциативное) свойство умножения. Это позволяет сначала сложить векторы, а затем умножить их как единое целое, что снижает вычислительную сложность до линейной $O(N)$.
Похожий цикл повторяется на следующем этапе:
- Векторы $P_i$ умножаются на еще один статический вектор параметров $W_k$ для вычисления весов $\beta_i$ через Softmax.
- На основе весов $\beta_i$ формируется глобальный вектор ключа через аддитивное суммирование.
- Глобальный вектор ключа поэлементно умножается на индивидуальные векторы значений Value, образуя векторы $U_i$.
- Векторы $U_i$ проходят через финальную линейную трансформацию, превращаясь в выходные векторы $R_i$.
🤨 Критика Янника Кильхера: скрытые недостатки и «обманчивый» маркетинг 24:35
Несмотря на заявленную авторами высокую эффективность, Янник Кильхер детально критикует архитектурные решения Fastformer, ставя под сомнение их логику и честность терминологии.
Во-первых, ведущего откровенно удивляет финальный шаг алгоритма, где к полученным векторам контекста $R_i$ зачем-то обратно прибавляются исходные векторы индивидуальных запросов Query в качестве остаточного соединения (Residual Connection). По мнению Кильхера, концептуально вектор запроса по своей природе не должен содержать в себе содержательную информацию, которую нужно передавать дальше по сети. Он предполагает, что этот костыль был добавлен авторами экспериментально просто потому, что без него модель вообще отказывалась работать.
Во-вторых, Янник Кильхер указывает на избыточность средней колонки (колонки ключей) в архитектурной схеме. Математически операции в колонке запросов и в колонке ключей качественно ничем не отличаются. С таким же успехом можно было бы полностью избавиться от ключей и поэлементно умножать глобальный запрос сразу на векторы значений Value, либо, наоборот, вставить между ними еще 50 аналогичных промежуточных колонок.
Главная же претензия Кильхера заключается в том, является ли Fastformer трансформером в принципе:
- В истинном механизме внимания веса вычисляются динамически на основе взаимодействия самих элементов входной последовательности друг с другом.
- В Fastformer агрегирование происходит с помощью статически выученных векторов параметров $W$ и $W_k$, которые одинаковы для любого входного примера.
- Следовательно, это не динамическое внимание, а статический экстрактор признаков. Модель правильнее назвать динамическим полносвязным слоем (Feed-Forward Layer) для каждого токена.
Количество признаков, которые такая модель способна извлечь на одном слое, жестко ограничено произведением количества голов внимания на количество промежуточных колонок.
📊 Эксперименты, результаты и вердикт 32:01
В практической части статьи авторы демонстрируют хорошие результаты тестирования Fastformer. Модель сравнивали с множеством базовых архитектур на задачах анализа тональности текста (Sentiment Classification) и классификации тем (Topic Classification). Fastformer действительно показывает высокую конкурентную точность, а при увеличении длины контекста его скорость работы растет линейно, оставляя классический трансформер далеко позади по потреблению памяти.
Тем не менее Янник Кильхер называет экспериментальную базу слабой. В статье полностью отсутствуют так называемые абляционные исследования (Ablation Studies). Авторы не проверили, что произойдет с моделью, если убрать странное остаточное соединение с вектором запросов или если сократить дублирующие колонки.
В качестве резюме ведущий отмечает, что Fastformer — это вполне удачная, быстрая и легковесная архитектура для специфического пула задач. Она отлично подойдет там, где исход General-задачи зависит от глобального контекста (как в классификации текстов). Однако попытка авторов продать этот алгоритм под соусом «более быстрого трансформера», по мнению Кильхера, выглядит манипуляцией терминами ради хайпа, поскольку фундаментальные принципы работы классического Transformer здесь были ликвидированы.