В Интернете есть множество статей, объясняющих разницу между операциями кросс-корреляции и свертки. Но есть ли разница между ними в контексте глубокого обучения, в частности сверточных нейронных сетей? Да, есть. Отсюда два разных термина ... или есть? 🤔🙄

Эта статья ограничивает использование математики, чтобы ее было легче понять.

В чем формальная разница между кросс-корреляцией и сверткой?

Напомним, что мы подразумеваем под кросс-корреляцией и сверткой в ​​случае обработки сигналов.

Возьмем три функции: f (x), g (x) и h (x).

Для простоты возьмем f (x) и g (x) как ступенчатые функции, но они могут быть разными, а h (x) - время- перевернутая (перевернутая) версия g (x).

В настоящее время,

Взаимная корреляция f (x) и g (x) находится путем фиксации любой из двух функций, скажем, мы исправляем f (x) и сдвигаем другое, g (x) , больше f (x) при умножении функций и сложении при каждом сдвиге.

Взаимная корреляция двух функций дает меру сходства между функциями.

С другой стороны,

Свертка f (x) и g (x) находится путем исправления любой из двух функций, скажем, мы исправили f (x) , и переворачивание другой функции g (x) вокруг оси y , а затем перемещая его по f (x), умножая функции и складывая их при каждом сдвиге.

Свертка двух функций дает результат функции, когда одна функция преобразовывается другой.

В заключение мы видим, Свертка f (x) и g (x) = взаимная корреляция f (x) и g (- x ),

следовательно,

f (x) * g (x) = Взаимная корреляция f (x) и h (x),

где h (x) = g (- x)

ПРИМЕЧАНИЕ. - «*» - это символ свертки.

В - В чем разница между кросс-корреляцией и сверткой в ​​контексте глубокого обучения?

Ответ - Нет

Позвольте мне объяснить…

В случае глубокого обучения (точнее, сверточных нейронных сетей) веса ядра (небольшая матрица) изучаются во время обучения с использованием обратного распространения ошибки и не определяются / не устанавливаются явно.

Если мы ожидаем определенного результата после операции свертки с использованием определенного ядра, мы можем получить тот же результат, если мы сделаем взаимную корреляцию с одним и тем же ядром, перевернутым по горизонтали и вертикали (то есть в обоих направлениях X и Y).

Например, предположим, что модель должна изучить ядро ​​«A», выполняющее фактическую свертку с изображением и посредством обратного распространения ошибки.

Вместо ядра «A», если модель изучает перевернутую версию ядра «A», скажем, ядро ​​«B», мы можем напрямую выполнить взаимную корреляцию т.е., не тратя никаких вычислительных мощностей для переворота ядро!

Это означает, что кросс-корреляция эквивалентна свертке в случае CNN, при условии, что изученные ядра являются зеркальными отображениями каждого случая в обоих направлениях.

Это также проясняет причину, по которой одна из самых популярных платформ глубокого обучения, Tensorflow не выполняет должным образом / фактическая свертка - потому что в этом нет необходимости.

Итак, для справки в будущем, есть ли разница между кросс-корреляцией и сверткой? Скажем просто: «Да, но нет».