Глава 12. Видение через квадраты: Vision Transformer (ViT)
Что будет, если разрезать картинку на патчи,
сделать вид, что это «токены»,
и скормить их трансформеру как текст?
К концу Части I свёртка казалась почти «законом природы» для изображений.
ViT задаёт неприятный вопрос: а вдруг это был сильный prior для мира небольших данных — и на большом масштабе выгоднее другой обмен?
12.1. Патчи вместо пикселей
Прямой self-attention по всем пикселям Full HD нереален: N слишком огромный для N².
Поэтому ViT делает грубый, но рабочий ход:
Свёрточного стека как обязательного хребта больше нет.
Локальность не уничтожена полностью — она спрятана в том, что патч уже локален. Но дальше связи между патчами строит attention.
12.2. Столкновение философий
| CNN | ViT | |
|---|---|---|
| Базовый prior | Локальность, сдвиг, иерархия | Минимальный prior, больше гибкости |
| Как растёт контекст | Глубина / downsampling | Сразу потенциально глобально |
| Данные | Силён на малых/средних | Раскрывается на больших |
| Индуктивное смещение | Много | Мало (плюс патч и позиции) |
Формула спора:
Свёртка встраивает знание о мире в архитектуру.
ViT покупает гибкость и требует, чтобы знание пришло из данных и масштаба.
Поэтому ранние ViT без огромного претрейна часто выглядели скромно против ResNet.
На большом претрейне картина менялась: prior можно «оплатить» данными.
Это один из самых важных мета-уроков книги:
сильный prior = меньше данных, меньше гибкости
слабый prior = больше данных, больше потолок
Нет универсального победителя — есть режим задачи.
12.3. Зачем тогда вообще остались свёртки
Потому что мир продуктов — не только «есть 400M картинок».
На практике побеждают гибриды и возвращения prior’а:
- convolutional stem перед патчами;
- window attention (Swin) — вернуть локальность и иерархию стадий;
- CNN backbones с transformer-шеями/головами в детекции;
- эффективные мобильные CNN там, где нет трансформерного бюджета.
flowchart TD
A[Зрительная модель] --> B[Сильный prior: CNN]
A --> C[Слабый prior: ViT]
A --> D[Гибриды: stem/window/hierarchy]
B --> B1[Эффективны на малых данных / edge]
C --> C1[Сильны при большом претрейне]
D --> D1[Частый промышленный компромисс]
Даже в детекции (Часть III) attention появляется точечно: не обязательно выкидывать YOLO, чтобы взять полезную идею динамической маршрутизации.
12.4. Что ViT меняет в голове архитектора
После этой главы нельзя честно сказать «изображения = всегда CNN».
Можно сказать жёстче и полезнее:
Архитектура — это ставка на то,
какое знание мы встраиваем заранее
и какое оставляем данным.
Свёртка ставит на локальную корреляцию.
Attention ставит на обучаемые связи.
Residual/Norm ставят на обучаемость глубины.
YOLO ставит на latency.
ViT ставит на масштаб данных.
Часть IV — итог
| Подход | Суть |
|---|---|
| RNN | Естественное время, плохой parallel |
| Attention | Динамический контекст, O(N²), parallel OK |
| ViT | Vision без обязательного CNN-prior |
Общий паттерн: меняем маршрут информации → меняем счёт.
Дальше книга уходит в генерацию: не «понять, что на картинке», а «создать картинку». Там обмен станет ещё страннее — иногда чтобы научиться собирать, полезно сначала научиться разрушать.
Если бы вы были автором статьи…
-
Одинаковый бюджет параметров: ResNet vs ViT на 10k и на 10M картинок.
Какой график качества вы ожидаете? Где пересечение? -
Патч 8×8 vs 32×32 при фиксированном compute.
Что случится с мелкими объектами, если перенести ViT-идею в детекцию без FPN-иерархий? -
Добавьте один свёрточный prior обратно в ViT (stem или локальные окна).
Какую боль вы лечите — данные, память или геометрию?
Часть IV закрыта. В Части V разберём GAN как обучение через конфликт и диффузию как порядок, рождённый из шума.