Открыть сервис

ResNet

ResNet (сокращение от англ. Residual Network — «остаточная сеть») — это архитектура глубокой свёрточной нейронной сети, предложенная в 2015 году исследователями из Microsoft Research (Kaiming He, Xiangyu Zhang, Shaoqing Ren и Jian Sun). ResNet стала прорывом в области компьютерного зрения, позволив обучать сети с гораздо большим числом слоёв (до 152 и более), чем было возможно ранее, за счёт введения «остаточных блоков» (residual blocks) и «соединений с пропуском» (skip connections). Архитектура легла в основу многих современных моделей и является одной из самых влиятельных в истории глубокого обучения.

История

Проблема деградации

До появления ResNet считалось, что увеличение глубины нейронной сети (количества слоёв) улучшает её способность к обучению сложным функциям. Однако на практике при добавлении слоёв точность на обучающей выборке сначала росла, а затем начинала падать — это явление получило название «проблема деградации» (degradation problem). В отличие от переобучения, деградация проявлялась и на обучающих данных, что указывало на фундаментальную трудность оптимизации очень глубоких сетей. Причина заключалась в том, что градиенты при обратном распространении ошибки затухали (или взрывались) при прохождении через множество последовательных нелинейных преобразований.

Предложение ResNet

В 2015 году команда Microsoft Research представила архитектуру ResNet, которая решала проблему деградации с помощью «остаточного обучения» (residual learning). Вместо того чтобы каждая группа слоёв напрямую аппроксимировала целевую функцию H(x), сеть обучалась аппроксимировать остаточную функцию F(x) = H(x) — x, где x — вход этой группы. Затем к выходу F(x) прибавлялся исходный вход x через короткое соединение (skip connection). Это позволяло градиентам «обходить» блоки и распространяться напрямую, что значительно упрощало обучение очень глубоких сетей.

На конкурсе ImageNet Large Scale Visual Recognition Challenge (ILSVRC) 2015 года ResNet-152 (152 слоя) заняла первое место в задачах классификации, детекции и сегментации изображений, показав ошибку топ-5 на уровне 3.57%, что превзошло человеческий уровень (около 5%) и предыдущие архитектуры (например, VGGNet, GoogLeNet).

Архитектура

Остаточный блок

Основной строительный элемент ResNet — остаточный блок (residual block). В простейшем виде он состоит из двух или трёх свёрточных слоёв с нормализацией (Batch Normalization) и функцией активации ReLU, а также параллельного короткого соединения (skip connection), которое складывает вход блока с его выходом. Формально: выход = F(x, {W_i}) + x, где F — преобразование, выполняемое слоями, а x — вход. Если размерности входа и выхода не совпадают (например, из-за изменения количества каналов или пространственного размера), используется проекционное короткое соединение (projection shortcut) — дополнительный свёрточный слой с ядром 1×1, который выравнивает размерности.

Типы блоков

  • BasicBlock (для ResNet-18, ResNet-34): два свёрточных слоя 3×3 с одинаковым числом каналов.
  • BottleneckBlock (для ResNet-50, ResNet-101, ResNet-152): три слоя — 1×1 (уменьшение размерности), 3×3 (основное преобразование), 1×1 (восстановление размерности). Такая структура экономит параметры и позволяет строить более глубокие сети.

Варианты архитектуры

ResNet имеет несколько стандартных конфигураций, различающихся глубиной и количеством параметров:

ВариантКоличество слоёвКоличество параметров (млн)Особенности
ResNet-181811.7Базовая, лёгкая, для небольших задач
ResNet-343421.8Улучшенная версия, баланс точности и скорости
ResNet-505025.6Использует BottleneckBlock, популярна на практике
ResNet-10110144.5Глубокая, для сложных задач
ResNet-15215260.2Самая глубокая из оригинальных, рекордная точность

Все варианты начинаются с одного свёрточного слоя 7×7 (с шагом 2) и слоя MaxPooling 3×3 (с шагом 2), после чего следуют четыре группы остаточных блоков (stage) с увеличивающимся числом каналов (64, 128, 256, 512) и уменьшающимся пространственным размером. Завершается сеть слоем глобального среднего пулинга (Global Average Pooling) и полносвязным слоем с softmax для классификации.

Принцип работы

Остаточное обучение

Идея остаточного обучения заключается в том, что сети легче аппроксимировать отклонение от тождественного отображения (identity mapping), чем саму сложную функцию. Если оптимальное преобразование — тождественное (H(x) = x), то остаточному блоку достаточно обнулить веса (F(x) = 0), что проще, чем настраивать нелинейные слои на точное копирование входа. На практике это позволяет градиентам беспрепятственно проходить через короткие соединения, избегая затухания.

