Сверточная нейронная сеть: архитектура, слои и принцип работы

Сверточная нейронная сеть: архитектура, слои и принцип работы
0
21

Сверточная нейронная сеть (Convolutional Neural Network, CNN, произносится «си-эн-эн») — модель, которая обрабатывает изображения с учетом того, что соседние пиксели связаны между собой. По-английски ее также называют ConvNet. Если объяснять, что такое сверточная сеть простыми словами, это последовательность операций, которая вычисляет локальные признаки изображения, объединяет их и использует результат для классификации, детекции или другой задачи.

Сверточная нейронная сеть: архитектура, слои и принцип работы
Основные этапы обработки изображения в сверточной нейронной сети.

Зачем изображениям нужна особая архитектура

Полносвязная сеть (multilayer perceptron, MLP) получает плоский вектор, где каждый вход связан с каждым нейроном следующего слоя. У изображения такой способ представления быстро становится дорогим: цветная картинка размером 1000 × 1000 содержит 3 миллиона значений. Один полносвязный слой всего с 1000 выходами потребовал бы 3 миллиарда весов, не считая смещений.

Кроме затрат памяти и вычислений, MLP не учитывает близость пикселей. В сверточной сети небольшие фильтры применяются к множеству участков одним и тем же набором весов. Такая повторно используемая матрица параметров помогает находить локальную структуру в разных частях кадра и существенно сокращает число обучаемых весов.

Из каких слоев состоит архитектура CNN

Свертка и карта признаков

Сверточный слой (convolutional layer, в PyTorch Conv2d) применяет ядро (kernel, filter) ко входному тензору. Ядро перемещается по ширине и высоте, а в каждой позиции перемножает свои веса с соответствующим окном входа и суммирует результаты. Для цветного изображения окно охватывает все входные каналы. У каждого выходного фильтра есть свои веса и обычно смещение. На практике свертка в популярных библиотеках обычно вычисляется как корреляция, то есть веса ядра не переворачиваются.

Сверточная нейронная сеть: архитектура, слои и принцип работы

Каждый фильтр создает отдельный канал карты признаков (feature map). Число выходных каналов задается количеством фильтров. Веса ядра общие для всех пространственных позиций: фильтр, примененный к левому краю изображения, использует те же параметры, что и в центре.

Активация, пулинг и классификатор

После свертки часто применяется ReLU: ReLU(x) = max(0, x). Она обнуляет отрицательные значения и добавляет нелинейность, благодаря которой последовательность слоев может описывать более сложные функции. ReLU не меняет размерность тензора.

Слой подвыборки (pooling layer) уменьшает ширину и высоту карт признаков. MaxPooling берет максимум в каждом окне, AveragePooling — среднее. Снижение пространственного разрешения сокращает вычисления и делает отклик менее чувствительным к небольшому сдвигу признака. Однако пулинг сам по себе не обеспечивает полной трансляционной инвариантности, особенно при крупных сдвигах.

Сверточная нейронная сеть: архитектура, слои и принцип работы

Во многих современных моделях часть операций пулинга заменяют свертками с шагом больше единицы (strided convolutions), те одновременно уменьшают разрешение и обучают параметры преобразования. Для классификации в конце часто используют глобальное усреднение по пространственным координатам, затем полносвязный слой (fully connected, Linear), который выдает оценки классов.

СлойОсновные параметрыОбучаемые параметры
Conv2din_channels, out_channels, kernel_size, stride, paddingout_channels × (in_channels × kH × kW + 1), если включено смещение
MaxPool2dkernel_size, stride, paddingНет
Linearin_features, out_featuresin_features × out_features + out_features, если включено смещение

В первой строке таблицы kH и kW — высота и ширина ядра. Например, свертка из 3 входных каналов в 16 выходных с ядрами 3 × 3 и смещениями имеет 16 × (3 × 3 × 3 + 1) = 448 параметров. У пулинга параметры окна фиксированы, поэтому он не учится по данным.

★ Где этому научиться

Курс «Инженер генеративного ИИ» в Академии IT DMS

