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-18 | 18 | 11.7 | Базовая, лёгкая, для небольших задач |
| ResNet-34 | 34 | 21.8 | Улучшенная версия, баланс точности и скорости |
| ResNet-50 | 50 | 25.6 | Использует BottleneckBlock, популярна на практике |
| ResNet-101 | 101 | 44.5 | Глубокая, для сложных задач |
| ResNet-152 | 152 | 60.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 →