Residual Networks (ResNet)
Остаточная сеть (ResNet) добавляет вход каждого блока к его выходу через пропускающее соединение, благодаря чему можно обучать очень глубокие сети. Рассматриваются блоки, разновидности и примеры кода.
Остаточная сеть (ResNet) — это глубокая свёрточная нейронная сеть (CNN), построенная из остаточных блоков, в которых связь с пропуском складывает вход блока с его выходом. Поэтому каждый блок учится только корректировать входные данные, что позволяет надёжно обучать сети с 50, 152 и даже более чем 1 000 слоями. Каймин Хэ, Сянъюй Чжан, Шаоцин Жэнь и Цзянь Сунь из Microsoft Research представили ResNet в статье 2015 года Deep Residual Learning for Image Recognition; ансамбль остаточных сетей победил в задаче классификации ILSVRC 2015 с ошибкой top-5 3.57% на ImageNet. С тех пор остаточные связи стали стандартной частью большинства глубоких архитектур, включая трансформеры и детекторы объектов реального времени.
Проблема ухудшения качества#
До появления ResNet добавление слоёв в обычную последовательность свёрток в итоге ухудшало результаты. Авторы ResNet показали, что ошибка на обучающих данных у обычной 56-слойной сети была выше, чем у 20-слойной, поэтому переобучение не могло объяснить ухудшение. Более глубокая сеть могла бы повторить результаты неглубокой, если бы её дополнительные слои реализовывали тождественное отображение, однако градиентный спуск не находил это решение. Авторы назвали это проблемой ухудшения качества. Проблему исчезающего градиента к тому времени в значительной мере решили с помощью нормализованной инициализации весов и пакетной нормализации, поэтому глубокие обычные сети сходились, но к худшим решениям.
Как работают остаточные блоки#
Остаточный блок вычисляет y = F(x) + x, где x — вход блока, а F — небольшая последовательность слоёв, обычно из двух или трёх свёрток с пакетной нормализацией и ReLU. Если оптимальное преобразование блока близко к тождественному отображению, слоям достаточно приблизить F к нулю, что намного проще, чем обучать тождественное отображение с нуля. Связь с пропуском также обеспечивает градиентам прямой путь назад через каждый блок. Тождественные связи с пропуском не добавляют параметров и почти не увеличивают вычисления. Если блок меняет число каналов или уменьшает разрешение с шагом 2, формы x и F(x) перестают совпадать, и свёртка 1×1 проецирует связь с пропуском на новую форму.
ResNet-18 и ResNet-34 состоят из базовых блоков с двумя свёртками. В ResNet-50, ResNet-101 и ResNet-152 используется блок-«бутылочное горлышко» из трёх свёрток: первая свёртка 1×1 уменьшает число каналов, свёртка 3×3 обрабатывает их, а вторая свёртка 1×1 восстанавливает число каналов, делая глубокие модели экономичными. В ResNet-50 около 25.6 миллиона параметров. В оригинальной статье также описано обучение сети из 1 202 слоёв на CIFAR-10 с ошибкой на обучающих данных менее 0.1%, хотя ошибка на тестовых данных составила 7.93% — хуже, чем 6.43% у сети из 110 слоёв. Авторы объяснили этот разрыв переобучением на небольшом наборе данных.
Варианты ResNet#
- ResNet с предактивацией: В продолжении работы 2016 года те же авторы перенесли пакетную нормализацию и ReLU перед каждой свёрткой, оставив на пути связи с пропуском чистое тождественное отображение, и обучили сеть из 1 001 слоя на CIFAR-10.
- ResNeXt: Разделяет каждый блок-«бутылочное горлышко» на множество параллельных путей малой ширины, что называется кардинальностью и повышает точность при тех же вычислительных затратах.
- Wide ResNet: Использует меньше широких блоков, показывая, что ширина может заменить часть глубины.
- Модернизированные ResNet: ConvNeXt (2022) обновила архитектуру ResNet, добавив более крупные ядра, послойную нормализацию и активации GELU, чтобы конкурировать с визуальными трансформерами.
Использование предварительно обученной ResNet#
Предварительно обученные ResNet по-прежнему часто используют в качестве базовых моделей и основ для переноса обучения. Модели ResNet в torchvision поставляются с весами ImageNet и соответствующей предобработкой, поэтому для классификации изображения достаточно нескольких строк:
import urllib.request
import torch
from torchvision.io import decode_image
from torchvision.models import ResNet50_Weights, resnet50
# Load ResNet-50 with ImageNet weights and its matching preprocessing
weights = ResNet50_Weights.DEFAULT
model = resnet50(weights=weights).eval()
preprocess = weights.transforms()
# Download and decode a sample image
data = urllib.request.urlopen("https://ultralytics.com/images/bus.jpg").read()
image = decode_image(torch.frombuffer(bytearray(data), dtype=torch.uint8))
# Classify the image and report the most likely ImageNet class
with torch.no_grad():
probs = model(preprocess(image).unsqueeze(0)).softmax(dim=1)
score, index = probs.max(dim=1)
print(f"{weights.meta['categories'][index.item()]}: {score.item():.2f}")Выводится minibus: 0.25 — ближайший из 1 000 классов ImageNet к городскому автобусу на фотографии. Для пользовательской задачи можно заменить последний полносвязный слой и дообучить модель на новых метках, повторно используя признаки, которые остаточные этапы выучили на ImageNet.
ResNet и родственные архитектуры#
- Обычные сети, например VGG: VGG состоит из последовательности свёрток 3×3 без связей с пропуском и содержит не более 19 слоёв с весами. ResNet-152 в восемь раз глубже и имеет меньшую сложность, чем VGG-19.
- Highway-сети: Разработанные параллельно с ResNet, они добавляют обучаемые шлюзы, которые могут закрывать связь с пропуском. Тождественные связи ResNet с пропуском никогда не закрываются и не добавляют параметров.
- DenseNet: Вместо сложения с одним пропуском объединяет конкатенацией выходы всех предыдущих слоёв блока, повторно используя признаки ценой увеличения числа каналов.
- U-Net: Её связи с пропуском передают карты признаков кодировщика декодировщику и конкатенируют их там, соединяя удалённые этапы, а не обрамляя отдельные блоки.
- Визуальные трансформеры (ViT): Заменяют свёртки механизмом самовнимания, но сохраняют остаточные связи вокруг каждого подслоя внимания и прямого распространения, как и все трансформеры.
Остаточные связи в современных моделях#
Идея остаточных связей пережила конкретные архитектуры ResNet. Каждый слой большой языковой модели (LLM) добавляет выходы механизма внимания и прямого распространения к текущему остаточному потоку, а основы большинства детекторов на CNN состоят из остаточных блоков. В YOLO26 блоки C3k2 построены из модулей-«бутылочных горлышек», возвращающих x + F(x), когда число входных и выходных каналов совпадает. В пакет Ultralytics также входят конфигурации RT-DETR от Baidu с основами ResNet-50 и ResNet-101. Статья о ResNet получила награду за лучшую статью на CVPR 2016, а анализ Nature за 2025 год признал её самой цитируемой статьёй XXI века.










