Свёрточный слой — слой нейросети, который применяет фильтры к входным данным для извлечения признаков — границ, текстур, форм — с сохранением пространственной структуры.
Что такое свёрточный слой
Свёрточный слой — это тип слоя в нейронной сети, который выполняет операцию свёртки: применяет небольшой фильтр (ядро) к входным данным, вычисляя взвешенную сумму значений под фильтром. В отличие от полносвязного слоя, где каждый нейрон соединён со всеми элементами предыдущего слоя, свёрточный слой использует разделяемые веса и локальные связи.
Как это работает
Фильтр — это матрица весов, например 3×3 или 5×5. Он «скользит» по входным данным с определённым шагом (stride), и в каждой позиции вычисляется скалярное произведение значений фильтра и соответствующих входных значений. Результат записывается в новую матрицу — карту признаков.
Ключевая идея: один и тот же фильтр применяется ко всем участкам входа. Это даёт два преимущества. Во-первых, резко сокращается число параметров по сравнению с полносвязным слоем. Во-вторых, сеть учится распознавать признак независимо от его положения на изображении — фильтр, обучившийся находить вертикальные границы, найдёт их и в левом верхнем углу, и в правом нижнем.
Обычно свёрточный слой содержит несколько фильтров (например, 32, 64 или 128). Каждый фильтр создаёт свою карту признаков, и все они передаются на следующий слой. После свёртки часто применяется нелинейная функция активации, чаще всего ReLU, которая обнуляет отрицательные значения.
Зачем это нужно
Свёрточные слои — основа компьютерного зрения. Они позволяют нейросети автоматически извлекать иерархию признаков: первые слои находят простые элементы (грани, углы, цветовые переходы), более глубокие — сложные структуры (текстуры, части объектов, целые объекты). Это устраняет необходимость в ручном проектировании признаков, которое было стандартом до эпохи глубокого обучения.
Помимо изображений, свёрточные слои применяются для обработки звука, текста и временных рядов, где важна локальная структура данных.
Примеры
- Распознавание рукописных цифр (MNIST). Первый свёрточный слой с 6 фильтрами 5×5 выделяет базовые элементы цифр. Второй свёрточный слой с 16 фильтрами комбинирует их в более сложные паттерны. После нескольких слоёв сеть отличает «3» от «8».
- Классификация изображений (ImageNet). В сети VGG16 первый свёрточный слой содержит 64 фильтра 3×3. Каждый фильтр учится реагировать на свой тип градиента — горизонтальный, вертикальный, диагональный.
- Медицинская визуализация. Свёрточные слои помогают выделять патологические изменения на рентгеновских снимках: фильтры обучаются находить затемнения и аномальные контуры, характерные для пневмонии или опухолей.
- Детекция объектов. В архитектурах типа YOLO свёрточные слои последовательно уменьшают пространственную размерность и увеличивают число каналов, формируя признаки для предсказания координат и классов объектов.
Формула или метрика
Размер выходной карты признаков для одного измерения:
W₂ = (W₁ − F + 2P) / S + 1
Где:
- W₁ — размер входа по данной оси
- F — размер ядра (фильтра)
- P — размер padding (заполнения нулями по краям)
- S — stride (шаг)
Число обучаемых параметров в свёрточном слое: F² × C × K + K, где C — число входных каналов, K — число фильтров.
Типичные ошибки
- Слишком большое ядро без необходимости. Ядро 7×7 или 11×11 увеличивает число параметров квадратично и замедляет обучение. В большинстве случаев стек из двух слоёв 3×3 даёт то же рецептивное поле с меньшим числом параметров.
- Игнорирование padding. Без padding каждый слой «съедает» края изображения. После нескольких слоёв от исходного разрешения остаётся небольшая центральная область. Padding=same сохраняет размер.
- Слишком много фильтров на ранних слоях. Первые слои извлекают простые признаки, для которых достаточно 32–64 фильтров. Увеличение до 512 на входе ведёт к переобучению и росту вычислений без выигрыша в качестве.
- Отсутствие нормализации. Без batch normalization или адекватной инициализации весов глубокие свёрточные сети плохо обучаются из-за затухания или взрыва градиентов.
Как улучшить
- Используйте ядра 3×3. Это стандарт де-факто: два слоя 3×3 имеют рецептивное поле 5×5, но меньше параметров и больше нелинейности, чем один слой 5×5.
- Добавляйте padding.
padding='same'сохраняет пространственные размеры, что упрощает проектирование архитектуры и предотвращает потерю информации на краях. - Увеличивайте число фильтров по мере углубления. Типичная схема: 32 → 64 → 128 → 256. Ранние слои извлекают простые признаки, поздние комбинируют их в сложные концепции.
- Применяйте batch normalization после свёртки. Это стабилизирует распределение активаций и позволяет использовать более высокий learning rate.
- Экспериментируйте с 1×1 свёртками. Они не увеличивают рецептивное поле, но меняют число каналов и добавляют нелинейность между слоями. Используются в архитектурах Inception и ResNet для снижения вычислительной сложности.