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

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, прямой проход)
  • Как устроен полносвязный слой и матричное умножение
  • Фреймворки: PyTorch vs TensorFlow
  • Нейронные сети: от биологии к математике

Ян ЛеКун и первая практическая 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-51998~5% (MNIST)Conv + AvgPool + FC - первая CNN
AlexNet201215.3%ReLU, Dropout, GPU training
VGG-1620147.3%Стек 3x3 вместо больших фильтров
GoogLeNet20146.7%Inception module: разные фильтры параллельно
ResNet-15220153.57%Skip connections: f(x) = F(x) + x
EfficientNet20191.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 точность лучше человека. Значит ли это, что модель «понимает» изображения так же как человек? Что она делает иначе?

Связанные уроки

  • dl-03
  • dl-05
  • cv-04
  • ml-29-cnn
  • dl-09
  • la-04-matrix-ops
CNN: свёрточные сети

0

1

Войти