1. Архитектуры сверточных нейросетей: от базовых блоков к современным эволюционным решениям
Архитектуры сверточных нейросетей: от базовых блоков к современным эволюционным решениям
В 2012 году архитектура AlexNet выиграла соревнование ImageNet с отрывом в 10,8%, что стало моментом «большого взрыва» для глубокого обучения. Однако сегодня AlexNet кажется архаичной конструкцией, избыточной по количеству параметров и при этом недостаточно глубокой для извлечения сложных семантических признаков. Современная эволюция сверточных нейросетей (CNN) — это не просто наращивание количества слоев, а борьба за эффективность градиентного потока, минимизацию вычислительной сложности и адаптивность рецептивного поля. Понимание того, почему ResNet вытеснил VGG, а EfficientNet пересмотрел подход к масштабированию, критически важно для проектирования систем, способных работать не только в облачных кластерах, но и на пограничных устройствах (edge devices).
Фундамент свертки: за пределами базового фильтра
Прежде чем переходить к сложным архитектурам, необходимо деконструировать саму операцию свертки. В классическом понимании свертка — это локальный оператор, который обеспечивает инвариантность к сдвигу. Но в глубоких сетях мы сталкиваемся с проблемой «проклятия размерности» и вычислительной стоимости.
Математически операция свертки для одного выходного канала в точке выражается как:
Здесь — индекс входного канала, а — пространственные координаты ядра. Если у нас входных каналов и выходных, а размер ядра , то количество параметров составляет . При переходе к глубоким сетям (например, VGG-16), где количество каналов достигает 512, этот показатель растет квадратично, что создает бутылочное горлышко для памяти.
Эволюция рецептивного поля и факторизация
Одной из первых важных находок (популяризированной в VGG) стала идея замены больших ядер (например, или ) стеком из нескольких ядер .Дальнейшее развитие этой идеи привело к Inception-модулям (GoogleNet). Вместо выбора одного размера ядра, авторы предложили использовать параллельные свертки разных размеров () и конкатенировать их результаты. Это позволило сети самой выбирать, на каком масштабе извлекать признаки. Однако «наивный» Inception был слишком тяжелым, что привело к внедрению сверток для снижения размерности (bottleneck layers) перед дорогостоящими операциями и .
Проблема исчезающего градиента и революция ResNet
До 2015 года считалось, что простое добавление слоев ведет к деградации точности. Это не было связано с переобучением (ошибка росла и на обучающей выборке), а скорее с тем, что глубокие стеки нелинейных преобразований сложно оптимизировать. Градиент, проходя через десятки слоев, либо затухал, либо становился хаотичным.
Решение, предложенное Каймином Хэ в архитектуре ResNet, фундаментально изменило подход к проектированию сетей. Вместо того чтобы заставлять слой выучивать прямое отображение , мы заставляем его выучивать остаточную функцию (residual):
Тогда итоговый выход слоя превращается в .
Это реализуется через skip-connections (пропускающие связи). Если веса слоя обнуляются, слой просто передает входной сигнал дальше (identity mapping). Это гарантирует, что глубокая сеть будет работать как минимум не хуже, чем ее более мелкая версия.
С точки зрения оптимизации, ResNet можно рассматривать как ансамбль из множества путей разной длины. Градиент может «течь» по кратчайшим путям прямо к ранним слоям, минуя сложные нелинейности, что радикально ускоряет сходимость и позволяет обучать сети глубиной 100, 1000 и более слоев.
Плотные связи и DenseNet: переиспользование признаков
Развивая идею skip-connections, появилась архитектура DenseNet. Если ResNet суммирует признаки, то DenseNet их конкатенирует. Внутри «плотного блока» (Dense Block) каждый слой получает на вход карты признаков всех предыдущих слоев:
Почему это эффективно?
Однако у DenseNet есть существенный минус — потребление памяти GPU. Конкатенация создает огромные тензоры, которые требуют эффективного управления буферами памяти, что делает DenseNet менее популярным в продакшене, чем ResNet.
Эффективность и мобильные архитектуры: Depthwise Separable Convolutions
Когда мы переходим от серверных решений к мобильным устройствам, стандартная свертка становится непозволительной роскошью. Архитектура MobileNet ввела в широкий обиход Depthwise Separable Convolutions (глубинно-разделяемые свертки).
Процесс разбивается на два этапа:
Сравним вычислительную сложность. Для стандартной свертки это . Для разделяемой:
Отношение сложности разделяемой свертки к обычной примерно равно:
Для ядра это дает экономию в 8–9 раз при незначительной потере точности.
В MobileNetV2 эта идея была дополнена Inverted Residuals. В отличие от ResNet, где bottleneck сужает количество каналов, здесь блок сначала расширяет их (expansion layer), применяет depthwise-свертку в пространстве высокой размерности, а затем сжимает обратно. Это позволяет сохранить больше информации при прохождении через нелинейности (ReLU6).
Групповые свертки и ResNeXt: расширение в ширину
Вместо того чтобы делать сеть глубже, авторы ResNeXt предложили увеличить «ширину» через понятие Cardinality (мощность). Это развитие идеи групповых сверток, которые использовались еще в AlexNet для распределения вычислений между двумя GPU.
В ResNeXt один блок разделяется на несколько параллельных путей (групп), которые выполняют одинаковые операции над подмножествами каналов, а затем результаты суммируются. Это позволяет эффективно увеличивать репрезентативную мощность сети, не так сильно раздувая количество параметров, как при простом увеличении числа каналов. Эксперименты показали, что увеличение Cardinality дает больший прирост точности, чем увеличение глубины или ширины при том же вычислительном бюджете.
Автоматический поиск архитектур (NAS) и EfficientNet
Долгое время архитектуры создавались вручную на основе интуиции исследователей. Однако с появлением Neural Architecture Search (NAS) процесс проектирования стал автоматизированным. Алгоритмы ищут оптимальные комбинации блоков, минимизируя задержку (latency) и максимизируя точность.
Вершиной этого подхода (до эпохи трансформеров) стал EfficientNet. Исследователи из Google задались вопросом: как правильно масштабировать сеть? Обычно мы либо увеличиваем глубину (), либо ширину (количество каналов ), либо разрешение входного изображения (). EfficientNet использует метод Compound Scaling (составное масштабирование), где все три параметра изменяются одновременно с фиксированным соотношением:
Где — константы, найденные через малый сеточный поиск, а — коэффициент, определяющий доступные вычислительные ресурсы. Этот системный подход позволил EfficientNet-B7 достичь SOTA-результатов, будучи в 8.4 раза меньше и в 6.1 раза быстрее, чем сопоставимые по точности «ручные» модели.
Механизмы внимания в CNN: Squeeze-and-Excitation
Современные эволюционные решения часто включают в себя блоки «внимания», которые позволяют сети динамически перевзвешивать важность каналов. Самый известный пример — SENet (Squeeze-and-Excitation Network).
Блок SE выполняет две операции:
Это позволяет сети подавлять шумные или неинформативные каналы и усиливать те, что важны для конкретного изображения. Блоки SE легко встраиваются в ResNet или MobileNet, добавляя менее 1% параметров, но ощутимо повышая качество классификации и детекции.
Проблема рецептивного поля: Atrous Convolutions и Deformable Convolutions
В задачах сегментации и детекции объектов стандартной свертки часто не хватает, так как она имеет фиксированное и ограниченное рецептивное поле.
Atrous (Dilated) Convolutions (разреженные свертки) вводят параметр dilation rate (). Между элементами ядра вставляются «дырки». Размер ядра остается , но оно охватывает область, эквивалентную большему ядру, не увеличивая количество параметров. Это критично для сохранения пространственного разрешения без агрессивного пулинга.
Deformable Convolutions идут еще дальше. Вместо фиксированной сетки весов, сеть обучается предсказывать смещения (offsets) для каждой точки ядра. Это позволяет свертке «подстраиваться» под форму объекта — например, вытягиваться вдоль длинного предмета или сжиматься на мелком. Это радикально улучшает работу с объектами сложной формы и разного масштаба.
Сравнение архитектурных подходов
| Архитектура | Ключевая инновация | Основное преимущество | Основной недостаток | | :--- | :--- | :--- | :--- | | VGG | Стек малых ядер | Простота и однородность | Огромное количество параметров | | ResNet | Skip-connections | Возможность обучения сверхглубоких сетей | Ограниченное переиспользование признаков | | DenseNet | Плотные связи (конкатенация) | Максимальное переиспользование признаков | Высокое потребление памяти GPU | | MobileNet | Depthwise Separable Conv | Экстремальная скорость на CPU/Mobile | Ниже точность на сложных данных | | EfficientNet | Compound Scaling | Оптимальный баланс точности и скорости | Сложность реализации NAS-блоков |
Современный взгляд: ConvNeXt и «ренессанс» сверток
С появлением Vision Transformers (ViT) многие предрекали конец эпохи CNN. Однако в 2022 году вышла работа ConvNeXt, авторы которой решили «модернизировать» стандартную сверточную сеть, используя уроки, извлеченные из трансформеров.
Они внедрили:
Результат показал, что чистые сверточные сети при правильной настройке макро- и микроархитектуры могут конкурировать с трансформерами и даже превосходить их по эффективности и простоте обучения. Это доказывает, что потенциал сверточных блоков еще не исчерпан, и они остаются фундаментом для большинства продакшн-систем благодаря своей аппаратной оптимизации в библиотеках вроде cuDNN.
Проектирование современной CV-системы требует осознанного выбора между этими блоками. Если ваша задача — работа в реальном времени на камере наблюдения, ваш выбор — MobileNetV3 или малые версии EfficientNet с SE-блоками. Если же вы строите систему медицинского анализа, где важна каждая деталь, стоит смотреть в сторону ResNeXt или ConvNeXt с Deformable-свертками. Эволюция архитектур — это путь от «грубой силы» слоев к тонкой настройке информационных потоков.