✓RAG-ассистенты по базе знаний и дообучение моделей (LoRA/QLoRA)
✓ИИ-агенты на OpenAI Agents SDK, CrewAI, LangGraph и MCP
✓Деплой в облако и no-code сценарии в n8n

Сертификат, диплом о переподготовке или удостоверение о повышении квалификации.

Перейти к курсу →ПромокодAFFTIMES

−5 % на первую покупку. Скидка суммируется с любыми акциями школы. Если оплачиваете через менеджера в чате, назовите ему промокод.

Как рассчитать размер карты признаков

Размерность тензора обычно записывают как N × C × H × W в PyTorch: размер пакета, каналы, высота и ширина. В TensorFlow распространен формат N × H × W × C. Для одного пространственного измерения формула выхода свертки или пулинга такова:

H_out = floor((H_in + 2P - D × (K - 1) - 1) / S + 1)

Здесь H_in — входной размер, K — размер ядра, S — шаг (stride), P — симметричный отступ (padding), D — дилатация (dilation). Для обычной свертки D = 1. Если параметры одинаковы по обеим осям, формула применяется и к ширине, и к высоте.

Практический пример: вход имеет размер 32 × 32, ядро — 5 × 5, шаг равен 1, отступ равен 0. Тогда H_out = floor((32 − 5) / 1 + 1) = 28, и ширина также будет 28. Если сверточный слой имеет 12 фильтров, выходной тензор одного изображения будет иметь размер 12 × 28 × 28. При padding=2 размер сохранился бы равным 32 × 32.

Сверточная нейронная сеть: архитектура, слои и принцип работы
Как padding влияет на размер выхода свертки: 12 × 28 × 28 без отступов и 12 × 32 × 32 при padding=2

Рецептивное поле (receptive field) — участок исходного изображения, который влияет на конкретную позицию карты признаков. По мере прохождения через слои оно растет: последующие признаки зависят от все более широких областей входа. Рост зависит от размера ядер, шагов и дилатации. Он не равен просто числу слоев.

Сверточная нейронная сеть: архитектура, слои и принцип работы
Рецептивное поле глубокой карты признаков охватывает область исходного изображения

Как менялись классические архитектуры

Эволюция CNN связана с изменением вычислительных возможностей и приемов построения глубоких моделей. В таблице ориентировочные числа параметров для распространенных вариантов.

АрхитектураПараметры, примерноОсновная идея
LeNet-560 тыс.Раннее сочетание сверток, подвыборки и классификатора для распознавания рукописных цифр
AlexNet61 млнГлубокая CNN для ImageNet; ReLU и обучение на GPU помогли масштабировать эксперимент
VGG-16138 млнПоследовательное применение небольших ядер 3 × 3
ResNet-5025,6 млнОстаточные связи облегчают обучение глубоких сетей
MobileNetV14,2 млнРазделение пространственной и канальной сверток для мобильного инференса

LeNet-5 показала базовую схему сверток и подвыборки для изображений. AlexNet в работе 2012 года использовала ReLU и GPU для обучения на крупном наборе ImageNet. В VGG-16 несколько слоев с ядрами 3 × 3 обеспечивают нелинейные преобразования между операциями и позволяют наращивать глубину с относительно небольшими ядрами. Цена такого решения — крупное число параметров, особенно в классификаторе.

В ResNet блоки передают вход дальше по skip connection, складывая его с результатом преобразований. Это дает градиенту более прямой путь через сеть и помогает обучать глубокие архитектуры. ResNet-50 содержит около 25,6 млн параметров в распространенной конфигурации для ImageNet.

В MobileNetV1 обычная свертка заменяется depthwise separable convolution: depthwise-свертка отдельно обрабатывает пространственную структуру каждого канала, а pointwise-свертка 1 × 1 смешивает каналы. Это снижает число операций и параметров. На практике свертки 1 × 1 также используют в bottleneck-блоках, чтобы временно уменьшить число каналов перед дорогой пространственной операцией.

