Глубокое обучение
Vision Transformers (ViT)
В 2020 году Google Brain опубликовал статью с провокационным названием: 'An Image is Worth 16x16 Words'. Идея казалась безумной - взять языковую модель BERT, порезать картинку на кусочки и скормить её «словами». CNN доминировала 8 лет. Через год ViT бил рекорды на ImageNet. Сейчас трансформеры лежат в основе GPT-4V, Gemini и DALL-E 3.
- **Google Lens** использует ViT-based архитектуры для поиска по изображениям - 8B+ поисков в месяц
- **Tesla Autopilot v12** перешёл на трансформерные архитектуры для обработки видео с 8 камер одновременно
- **Meta SAM (Segment Anything Model)** - ViT-H backbone позволяет сегментировать любой объект на фото без дообучения
- **Медицинская диагностика**: ViT модели от Google Health достигают точности врача-специалиста в диагностике рака кожи по дерматоскопическим снимкам
Предварительные знания
- Self-attention, multi-head attention и positional encoding из Transformer
- Как CNN формируют пространственный inductive bias через свёртки и pooling
- Токены, эмбеддинги и [CLS]-токен в моделях последовательностей
An Image Is Worth 16x16 Words
В 2020 году команда Google Brain под руководством Алексея Досовицкого опубликовала статью «An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale» и представила Vision Transformer. Идея была в том, чтобы разрезать изображение на патчи 16x16, считать каждый патч токеном и подать последовательность в обычный энкодер Transformer почти без специфичных для зрения механизмов. Десять лет считалось, что моделям изображений нужна встроенная локальность свёрток; ViT показал, что при достаточном объёме данных сеть выучивает эти свойства сама и не уступает лучшим CNN на ImageNet.
Patch Embedding
**ViT делает неожиданно простую вещь:** берёт изображение 224×224 и режет его на патчи 16×16. Получается 196 патчей (14×14 сетка). Каждый патч - это кусок пикселей размером 16×16×3 = 768 чисел. Этот вектор проецируется линейным слоем в d-мерное пространство эмбеддингов - точно так же, как токен в BERT превращается в вектор.
Позиционные эмбеддинги добавляются к патч-эмбеддингам, чтобы модель знала, где каждый патч находился в изображении. Google Brain обнаружил, что обычные обучаемые 1D позиционные эмбеддинги работают не хуже 2D - модель сама учится пространственной структуре.
Изображение 224×224 делится на патчи 16×16. Сколько патчей получается?
[CLS] токен и классификация
**ViT заимствует [CLS] токен у BERT.** К 196 патч-токенам добавляется специальный обучаемый вектор [CLS] - получается последовательность из 197 токенов. После прохождения через все слои трансформера, финальное представление [CLS] токена (его 768-мерный вектор) подаётся в classification head - простой линейный слой с числом выходов = число классов.
Альтернатива [CLS] токену - Global Average Pooling по всем патч-токенам. DeiT и многие последующие модели показали, что GAP работает сопоставимо или лучше. Преимущество [CLS]: явная точка агрегации, где информация со всего изображения собирается через attention.
Зачем ViT добавляет [CLS] токен к последовательности патчей?
Гибридные архитектуры: CNN + Transformer
**Чистый ViT требует огромных данных.** Обученный на ImageNet-21k (14M изображений) или JFT-300M (300M), он превосходит ResNet. Но на ImageNet-1k (1.2M) - уступает. Гибридные архитектуры решают это: CNN извлекает локальные признаки (feature map), а трансформер обрабатывает их как последовательность.
**Современные гибриды** - CoAtNet, CMT, LeViT - чередуют свёрточные и attention блоки, получая лучшее из обоих миров: CNN даёт локальную инвариантность и data efficiency, трансформер - глобальные зависимости. CoAtNet от Google достигает 90.88% top-1 на ImageNet с дополнительными данными.
Почему чистый ViT проигрывает CNN при обучении на небольших датасетах (< 10M изображений)?
Scaling Vision Transformers
**ViT масштабируется лучше CNN** при достаточном количестве данных. Google Brain исследовал семейство моделей от ViT-Ti (5.7M параметров) до ViT-G (1.8B параметров). Обнаруженная закономерность: accuracy растёт как степенной закон от числа параметров и данных - до насыщения не видно, если наращивать и то, и другое.
**Ключевое открытие ViT-22B (2023):** масштабирование до 22 миллиардов параметров не ломает обучение, если правильно использовать параллелизм. Модель обучена на TPU-v4 с tensor parallelism и показала 89.5% на ImageNet без fine-tuning. Efficient ViT и TinyViT - обратный тренд: как сделать ViT работающим на мобильных устройствах.
ViT полностью заменил CNN - свёртки устарели
CNN и ViT решают разные задачи. CNN эффективнее на малых данных и в задачах с сильной локальной структурой. Лучшие production-системы часто гибридны
Индуктивные предположения CNN (локальность, инвариантность) - преимущество при малых данных. При масштабировании до сотен миллионов изображений ViT обгоняет CNN, но большинство реальных задач - не ImageNet-21k
Модель ViT-B/16 и ViT-B/32 имеют одинаковое число параметров, но разный размер патча. Какая из них быстрее при инференсе?
Ключевые идеи
- **Патч = токен:** изображение режется на патчи 16×16, каждый проецируется в вектор эмбеддинга - полная аналогия с токенами в NLP
- **[CLS] токен агрегирует** информацию со всего изображения через механизм attention - его финальный вектор идёт в классификатор
- **Data hungry:** чистый ViT требует 10M+ изображений; гибриды с CNN backbone решают проблему data efficiency
- **Scaling laws работают** - ViT масштабируется лучше CNN при достаточном числе данных, от ViT-Ti (5.7M) до ViT-G (1.8B)
Связанные темы
ViT стоит на плечах нескольких ключевых идей из NLP и CV:
- Transformer и Attention — ViT - прямое применение оригинального трансформера к изображениям без архитектурных изменений
- Transfer Learning и Fine-tuning — ViT раскрывает потенциал только при предобучении на больших данных и fine-tuning на целевой задаче
- Self-Supervised Learning — MAE (Masked Autoencoder) и DINO обучают ViT без разметки - ключ к масштабированию
Вопросы для размышления
- CNN имеет встроенную инвариантность к сдвигам - ViT должен учить это из данных. Как это влияет на sample efficiency и что это говорит о природе inductive biases?
- ViT-B/16 обрабатывает изображение 224×224 как 196 токенов. Если подать изображение 448×448, количество токенов вырастет до 784 - attention станет в 16 раз медленнее. Как Flash Attention и другие оптимизации решают эту проблему?
- Патч 16×16 - жёсткая сетка, игнорирующая семантические границы объектов. Как это ограничение влияет на локализацию объектов, и почему SAM использует специальный prompt encoder для точной сегментации?
Связанные уроки
- dl-06 — ViT применяет энкодер трансформера прямо к патчам изображения
- dl-04 — Пространственный bias CNN, который ViT учит из данных
- dl-17 — Self-supervised DINO и MAE обучают ViT без разметки
- ml-31-transformers — Та же архитектура трансформера из курса ML
- cv-04 — Классификация изображений - основная задача ViT
- la-07-matrix-multiply — Self-attention строится на умножении матриц
- la-01-vectors-intro