Свёртка: скользящее окно, из которого выросли CNN
Размыть фото, найти края, услышать эхо, обучить нейросеть видеть — за всем этим одна операция. Свёртка берёт маленькое окно весов (ядро) и проводит им вдоль сигнала, в каждой точке считая взвешенную сумму соседей. Меняешь веса — меняешь, что именно «видит» окно.
Скользящее взвешенное окно
Свёртка сигнала x с ядром k — это новый сигнал, где значение в точке t есть взвешенная сумма окрестности x под перевёрнутым ядром: (x * k)[t] = \sum_{j} x[t-j]\, k[j]. Минус в индексе как раз и переворачивает ядро. Само ядро задаёт «рецепт смешивания» соседних отсчётов, а его ширина — размер окна (рецептивное поле): сколько соседей участвует в каждом выходном значении.
Одно ядро — один детектор
Сила свёртки в том, что смысл операции целиком сидит в нескольких числах ядра:
- Сглаживание (равные положительные веса) усредняет соседей — сигнал теряет резкие детали, шум подавляется.
- Гаусс — то же, но с мягким спадом к краям окна: усреднение выходит мягче.
- Разность [-1, 0, 1] берёт разность соседей слева и справа — выход велик там, где сигнал быстро меняется. Это детектор краёв.
- Резкость усиливает центр относительно окрестности — подчёркивает контраст.
Потрогайте свёртку
Сверху — сигнал и бегущее окно ядра (золотые веса); снизу — результат свёртки. Тяните окно вдоль сигнала — за красную пунктирную вертикаль, которая отмечает текущую позицию t, или мышью по нижней панели; есть и ползунок «Позиция окна t». Смотрите, как выход в текущей точке собирается из значений под окном. Рисуйте сам сигнал, двигая его мышью в верхней панели. Переключайте ядро — и наблюдайте, как одна и та же операция то размывает, то выделяет края.
Десятилетиями ядра для зрения подбирали вручную (Собель, Габор, Лаплас). Прорыв свёрточных сетей (CNN) в том, что веса ядер не задаются, а обучаются градиентным спуском: сеть сама находит, какие края, текстуры и формы выделять. Слой CNN — это десятки таких окон, бегущих по картинке параллельно.
Свёртка кодирует два предположения о данных: локальность (важны соседи, а не весь сигнал сразу) и трансляционная инвариантность (одно и то же ядро работает в любой точке — край есть край, где бы он ни был). Именно поэтому одно маленькое ядро с горсткой весов заменяет полносвязный слой с миллионами параметров и при этом лучше обобщается на изображениях, звуке и временных рядах.
Связи
- БПФ и спектр звука — свёртка во времени равна поэлементному умножению в частотной области, отсюда и быстрые алгоритмы
- Классификация и нейронные сети — свёрточные слои как обучаемые банки фильтров
- GD, momentum, Adam — тем же спуском обучаются веса ядер в CNN