Свёрточный слой
Коротко
Definition
Свёрточный слой — это слой нейронной сети, который применяет обучаемые фильтры к локальным участкам входного тензора, чтобы находить паттерны вроде границ, текстур, форм или локальных зависимостей.
Свёрточный слой особенно полезен для данных, где важна локальная структура:
- изображения;
- сигналы;
- временные ряды;
- текстовые последовательности;
- объёмные данные;
- некоторые научные и инженерные данные.
В отличие от полносвязного слоя, свёрточный слой не соединяет каждый входной элемент с каждым выходным. Он использует локальные фильтры и применяет одни и те же веса в разных местах входа.
Зачем нужен
Свёрточный слой нужен, чтобы эффективно находить локальные паттерны.
Например, в изображениях ранние свёрточные слои могут реагировать на:
- границы;
- углы;
- простые текстуры;
- цветовые переходы.
Более глубокие слои могут собирать эти простые признаки в более сложные:
- части объектов;
- формы;
- повторяющиеся структуры;
- целые объекты.
Главное преимущество свёртки — она использует два предположения:
- Локальность: близкие элементы часто связаны сильнее, чем далёкие.
- Разделение весов: один и тот же паттерн может встретиться в разных местах.
Поэтому свёрточные сети обычно требуют меньше параметров, чем полносвязные сети на изображениях.
Как работает

Свёртка — это преобразование тензора с помощью ядра, или фильтра.
Ядро — это небольшой тензор обучаемых весов. Его можно понимать как поисковый шаблон. Если паттерн, заложенный в ядре, присутствует во входном тензоре, соответствующая карта активации будет содержать большие по модулю значения.
Механизм свёртки:
- Ядро скользит по входному тензору.
- На каждом положении берётся локальный участок входа.
- Значения участка поэлементно умножаются на значения ядра.
- Произведения складываются в одно число.
- Полученное число записывается в карту активации.
Выход свёртки — карта активации, показывающая, где фильтр нашёл нужный паттерн.
Пример вычисления одного элемента карты активации:
К линейной комбинации также может добавляться смещение:
Размерности свёртки
В зависимости от входного тензора и направления скольжения ядра свёртка может иметь разную размерность.
Conv1D
Одномерная свёртка скользит вдоль одной оси.
Она часто используется для:
- временных рядов;
- аудио;
- сигналов;
- текстов;
- последовательностей признаков.
Conv2D
Двумерная свёртка скользит вдоль двух пространственных осей.
Она часто используется для:
- изображений;
- карт признаков;
- микроскопии;
- медицинских снимков;
- спутниковых изображений.
Для RGB-изображений фильтр обычно имеет глубину, соответствующую числу входных каналов.
Conv3D
Трёхмерная свёртка скользит вдоль трёх пространственных осей.
Она может использоваться для:
- видео;
- 3D-медицинских снимков;
- объёмных данных;
- физических полей;
- научных симуляций.
Depthwise convolution

В обычной свёртке фильтр смешивает информацию по пространственным осям и по каналам.
В depthwise convolution каждый канал обрабатывается отдельно своим двумерным фильтром. После этого карты активации собираются обратно в выходной тензор.
Идея:
- обычная Conv2D смешивает каналы сразу;
- depthwise convolution сначала обрабатывает каждый канал отдельно;
- затем часто используется pointwise convolution
1×1, чтобы смешать каналы.
Такой подход уменьшает число параметров и вычислений. Он используется в лёгких архитектурах для компьютерного зрения.
Размер выхода
Ширина или высота выходной карты активации вычисляется по формуле:
где:
- — ширина или высота входного тензора;
- — размер ядра;
- — padding;
- — stride;
- — размер выходной карты активации.
Эта же логика применяется отдельно к высоте и ширине.
Например, если:
- ;
- ;
- ;
- ;
то:
То есть при kernel_size = 3, padding = 1, stride = 1 размер изображения сохраняется.
Обучаемые параметры
У свёрточного слоя обучаются:
- веса фильтров;
- смещения, если
bias=True.
Для двумерной свёртки число параметров можно записать так:
где:
- — ширина ядра;
- — высота ядра;
- — число входных каналов;
- — число выходных каналов, то есть число фильтров;
+1соответствует bias для каждого фильтра.
Если bias=False, формула становится:
Например, для Conv2D с ядром 3×3, C_in = 3, C_out = 16 и bias:
Гиперпараметры
Основные гиперпараметры свёрточного слоя:
- размер ядра;
- число фильтров;
- stride;
- padding;
- dilation;
- groups;
- использовать ли bias;
- функция активации после свёртки.
Kernel size
Размер ядра определяет, какой локальный участок входа видит фильтр.
Например:
3×3— маленькое локальное окно;5×5— большее окно;1×1— смешивание каналов без пространственного окна.
Stride
Stride — шаг, с которым фильтр перемещается по входу.
Чем больше stride, тем меньше размер выходной карты активации.
Padding
Padding — добавление рамки вокруг входного тензора.
Padding позволяет:
- сохранить размер выхода;
- контролировать влияние краёв;
- избежать слишком быстрого уменьшения пространственного размера.

