Автор: Герман Петров Редактура: Дмитрий Раков, Булат Бадамшин
<aside> 💙 Небольшое обращение к читателям В посте есть тогглы с кодом на случай, если захочется разобраться в деталях. Их можно пропускать — понимание общей картины не ухудшится. Вопрос к аудитории: поделитесь, пожалуйста, удобен ли вам формат со вставками кода и полезны ли они? Мы открыты к идеям по улучшению подачи материала. Вы также можете предложить свои темы для статей в комментариях под нашим постом в телеграме. Так мы сможем учитывать ваши пожелания по материалу, который было бы интересно изучать 😊
</aside>
Что можно прочитать, чтобы лучше и проще понять эту статью:
Архитектуры на базе трансформеров уже достигли SOTA-качества не только в родном для них NLP, но и в Computer Vision. Они равны или даже превосходят по качеству CNN модели в задачах классификации, детекции и сегментации. При этом традиционно такие модели требуют много вычислительных ресурсов как во время обучения, так и во время инференса. Авторы статьи FastViT ставили задачу совместить сильные стороны свёрточных и трансформерных архитектур для решения широкого круга CV задач в real-time и мобильных сценариях работы.
Для начала вспомним, как устроена ViT. Модель состоит из 3-х основных блоков:
Рисунок 1. Архитектура FastViT. Слева: архитектура ViT целиком, справа: схема трансформер энкодера
Рассмотрим основную часть модели ViT — энкодер трансформера. Он состоит из L трансформер-блоков. Каждый из блоков получает на вход и возвращает на выход эмбеддинги патчей, при этом ****число эмбеддингов и их размерность не меняется при прохождении через все энкодер-блоки сети.
Multi-Head Self-Attention отвечает за учет локальной и глобальной информации вместо сверток — это и есть концептуальное отличие трансформера от CNN архитектур. Делает он это путем перевзвешивания эмбеддингов скорами, которые меняются в зависимости от входных данных. Другими словами, Self-Attention осуществляет обмен информации между пространственными токенами. Поэтому его еще называют token mixer. Это важный момент, который пригодится в дальнейшем.
Также стоит немного поговорить о вычислительной сложности слоя Self-Attention. Она квадратная или O(n^2), где N — количество токенов в последовательности (количество патчей), так как мы должны посчитать скор попарно между всеми токенами. К тому же, не будем забывать, что Query, Key и Value — обучаемые параметры, которые вносят свой вклад в увеличение latency через MAC.
Таким образом, вычислительная сложность Self-Attention — это боттлнек, если мы хотим спроектировать модель, которая сможет работать на мобильных устройствах и несильно мощных CPU-ядрах.