Преимущества

  • Обучение очень глубоких сетей: ResNet-152 и более глубокие варианты (до 1000 слоёв) обучаются стабильно, без деградации.
  • Улучшение обобщения: глубокие сети с остаточными связями показывают более высокую точность на тестовых данных.
  • Эффективность: BottleneckBlock уменьшает количество параметров по сравнению с наивным увеличением глубины.
  • Совместимость с другими методами: остаточные блоки легко комбинируются с пакетной нормализацией, dropout и другими техниками регуляризации.

Применение

Компьютерное зрение

ResNet стала стандартом для многих задач:

  • Классификация изображений: базовые модели для ImageNet, CIFAR-10/100, Places365.
  • Детекция объектов: используется в качестве backbone (основы) в архитектурах Faster R-CNN, YOLO, SSD.
  • Сегментация изображений: основа для U-Net, DeepLab, Mask R-CNN.
  • Распознавание лиц: в системах FaceNet, ArcFace.

Другие области

  • Обработка естественного языка: адаптации ResNet для текстовых данных (например, в моделях Transformer иногда используются остаточные связи).
  • Медицинская диагностика: анализ медицинских снимков (рентген, МРТ, КТ) с помощью ResNet.
  • Автономное вождение: распознавание дорожных знаков, пешеходов, препятствий.
  • Генерация изображений: в генеративно-состязательных сетях (GAN) и моделях диффузии.

Влияние и развитие

Наследие

ResNet оказала огромное влияние на глубокое обучение. Остаточные соединения стали стандартным элементом практически всех современных архитектур — от Transformer (в NLP) до EfficientNet и ConvNeXt (в CV). Концепция «магистрали» (highway) и «ворот» (gates) также была предвосхищена ResNet, хотя последняя предложила более простой и эффективный подход.

Вариации и улучшения

  • Pre-activation ResNet (He et al., 2016): порядок операций в блоке изменён — нормализация и активация выполняются до свёртки, что улучшает обучение.
  • Wide ResNet (Zagoruyko, Komodakis, 2016): увеличение ширины (числа каналов) вместо глубины — даёт лучшую точность при меньшем числе слоёв.
  • ResNeXt (Xie et al., 2017): комбинация ResNet с групповыми свёртками, что увеличивает ёмкость модели без роста числа параметров.
  • DenseNet (Huang et al., 2017): развивает идею коротких соединений, соединяя каждый слой со всеми последующими.
  • SE-ResNet (Hu et al., 2018): добавление модуля сжатия и возбуждения (Squeeze-and-Excitation) для адаптивного пересчёта каналов.

Критика и ограничения

  • Вычислительная сложность: глубокие варианты (ResNet-152) требуют значительных ресурсов GPU и памяти.
  • Избыточность: некоторые исследования показывают, что многие слои в ResNet можно удалить без существенной потери точности (например, метод «обрезки» — pruning).
  • Неоптимальность для малых датасетов: на небольших выборках ResNet склонна к переобучению, хотя это смягчается регуляризацией и аугментацией данных.

Интересные факты

  • ResNet-152, победившая в ILSVRC 2015, имела глубину в 152 слоя — в 8 раз глубже, чем VGGNet (19 слоёв), но при этом содержала меньше параметров (60 млн против 138 млн у VGGNet).
  • Название «ResNet» происходит от слова «residual» (остаточный), что отражает ключевую идею обучения остаточным функциям.
  • В 2016 году команда Microsoft Research продемонстрировала ResNet с 1001 слоем, которая успешно обучалась на датасете CIFAR-10, подтверждая масштабируемость подхода.
  • Архитектура ResNet была реализована во всех основных фреймворках глубокого обучения (TensorFlow, PyTorch, Keras, Caffe, MXNet) и доступна в виде предобученных моделей.

Источники

  • He, K., Zhang, X., Ren, S., & Sun, J. (2016). Deep Residual Learning for Image Recognition. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR).
  • He, K., Zhang, X., Ren, S., & Sun, J. (2016). Identity Mappings in Deep Residual Networks. European Conference on Computer Vision (ECCV).
  • Zagoruyko, S., & Komodakis, N. (2016). Wide Residual Networks. British Machine Vision Conference (BMVC).
  • Xie, S., Girshick, R., Dollar, P., Tu, Z., & He, K. (2017). Aggregated Residual Transformations for Deep Neural Networks. CVPR.
  • Huang, G., Liu, Z., Van Der Maaten, L., & Weinberger, K. Q. (2017). Densely Connected Convolutional Networks. CVPR.
  • Hu, J., Shen, L., & Sun, G. (2018). Squeeze-and-Excitation Networks. CVPR.
  • Официальная документация PyTorch и TensorFlow по предобученным моделям ResNet.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →