Глубокое обучение
CNN: свёрточные сети
2012. AlexNet выиграл ImageNet с отрывом 10% от второго места. Все конкуренты использовали hand-crafted features: SIFT, HOG, SVM. AlexNet просто учился на GPU. С того момента deep learning полностью захватил computer vision - методы 2011 года стали историей за один год.
- **ImageNet 2012**: AlexNet - top-5 error 15.3%, второе место - 26.2%. После этого все топовые решения используют CNN
- **ResNet 2015**: top-5 error 3.57% - лучше человека (5.1%). Skip connections стали стандартом в большинстве архитектур
- **Instagram/Facebook**: модели на основе ResNet обрабатывают 100 млн фотографий в день для content moderation и поиска
Предварительные знания
- Backpropagation и градиентный спуск для обучения сетей
- Работа с тензорами в PyTorch (nn.Module, прямой проход)
- Как устроен полносвязный слой и матричное умножение
Ян ЛеКун и первая практическая CNN
В 1998 году Ян ЛеКун опубликовал LeNet-5 - первую CNN, применённую в промышленном масштабе. Система читала рукописные цифры на банковских чеках для AT&T и затем для US Postal Service - к 1998 году обрабатывала 10-20% всех чеков в США. ЛеКун использовал свёртки, pooling и backpropagation ещё в 1989 году, но промышленный успех пришёл позже. За эту работу он получил премию Тьюринга в 2018 году вместе с Хинтоном и Бенжио.
Свёртка: локальные паттерны в изображениях
**2012. ImageNet Large Scale Visual Recognition Challenge. Команда Geoffa Hintona с сетью AlexNet получила top-5 error 15.3% - на 10 процентных пунктов лучше второго места.** До этого момента лидировали методы с hand-crafted features (SIFT, HOG). AlexNet доказал: CNN с GPU учатся признакам сами. Это был момент, когда deep learning захватил computer vision.
**Свёртка (convolution)** - операция, при которой маленький фильтр (kernel) скользит по изображению и вычисляет поэлементное произведение с накоплением. Каждый фильтр детектирует один тип паттерна: горизонтальные края, вертикальные края, угловые точки. Несколько фильтров в одном слое дают несколько feature map.
**Почему свёртка, а не полносвязный слой?** Изображение 224x224x3 = 150 528 входов. Полносвязный слой с 1000 нейронами = 150 528 000 параметров только в первом слое. Свёртка 3x3x3 = **27 параметров** - и они разделяются по всем позициям изображения (parameter sharing). Это позволяет строить сети с миллионами параметров вместо миллиардов.
CNN с фильтром 3x3 обрабатывает изображение 28x28. При stride=1 и padding=0 какой размер feature map на выходе?
Pooling: пространственная агрегация
После свёртки feature maps всё ещё пространственно привязаны к позициям. **Max pooling** решает две задачи: уменьшает размер (downsampling) и добавляет **инвариантность к небольшим смещениям**. Кошка сдвинулась на 2 пикселя - max pooling 2x2 с stride=2 этого не заметит.
**Современная тенденция: меньше pooling.** ResNet, ConvNeXt и другие современные архитектуры часто используют **strided convolutions** вместо pooling - свёртку со stride=2. Это обучаемое downsampling в отличие от фиксированного max. Эксперименты показывают сопоставимое качество при лучшей гибкости.
Зачем нужен Max Pooling в CNN, если можно использовать свёртки с stride>1 для уменьшения размера?
Receptive Field: сколько видит нейрон
**Receptive field** - область входного изображения, которая влияет на значение одного нейрона в feature map. Нейрон в первом conv-слое (3x3) видит только 3x3 пикселя. Нейрон во втором слое видит 5x5 пикселей оригинала. В десятом слое - уже значительную часть изображения. Глубина сети - это способ увидеть большой контекст дешёвыми операциями.
**Effective receptive field** меньше теоретического. Исследования (Luo et al., 2016) показали, что пиксели в центре RF влияют сильнее периферийных из-за способа суммирования. Реальный effective RF примерно в 2 раза меньше теоретического - это объясняет, почему очень глубокие сети всё равно иногда теряют глобальный контекст.
Почему стек из трёх свёрток 3x3 лучше одной свёртки 7x7 при одинаковом receptive field?
Архитектуры: от LeNet до ResNet
**2015. ResNet (Kaiming He, Microsoft Research) выиграл ImageNet с top-5 error 3.57%** - лучше человека (5.1%). Главная инновация: skip connections (residual connections). Они позволили обучать сети из 152 слоёв, тогда как раньше сети глубже 20 слоёв переставали обучаться из-за vanishing gradients. Residual block - одна из самых важных идей в deep learning.
| Архитектура | Год | Top-5 Error | Идея |
|---|---|---|---|
| LeNet-5 | 1998 | ~5% (MNIST) | Conv + AvgPool + FC - первая CNN |
| AlexNet | 2012 | 15.3% | ReLU, Dropout, GPU training |
| VGG-16 | 2014 | 7.3% | Стек 3x3 вместо больших фильтров |
| GoogLeNet | 2014 | 6.7% | Inception module: разные фильтры параллельно |
| ResNet-152 | 2015 | 3.57% | Skip connections: f(x) = F(x) + x |
| EfficientNet | 2019 | 1.8% | Compound scaling: depth + width + resolution |
**Современный стандарт 2024:** EfficientNet/ConvNeXt как backbone для большинства CV задач. Vision Transformer (ViT) конкурирует с CNN на ImageNet. На практике: предобученный ResNet-50 из torchvision работает лучше кастомной CNN в большинстве задач классификации - transfer learning побеждает обучение с нуля почти всегда.
Глубже = лучше: нужно брать максимально глубокую CNN для любой задачи
Для небольших датасетов лучше работает предобученный ResNet-50 с transfer learning, чем ResNet-152 обученный с нуля. Глубина без данных - переобучение
ResNet-152 выиграл ImageNet на 1.2 млн изображений. На датасете из 10 000 изображений ResNet-152 с нуля переобучается, а ResNet-50 с предобученными весами (transfer learning) даст accuracy на 10-20% выше. Размер модели должен соответствовать объёму данных.
Почему skip connections в ResNet позволяют обучать сети из 150+ слоёв, тогда как «наивные» сети переставали обучаться глубже 20?
Связанные темы
CNN - основа современного computer vision. Вот куда ведут эти идеи:
- Transfer Learning — Предобученные CNN (ResNet, EfficientNet) служат feature extractors, которые дообучают на своих данных
- Object Detection — YOLO и Faster R-CNN ставят детекционные головы поверх backbone-CNN
- Image Classification на практике — Применение архитектур CNN в реальных пайплайнах компьютерного зрения
Ключевые идеи
- **Свёртка** - скользящий фильтр по изображению: каждый фильтр детектирует один паттерн, parameter sharing даёт в 100x меньше параметров чем полносвязный слой
- **Pooling** - пространственная агрегация: уменьшает размер, добавляет инвариантность к смещениям. Max Pooling - берём максимум, GAP - среднее по всему feature map
- **Receptive field** растёт с глубиной: ранние слои видят детали и текстуры, глубокие - объекты целиком. Три 3x3 = один 7x7 по RF, но в 2x меньше параметров и три нелинейности
- **ResNet (2015)** - skip connections позволяют обучать 150+ слоёв: градиент течёт напрямую, vanishing gradient не мешает. Лучше человека на ImageNet. Сегодня - основа transfer learning
Вопросы для размышления
- ResNet добавляет вход к выходу блока: out = F(x) + x. Если F(x) = 0, то out = x - identity mapping. Почему это свойство критически важно для обучения очень глубоких сетей?
- Современные Vision Transformers (ViT) не используют свёртки вообще - они делят изображение на патчи и обрабатывают как последовательность. Когда ViT лучше CNN, а когда хуже?
- Image classification дала ResNet точность лучше человека. Значит ли это, что модель «понимает» изображения так же как человек? Что она делает иначе?