Глубокое обучение

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]-токен в моделях последовательностей
  • Transformers
  • CNN: свёрточные сети

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
Vision Transformers (ViT)

0

1

Войти