Модуль I·Статья II·~3 мин чтения
Свёрточные нейронные сети (CNN)
Основы нейронных сетей
Превратить статью в подкаст
Выберите голоса, формат и длину — AI запишет аудио
Свёрточные нейронные сети
Обработка изображений стала прорывным применением нейронных сетей. Свёрточные сети (CNN, LeCun et al., 1989) используют локальную структуру изображений: признаки (края, текстуры) локальны и инвариантны к сдвигу. CNN произвели революцию в компьютерном зрении, победив людей на ImageNet в 2012 году.
Операция свёртки
Полносвязная сеть для изображения 224×224×3: первый слой имел бы 224×224×3 = 150528 входов. При 1000 нейронах: 150M параметров — нерационально, не масштабируется.
Свёртка 2D: Ядро (фильтр) K ∈ ℝ^{f×f×C_in} «скользит» по входному изображению X ∈ ℝ^{H×W×C_in}:
(X * K)[i,j] = Σ_{m=0}^{f-1} Σ_{n=0}^{f-1} Σ_{c=0}^{C_in-1} X[i+m, j+n, c] · K[m, n, c] + b
Здесь K — фильтр размером f×f, применяется к каждому патчу f×f входа. Выходной объект (feature map): H' × W' × C_out (C_out фильтров). Параметров в свёрточном слое: f × f × C_in × C_out + C_out (vs H×W×C_in × C_out в полносвязном).
Ключевые свойства CNN:
- Sharing весов: один фильтр применяется ко всему изображению → инвариантность к сдвигу
- Локальность: каждый нейрон «смотрит» на локальный патч → локальные признаки
- Иерархия: начальные слои — края, цвет; глубокие — объекты, семантика
Padding: SAME — дополняем нулями, выход = вход по пространственным размерам. VALID — без дополнения, выход меньше. Stride s > 1 — шаг скольжения > 1 → уменьшение выхода в s раз.
Pooling и архитектура CNN
Max pooling: берём максимум в окне k×k. Уменьшает пространственный размер в k раз. Создаёт инвариантность к малым сдвигам и деформациям. Не имеет параметров.
Global Average Pooling (GAP): среднее по всему feature map → вектор из C значений. Заменяет полносвязные слои в конце — меньше параметров, лучше регуляризация.
Типичная архитектура: Conv → BN → ReLU → Conv → BN → ReLU → Pool → ... → GAP → FC → Softmax.
Эволюция архитектур
AlexNet (Krizhevsky, Sutskever, Hinton, 2012): 5 свёрточных слоёв + 3 полносвязных. ImageNet Top-5 error: 15.3% (vs 26% у классических методов). Использовал ReLU, dropout, data augmentation — ключевые инновации.
VGGNet (2014): глубокие сети только из 3×3 свёрток + max-pool. «Два 3×3 = одно 5×5, но меньше параметров». Top-5: 7.3%.
ResNet (He et al., 2015): Residual connections: F(x) + x — «shortcut» позволяет обучать сети глубиной 50, 100, 152 слоя. Решает проблему деградации (не исчезания) градиента. Top-5: 3.57% (лучше человека 5.1%). Математически: блок — аппроксимируют «остаток» F(x) = H(x) − x, не полное преобразование H(x).
EfficientNet (Tan & Le, 2019): масштабирование глубины, ширины и разрешения совместно через compound coefficient. SOTA при меньшем числе параметров — найдено через NAS.
Специализированные архитектуры
U-Net (2015): Энкодер-декодер с пропускными соединениями (skip connections). Для семантической сегментации: нужно предсказать класс каждого пикселя. Пропускные соединения сохраняют высокочастотные пространственные детали.
YOLO (You Only Look Once): Детекция объектов за один проход сети. Делим изображение на S×S клеток, каждая предсказывает B bounding boxes + классы. Скорость: 30+ FPS — real-time детекция.
Численный пример
VGG-16 на ImageNet: 13 свёрточных слоёв (3×3), 3 полносвязных. Параметры: ~138M. Первый свёрточный слой: 64 фильтра 3×3×3 = 1728 параметров. Последний полносвязный: 4096×4096 = 16.7M — большинство параметров в FC! Global Average Pooling вместо FC снижает до ~7M параметров с сопоставимым качеством.
ResNet-50 vs VGG-16: 25M параметров (vs 138M), Top-1 accuracy: 76% vs 74%. Глубина + residual connections > ширина.
Задание: Реализуйте простую CNN на PyTorch для CIFAR-10 (32×32×3, 10 классов): [Conv(3→32,3×3) → BN → ReLU → MaxPool → Conv(32→64,3×3) → BN → ReLU → MaxPool → FC(64×8×8→256) → FC(256→10)]. Обучите 30 эпох, Adam, lr=0.001. Сравните с полносвязной сетью [3072→256→128→10]. Постройте матрицу ошибок. Визуализируйте фильтры первого слоя.
§ Акт · что дальше