Как ответить
Выбор 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 был не «модным», а прагматичным — когда нужно видеть всю картину целиком без иерархического сжатия, он вне конкуренции.