Свёртка: скользящее окно, из которого выросли CNN

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

Скользящее взвешенное окно

Свёртка сигнала x с ядром k — это новый сигнал, где значение в точке t есть взвешенная сумма окрестности x под перевёрнутым ядром: (x * k)[t] = \sum_{j} x[t-j]\, k[j]. Ядро задаёт «рецепт смешивания» соседних отсчётов. Ширина ядра — это размер окна (рецептивное поле): сколько соседей участвует в каждом выходном значении.

Одно ядро — один детектор

Сила свёртки в том, что смысл операции целиком сидит в нескольких числах ядра:

  • Сглаживание (равные положительные веса) усредняет соседей — сигнал теряет резкие детали, шум давится.
  • Гаусс — то же, но с мягким спадом к краям окна: усреднение без артефактов.
  • Разность [-1, 0, 1] вычитает соседей слева и справа — выход велик там, где сигнал быстро меняется. Это детектор краёв.
  • Резкость усиливает центр относительно окрестности — подчёркивает контраст.

Потрогайте свёртку

Сверху — сигнал и бегущее окно ядра (золотые веса); снизу — результат свёртки. Тяните окно вдоль сигнала (или красную линию) — и смотрите, как выход в этой точке собирается из значений под окном. Рисуйте сам сигнал, двигая его мышью в верхней панели. Переключайте ядро — и наблюдайте, как одна и та же операция то размывает, то выделяет края.

УведомлениеОт ручных ядер к обучаемым

Десятилетиями ядра для зрения подбирали вручную (Собель, Габор, Лаплас). Прорыв свёрточных сетей (CNN) в том, что веса ядер не задаются, а обучаются градиентным спуском: сеть сама находит, какие края, текстуры и формы выделять. Слой CNN — это десятки таких окон, бегущих по картинке параллельно.

СоветГлавный инсайт

Свёртка кодирует два мощных предположения о данных: локальность (важны соседи, а не весь сигнал сразу) и трансляционная эквивариантность (одно и то же ядро работает в любой точке — край есть край, где бы он ни был). Одно и то же ядро ищет один и тот же признак в любой точке; если вход сдвинуть, соответствующая карта признаков тоже сдвинется. Инвариантность к сдвигам обычно появляется позже — например, после pooling или агрегации. Именно поэтому свёрточные слои часто требуют намного меньше параметров, чем полносвязные слои на тех же входах, и лучше используют структуру изображений, звука и временных рядов. Это не универсальная гарантия, а сильное индуктивное предположение, которое хорошо работает на данных с локальной структурой.

Связи

  • БПФ (§ БПФ как умножение на матрицу): свёртка во времени = поэлементное умножение в частотной области — отсюда быстрые алгоритмы свёртки через FFT.
  • Классификация и нейросети (§ той же части): свёрточные слои как обучаемые банки фильтров.
  • Оптимизаторы (§ Как методы спускаются с горы): тем же спуском обучаются веса ядер в CNN.
Наверх