ENIGMA AI
ENIGMA AI

Почему в данной архитектуре был выбран именно трансформерный энкодер (Transformer Encoder), а не более простые альтернативы, такие как сверточные нейронные сети (CNN) или многослойные перцептроны (MLP)?

встречается 1× Machine Learning senior architecture

Как ответить

Выбор Transformer Encoder вместо CNN или MLP в этой архитектуре обусловлен двумя основными факторами: необходимостью моделировать длинные контекстные зависимости и особенностями входных данных — разреженных и неструктурированных последовательностей.

Давайте разберём конкретно:

  • Почему не MLP? MLP обрабатывает каждый вход как фиксированный вектор. Если входная последовательность переменной длины (например, временные ряды с пропусками или набор токенов разной длины), потребовалось бы паддинг до максимальной длины, что ведёт к огромному числу параметров. Кроме этого, MLP не обладает присущей трансформерам способностью к cross-attention — сравнению элементов последовательности друг с другом. Он не может ответить на вопрос «какой участок сигнала зависит от какого». Для этого пришлось бы вручную подавать парные признаки, что сломает обобщение для новой длины или структуры данных.
  • Почему не CNN? Свёртки — локальные операторы. Conv1d с ядром размера k «видит» только соседние k элементов. Если задача требует учёта зависимости между первым и последним элементом цепочки из 5000 шагов, вам понадобится либо стопка из десятков свёрточных слоёв (глубокая сеть), либо dilation (расширение ядра), при котором сеть учится иерархии, но теряет чувствительность к точной позиции в длинном контексте. В нашем проекте длина последовательности достигает 2048 токенов, и критически важно, чтобы attention покрывал всю последовательность за один проход, без потери разрешения. Transformer Encoder даёт это за счёт self-attention — каждый токен «видит» все остальные с весом, который обучается динамически.
  • Практические цифры: на валидационном наборе замена энкодера на ResNet-подобную 1D CNN с 8 слоями и dilation rate 2 дала drop метрики F1 на 7 пунктов при попытке захватить глобальный контекст, при этом latency выросло вдвое из-за последовательного пропуска данных через глубокие слои. Transformer Encoder с 6 слоями и 8 головами даёт то же качество за 90% от latency CNN, но с возможностью параллелизации обучения в процессе предтренировки.
  • Компромисс: цена трансформера — квадратичная сложность attention (O(n²)). MLP и CNN линейны, но не решали задачу. Мы обошли это ограничением длины контекста до 512 токенов на пакет (с помощью sliding window при инференсе) и внедрением sparse attention поверх полного — для долгих последовательностей мы используем Longformer-like окна.

Итог: выбор Transformer Encoder был не «модным», а прагматичным — когда нужно видеть всю картину целиком без иерархического сжатия, он вне конкуренции.

Ключевые тезисы

  • MLP не подходит из-за фиксированной размерности входа и отсутствия cross-attention для последовательностей
  • CNN неэффективна для глобальных зависимостей — приходится наращивать глубину, теряя точность и увеличивая latency
  • Transformer Encoder покрывает весь контекст за один проход за счёт self-attention, даёт параллелизацию и масштабируемость
  • На конкретном проекте замена на CNN дала падение F1 на 7 пунктов из-за недостатка глобального контекста
  • Квадратичная сложность attention обходится ограничением длины контекста (sliding window) и sparse attention для длинных последовательностей

Что спросят дальше

  • — Какая у вас длина последовательности? Как вы боретесь с O(n²) памятью при больших последовательностях — используете sparse attention или паддинг максимум 512?
  • — Как вы решили проблему инициализации весов для энкодера — это случайная инициализация или предобученный вес? Как это повлияло на сходимость?
  • — Если бы в задаче было требование к latency менее 5 мс на инференс при той же точности — перешли бы на CNN с иерархическим пуллингом? Если да — как?</li>

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение