# Как архитектура Terraformer ускоряет Transformers в 37 раз без потери качества

Источник: https://www.youtube.com/watch?v=hgSGHusDx7M
Канал: Yannic Kilcher
Опубликовано: 02.12.2021

---

В новом видео Янник Кильхер (Yannic Kilcher) разбирает амбициозную научную работу исследователей из Варшавского университета, Google Research и OpenAI. Статья под названием «Sparse is Enough in Scaling Transformers» представляет архитектуру Scaling Transformer и её «прокачанную» версию — Terraformer. Основная идея авторов заключается в том, что для эффективного масштабирования нейросетей не обязательно активировать все параметры одновременно: разреженность (sparsity) позволяет добиться колоссального ускорения инференса при сохранении качества работы модели.

## 🚀 Масштабирование через разреженность: суть Scaling Transformer
[[JUMP:0:00]]

Главная задача представленного исследования — внедрить блоки разреженности в стандартную архитектуру Transformers [0:13]. Результатом стала модель Scaling Transformer, которая в ходе тестов показала впечатляющие результаты в задачах декодирования (генерации текста). Особенно заметен прогресс при работе с одиночными примерами (unbatched decoding), где разреженность проявляет себя лучше всего [0:39].

Янник Кильхер приводит следующие данные по производительности:

*   Для модели на 800 миллионов параметров базовый Transformer выполняет декодирование за 0,16 секунды, а Scaling Transformer — в 2,6 раза быстрее [1:07].
*   Настоящий прорыв виден на моделях объёмом 17 миллиардов параметров: базовая модель тратит 3,6 секунды на токен, в то время как Scaling Transformer справляется за 0,18 секунды [1:35]. Это означает ускорение в 20 раз, а в некоторых конфигурациях, по словам Кильхера, оно достигает 37 раз [2:01].

Самым удивительным фактом Янник Кильхер называет отсутствие деградации качества [2:13]. По мнению авторов статьи, разреженные слои позволяют получить ту же перплексию (метрику качества языковой модели), что и стандартные «плотные» (dense) модели с тем же количеством параметров [2:28].

## 🏗️ Анатомия разреженного Feed-Forward слоя
[[JUMP:6:56]]

В классическом трансформере основными вычислительными узлами являются блоки внимания (attention) и полносвязные слои (feed-forward, FF). Авторы статьи предлагают заменить каждый из них разреженной версией. 

Работа с FF-слоем строится на следующих принципах:

1.  **Обоснование через ReLU:** Авторы аргументируют возможность разреженности тем, что функция активации ReLU и так превращает около половины значений в ноль [8:44]. Янник Кильхер отмечает, что это рассуждение кажется ему несколько «шатким», но признает: если метод работает, теоретическое обоснование вторично [9:09].
2.  **Компартментализация матриц:** Вместо умножения вектора на всю огромную матрицу, она разбивается на отсеки (compartments) [11:14]. В каждом отсеке активируется только один столбец. Это позволяет загружать из памяти и вычислять только крошечную часть весов [11:40].
3.  **Контроллер низкого ранга:** Чтобы решить, какие столбцы активировать, используется вспомогательный механизм. Это мини-сеть, работающая в режиме «низкого ранга» (low-rank), которая на основе входного вектора предсказывает маску активации [14:40]. 

Кильхер указывает на важный компромисс: создание маски само по себе требует вычислений [16:26]. Эффективность метода зависит от того, будет ли выигрыш от разреженности больше, чем затраты на работу контроллера маски [16:42]. 

## 🧠 Оптимизация внимания: Multiplicative и Conv слои
[[JUMP:19:21]]

Создание разреженного механизма внимания сложнее, так как на выходе слоев генерации запросов (Queries), ключей (Keys) и значений (Values) обычно нет нулей, которые можно было бы эксплуатировать [21:49]. Авторы предлагают заменить плотные слои комбинацией «мультипликативного» слоя (Mult) и сверточного слоя (Conv) [22:41].

Особенности этой структуры:

*   **Mult-слой:** Вместо тяжелого умножения матриц используется поэлементное умножение (element-wise multiplication) с последующим низкоранговым проецированием [27:08]. По словам Кильхера, существует математическая теорема, доказывающая, что такая конструкция способна представить любую перестановку входных данных [30:25].
*   **Conv-слой:** Свертки применяются вдоль измерений последовательности (L) и голов внимания (S) [37:35]. Это позволяет обмениваться информацией между соседними токенами и соседними головами внимания еще до самого механизма Attention [38:27].

Янник Кильхер отмечает, что такая архитектура вводит новые пути передачи информации, из-за чего сложно точно оценить, какой именно из «инженерных трюков» вносит решающий вклад в итоговый успех [39:35].

## 🌍 Terraformer: интеграция долгой памяти и обратимости
[[JUMP:44:02]]

Когда Scaling Transformer дополняется технологиями для работы с длинными последовательностями, он превращается в Terraformer [0:27]. В эту модель интегрированы идеи из архитектуры Reformer.

Ключевые дополнения Terraformer:

1.  **LSH Attention:** Использование локально-чувствительного хеширования (Locality Sensitive Hashing) для ускорения поиска ключей в длинных текстах [45:49]. Вместо вычисления всех связей, алгоритм ищет «столкновения хешей», что значительно экономит ресурсы [46:18].
2.  **Обратимые блоки (Reversibility):** Чтобы не хранить в памяти все промежуточные активации для обратного распространения ошибки, архитектура строится так, чтобы входные данные можно было восстановить из выходных [47:10]. Это критически важно для обучения на очень длинных последовательностях [49:35].
3.  **Рекуррентные блоки (SRU):** В FF-блоки добавляются простые рекуррентные юниты (Simple Recurrent Units) [51:07]. По мнению авторов, это улучшает обобщающую способность модели [52:56]. 

Кильхер находит добавление рекуррентности «странным выбором» [54:06]. Он предполагает, что это могло быть сделано для того, чтобы подтянуть цифры в специфических тестах, где модель должна обрабатывать данные вдвое длиннее, чем видела при обучении [53:13].

## 📉 Ограничения и перспективы
[[JUMP:55:12]]

Несмотря на впечатляющие 37-кратные ускорения, Янник Кильхер выделяет несколько нюансов:

*   **Batch Inference:** При обработке больших пакетов данных (батчей) преимущества разреженности могут нивелироваться, так как разные примеры активируют разные части матрицы, и GPU всё равно придётся загружать её целиком [43:23].
*   **Сложность обучения:** Во время обучения приходится использовать Softmax вместо жесткого выбора столбцов (sampling), что делает процесс медленнее, чем финальный инференс [42:42].
*   **Аппаратные лимиты:** Обычные пользователи на домашних ноутбуках могут не заметить такой огромной разницы в скорости, так как эффекты разреженности наиболее выражены на гигантских моделях серверного уровня [55:53].

В заключение Кильхер отмечает, что авторы еще не использовали квантование, которое может дать дополнительный прирост скорости в будущем [56:34].