Свёрточный слой: фильтры обучаются сами
Свёрточный слой — это та же свёртка, что мы делали руками, но веса ядер сеть подбирает сама в ходе обучения.
Свёрточный слой (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.