Сверточная нейронная сеть: архитектура, слои и принцип работы
Остаточная связь в ResNet и разделение depthwise- и pointwise-сверток в MobileNetV1

Как обучают CNN и готовят к запуску

При обучении ИИ-инженером модель получает изображения и целевые метки. Прямой проход рассчитывает предсказание, функция потерь сравнивает его с меткой, а обратное распространение ошибки вычисляет градиенты по весам. Оптимизатор обновляет параметры в направлении, которое уменьшает потери. Цикл повторяется по пакетам данных и эпохам. Качество проверяют на отложенной выборке.

Для борьбы с переобучением применяют несколько приемов:

  • Аугментация данных (data augmentation): случайные отражения, обрезки, изменения яркости и масштаба расширяют разнообразие обучающих примеров.
  • Dropout во время обучения случайно отключает часть активаций, снижая зависимость от отдельных путей в сети.
  • Batch Normalization нормализует промежуточные активации по мини-пакету и имеет обучаемые масштаб и сдвиг. На практике она часто делает обучение стабильнее, но ускорение сходимости зависит от модели, размера пакета и режима обучения.

С нуля CNN обучают, когда доступны большие размеченные данные или задача заметно отличается от исходной. В остальных случаях часто применяют transfer learning (перенос обучения): берут веса модели, предварительно обученной на ImageNet, заменяют классификационную голову и дообучают. На первом этапе можно заморозить сверточные слои, чтобы обновлялись только новые параметры, затем разморозить часть слоев и выполнить тонкую настройку на меньшем шаге обучения. Если новый домен сильно отличается от ImageNet, полная заморозка может ограничить качество.

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

Ограничения сверточных сетей и новые направления

Локальность свертки задает полезный априорный принцип, но глобальные отношения между удаленными частями изображения требуют глубокой обработки или дополнительных механизмов. CNN чувствительны к изменениям масштаба, ракурса и распределения данных, если обучение не охватило такие случаи. Capsule Networks предлагали явно представлять тип признака и его позу, однако не стали стандартной заменой сверточным архитектурам.

Vision Transformers (ViT) применяют механизм внимания к последовательности фрагментов изображения. Они стали важной альтернативой CNN в задачах компьютерного зрения, особенно при наличии достаточных данных и вычислений. На практике сравнивают конкретные модели и условия: задержку, память, точность и целевое устройство.

FAQ

CNN работает только с изображениями?

Нет. Одномерные свертки используют для аудио, временных рядов и последовательностей, а трехмерные — например, для видео. Выбор зависит от локальной структуры данных и нужного рецептивного поля.

Почему часто выбирают ядро 3 × 3?

Такое ядро позволяет обрабатывать локальные области с умеренным числом весов. Несколько слоев 3 × 3 добавляют нелинейные преобразования между операциями и увеличивают рецептивное поле. Ядра 5 × 5 и 7 × 7 тоже применяют, когда это оправдано архитектурой или разрешением входа.

Чем same padding отличается от valid?

valid означает отсутствие дополнения нулями, поэтому пространственный размер обычно уменьшается. same добавляет padding так, чтобы при шаге 1 выход сохранял размер входа; при больших шагах размер может уменьшиться. В конкретном API следует проверять правила округления и раскладки.

Что будет, если убрать pooling?

Сеть может сохранять больше пространственной информации, но промежуточные карты останутся крупнее, а вычислительная стоимость вырастет. Уменьшение разрешения можно выполнять свертками со stride, а классификационные архитектуры часто заканчиваются глобальным усреднением.

Можно ли применить CNN к изображению другого размера?

Часто да, если архитектура содержит только свертки и операции с допустимыми размерами. Полносвязный слой с фиксированным числом входов может потребовать конкретного разрешения или адаптивного пулинга перед ним.

Как выбрать число выходных каналов?

Это гиперпараметр: его выбирают по валидационному качеству, задержке и памяти. Увеличение каналов дает слою больше обучаемых фильтров, но увеличивает вычислительную стоимость и риск переобучения при ограниченном наборе данных.

Лиля Райн
Лиля Райн
Автор
(Проголосовать за статью)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

X