Dilation
Dilation увеличивает расстояние между элементами ядра.
Это позволяет фильтру видеть более широкий контекст без увеличения числа параметров.
Пулинг
Pooling — это операция уменьшения размера карты активации.
Пулинг не является свёрткой в строгом смысле, но часто используется рядом со свёрточными слоями в CNN.
Зачем нужен pooling:
- уменьшить пространственный размер;
- снизить вычислительную стоимость;
- сделать признаки менее чувствительными к небольшим сдвигам;
- агрегировать локальную информацию.
Основные виды pooling:
- max pooling;
- average pooling;
- sum pooling;
- global average pooling.

Max pooling берёт максимальное значение в локальном окне. Average pooling берёт среднее значение.
Как обучается
Свёрточный слой обучается через обратное распространение ошибки.
Во время прямого прохода фильтр скользит по входу и создаёт выходную карту активации. Во время обратного прохода вычисляются градиенты по весам фильтра и по входу.
Рассмотрим простой пример.
Пусть есть вход размером 3×3:
И фильтр размером 2×2:
Если stride равен 1 и padding не используется, выход будет размером 2×2.
Элементы выхода:
Вес участвует в вычислении всех четырёх выходов. Поэтому по цепному правилу градиент loss по получает вклад от всех четырёх позиций:
Так как:
получаем:
Главный смысл: при обратном проходе градиент по весам фильтра тоже вычисляется через операцию, похожую на свёртку. Вход сопоставляется с пришедшими градиентами .
Упрощённо:
- forward: вход сворачивается с весами , получается выход ;
- backward для весов: вход сопоставляется с градиентом ошибки , получается градиент весов ;
- backward для входа: градиент ошибки сопоставляется с фильтром , получается градиент по входу .
Технически во многих библиотеках используется кросс-корреляция, а не математическая свёртка с переворотом ядра. Но в deep learning это обычно всё равно называют convolution.
Где используется
Свёрточные слои используются:
- в CNN;
- в классификации изображений;
- в object detection;
- в segmentation;
- в обработке медицинских снимков;
- в анализе микроскопии;
- в обработке сигналов;
- в некоторых моделях для последовательностей;
- в генеративных моделях изображений.
Свёртки особенно полезны, когда важны локальные паттерны и их положение может немного меняться.
Связанные архитектуры
Свёрточный слой — базовый блок CNN.
В типичной CNN рядом со свёртками могут использоваться:
- функции активации;
- Батч-нормализация;
- pooling;
- Skip connection;
- dropout;
- полносвязные слои в классификационной голове.
Свёрточные идеи также используются в:
- автоэнкодерах для изображений;
- GAN;
- диффузионных моделях;
- segmentation-моделях;
- lightweight vision architectures.
Типичные ошибки понимания
Путать свёртку и полносвязный слой
Полносвязный слой соединяет каждый входной признак с каждым выходным. Свёрточный слой смотрит на локальные участки и переиспользует один и тот же фильтр в разных местах.
Думать, что фильтр задаётся вручную
В классической обработке изображений фильтры могли задаваться вручную. В нейросетях фильтры обычно обучаются из данных.
Забывать про каналы
Для RGB-изображения вход имеет несколько каналов. Фильтр учитывает не только высоту и ширину, но и глубину входа.
Путать число фильтров и размер фильтра
Размер фильтра определяет локальное окно, например 3×3.
Число фильтров определяет количество выходных каналов.
Считать pooling частью свёртки
Pooling часто используется рядом со свёрткой, но это отдельная операция. У max pooling обычно нет обучаемых параметров.
Игнорировать padding и stride
Padding и stride сильно влияют на размер выхода. Ошибка в этих параметрах может привести к несовместимым формам тензоров.
Минимальный пример
Пусть есть grayscale-изображение 3×3 и фильтр 2×2.
Вход:
Фильтр:
Первый элемент выхода:
Следующие элементы получаются тем же фильтром, сдвинутым вправо и вниз.
Именно поэтому свёртка может найти один и тот же паттерн в разных частях изображения.