alterna ai
ALTERNA AI / ГЛАВА 11 · 03

11.3 Что меняется без переворота окна

На предыдущей странице: окно перемещается по сигналу.

Сравним два похожих правила на одних числах. Если коэффициенты несимметричны, направление их применения меняет результат.

Маленькое окно проходит по сигналу или изображению. Каждый выход складывается из чисел окна и общих коэффициентов. Частотная запись описывает те же данные иначе.

Направление ядра имеет значение

В вещественном скользящем окне cross-correlation использует ядро без переворота:

r[i]=∑j=0K−1h[j]x[is−p+j].r[i]=\sum_{j=0}^{K-1}h[j]x[is-p+j].

При x=[1,2,3,4],h=[1,−1],p0,s1 результат[−1,−1,−1]. Та же valid-window convolution с перевёрнутым ядром даёт[1,1,1]. Отличие знака — следствие порядка весов, не названия функции. Для комплексных сигналов correlation обычно включает сопряжение; здесь используются только вещественные числа.

CNN-библиотеки традиционно называют «convolution» именно cross-correlation. Для обучаемого ядра это не ограничивает семейство функций: переворот можно включить в параметры. Но замена операции при тех же уже заданных числах обычно меняет ответ. H05 прямо разделяет эти случаи.

Исследовать. Выберите kernel[.25,.5,.25], затем[1,−1]. В первом случае обе операции совпадают из-за симметрии; во втором — нет. Объясните, почему проверка только симметричным blur не обнаружила бы ошибку реализации.

Cross-correlation как ненормированная сумма произведений зависит от масштаба сигнала и шаблона. Она не автоматически равна коэффициенту корреляции Пирсона или cosine similarity. Нормирование требует дополнительных определений.

x,h=[1,2,3,4],[1,-1]
corr=[sum(x[i+j]*h[j] for j in range(2)) for i in range(3)]
conv=[sum(x[i+j]*h[1-j] for j in range(2)) for i in range(3)]
assert corr==[-1,-1,-1] and conv==[1,1,1]

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Такова распространённая convention. Семейство learned kernels сохраняет выразительность, но фиксированные числа важны.

Те же данные через частоты. Как этот вопрос продолжает полученный результат?

Python-примеры главы 11 Академическая база →