Как работает сеть ResNet и в чём её преимущества?
ResNet (Residual Network) — это семейство глубоких сверточных нейронных сетей, разработанных исследователями Microsoft Research в 2015 году. Она выиграла соревнование ImageNet 2015, установив новый рекорд по точности классификации. Главное нововведение ResNet — это использование остаточных соединений (residual connections), которые позволяют эффективно обучать очень глубокие нейронные сети (до сотен или даже тысяч слоев), избегая проблем затухающего и взрывающегося градиента.
1. Проблема глубокой нейросети
Когда нейросеть становится слишком глубокой (более 20–30 слоев), возникают следующие проблемы:
-
Затухающий градиент: при обратном распространении ошибки градиенты становятся очень маленькими и исчезают, мешая обновлению весов в начальных слоях.
-
Переобучение: глубокие сети могут заучивать шум, а не обобщать данные.
-
Деградация точности: увеличение количества слоёв не всегда улучшает производительность — иногда точность начинает снижаться, даже на обучающей выборке.
Эти проблемы делали использование очень глубоких сетей практически невозможным до появления ResNet.
2. Остаточные блоки (Residual Blocks)
Ключевое новшество ResNet — остаточное обучение (residual learning). Вместо того чтобы пытаться обучить сеть приближать функцию H(x)H(x), ResNet предлагает обучать остаточную функцию F(x)=H(x)−xF(x) = H(x) - x, то есть:
H(x)=F(x)+xH(x) = F(x) + x
Идея состоит в том, что легче обучить отклонение от входа, чем саму целевую трансформацию.
Архитектура остаточного блока:
Типичный residual block содержит:
-
два сверточных слоя (обычно 3×3) с BatchNorm и ReLU
-
shortcut connection — прямое добавление входа xx к выходу F(x)F(x)
-
итоговое выражение:
y=F(x,Wi)+xy = F(x, W_i) + x
Где:
-
xx — вход блока
-
F(x,Wi)F(x, W_i) — результат обычной сверточной трансформации
-
yy — выход блока
Операция сложения происходит поэлементно.
3. Типы остаточных соединений
Identity Shortcut:
Если вход и выход имеют одинаковую размерность, то xx можно прибавить напрямую:
y=F(x)+xy = F(x) + x
Projection Shortcut:
Если размерности отличаются (например, из-за изменения числа каналов или размера карты признаков), используют линейную проекцию:
y=F(x)+Wsxy = F(x) + W_s x
Где WsW_s — матрица проекции (обычно 1×1 свёртка).
4. Структура полной сети ResNet
Пример архитектуры ResNet-50 (50 слоёв):
-
Вход: 7×7 свёртка, stride=2 → max pooling 3×3
-
Conv2_x: 3 residual блока (по 3 слоя в каждом)
-
Conv3_x: 4 residual блока
-
Conv4_x: 6 residual блоков
-
Conv5_x: 3 residual блока
-
Average Pooling → Fully Connected слой → softmax
Каждый residual блок обычно состоит из трёх слоёв: 1×1 → 3×3 → 1×1, называемый bottleneck. Это позволяет уменьшить вычисления и глубину без потери точности.
5. Преимущества ResNet
1. Обучение очень глубоких сетей
ResNet позволила обучать сети с более чем 1000 слоями, чего раньше не удавалось достичь из-за затухающих градиентов.
2. Избежание деградации
Добавление новых слоев не ухудшает точность, даже если они не вносят новых знаний — за счёт того, что сеть может просто научиться реализовывать тождественное отображение F(x)=0F(x) = 0, и выход будет равен xx.
3. Более быстрая сходимость
Градиенты свободно проходят через shortcut-соединения, делая обратное распространение более эффективным и стабильным.
4. Повышенная обобщающая способность
Сеть легче обучается, при этом показывает отличные результаты не только в классификации, но и в других задачах: детекции объектов, сегментации, генерации изображений (GAN), и т.д.
5. Гибкость и модульность
Residual блоки можно легко вставлять в любую другую архитектуру (например, в UNet, GAN, Transformer), усиливая её обучаемость и устойчивость.
6. Разновидности ResNet
ResNet-18, ResNet-34
Используют простой residual block с двумя свёртками по 3×3. Применяются там, где важна скорость и компактность (например, на мобильных устройствах).
ResNet-50, ResNet-101, ResNet-152
Используют bottleneck-блоки с 1×1 и 3×3 свёртками. Это уменьшает вычислительную нагрузку, особенно при большой глубине.
ResNeXt
Модификация ResNet с групповой свёрткой, улучшает параллелизм и увеличивает точность при той же глубине.
WideResNet
Увеличивает ширину (количество каналов) вместо глубины. Помогает бороться с переобучением на небольших датасетах.
7. Интуиция остаточного обучения
Обычная нейросеть при добавлении новых слоёв должна учиться заново, даже если предыдущая часть уже давала хороший результат. ResNet позволяет «новым» слоям не мешать старым — если они не нужны, то просто учится F(x)=0F(x) = 0, и shortcut-прямой путь xx передаёт данные дальше без искажений. Это помогает строить глубокие, но устойчивые модели.
8. Обратное распространение градиента через shortcut
Один из ключевых моментов — при обратном распространении градиента через выражение y=F(x)+xy = F(x) + x, градиент может пойти как через путь F(x)F(x), так и напрямую через xx. Это предотвращает исчезновение градиента, так как один путь всегда открыт. Это математически можно выразить так:
dydx=dF(x)dx+1\frac{dy}{dx} = \frac{dF(x)}{dx} + 1
Благодаря этому даже начальные слои получают полезный сигнал об ошибке на каждой итерации.
9. Применение и расширение
ResNet используется как базовая архитектура во многих современных моделях:
-
Mask R-CNN для сегментации
-
Faster R-CNN для детекции
-
ResNet + FPN (Feature Pyramid Network) для многоуровневых признаков
-
В качестве базового экстрактора признаков в трансформерах (например, DETR)
ResNet остается фундаментом многих высокоточных решений в области компьютерного зрения.