Свёрточный слой: фильтры обучаются сами

Свёрточный слой — это та же свёртка, что мы делали руками, но веса ядер сеть подбирает сама в ходе обучения.

Свёрточный слой (convolutional layer) — слой нейросети, который применяет к входу набор обучаемых ядер (фильтров) и выдаёт карты признаков.

Фильтр = обучаемое ядро

Вспомните свёртку из раздела 2: ядро 3×3 скользило по картинке. Там веса ядра задавали мы (для размытия — единицы, для границ — Собель). В CNN веса ядра — это обучаемые параметры. Сеть начинает со случайных весов, а в процессе обучения подбирает их так, чтобы выделять признаки, полезные для задачи. Никто не говорит сети «ищи границы» — она сама может «решить», что границы полезны, и настроить ядро под них.

Карта признаков

Применив один фильтр ко всей картинке, получаем карту признаков (feature map) — новую «картинку», где яркость показывает, насколько сильно этот фильтр откликнулся в каждой точке. Фильтр, выучивший вертикальные границы, даст карту, которая «горит» там, где на исходнике вертикальные грани.

Много фильтров — много карт

Один фильтр ловит один тип признака. Поэтому в свёрточном слое их много — например, 32 или 64. Каждый даёт свою карту признаков. Так слой превращает картинку (H, W, 3) в стопку карт (H, W, 64): 64 разных «взгляда» на изображение.

# Сколько параметров у свёрточного слоя — и насколько он легче полносвязного
kernel = 3 * 3        # размер ядра
in_channels = 3       # вход RGB
filters = 64          # сколько фильтров в слое

params = kernel * in_channels * filters + filters   # +смещения (bias)
print("Параметров в свёрточном слое:", params)
print("Сравните: у полносвязного было 150 миллионов")

Вывод:

Параметров в свёрточном слое: 1792
Сравните: у полносвязного было 150 миллионов

1792 параметра против 150 миллионов! Вот цена переиспользования весов: один фильтр (всего 9×3 весов) работает по всей картинке, поэтому свёрточный слой невероятно компактен.

Stride и padding

Два важных параметра управляют тем, как фильтр скользит:

ПараметрЧто задаётЭффект
stride (шаг)на сколько пикселей сдвигать ядрошаг 2 → карта вдвое меньше (downsampling)
padding (дополнение)добавлять ли рамку нулей по краямpadding сохраняет размер выхода

После свёртки обычно идёт функция активации (чаще всего ReLU): она обнуляет отрицательные отклики, оставляя только «сработавшие». Это добавляет нелинейность — без неё стопка свёрток схлопнулась бы в одно линейное преобразование.

Итог

  • Свёрточный слой — это свёртка с обучаемыми ядрами (фильтрами).
  • Каждый фильтр даёт карту признаков — где он откликнулся.
  • В слое много фильтров: картинка превращается в стопку карт.
  • Параметров мало (переиспользование весов); stride уменьшает размер, padding сохраняет; после — ReLU.
Проверьте себя
1. Чем фильтр свёрточного слоя отличается от ядра Собеля, которое мы задавали руками?
AНичем
BВеса фильтра не задаются вручную, а обучаются — сеть сама подбирает их под задачу
CФильтр не скользит по картинке
DФильтр работает только с серым
2. Что такое карта признаков (feature map)?
AСписок координат объектов
BРезультат применения одного фильтра ко всей картинке: где и насколько сильно фильтр откликнулся
CГистограмма яркости
DТаблица цветов
3. Почему свёрточный слой имеет несоизмеримо меньше параметров, чем полносвязный?
AОн работает с меньшими картинками
BОдно маленькое ядро с общими весами применяется по всей картинке, а не связывает каждый вход с каждым нейроном
CОн не обучается
DОн использует только один цвет
Поддержать проект