В Интернете есть множество статей, объясняющих разницу между операциями кросс-корреляции и свертки. Но есть ли разница между ними в контексте глубокого обучения, в частности сверточных нейронных сетей? Да, есть. Отсюда два разных термина ... или есть? 🤔🙄
Эта статья ограничивает использование математики, чтобы ее было легче понять.
В чем формальная разница между кросс-корреляцией и сверткой?
Напомним, что мы подразумеваем под кросс-корреляцией и сверткой в случае обработки сигналов.
Возьмем три функции: 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 не выполняет должным образом / фактическая свертка - потому что в этом нет необходимости.
Итак, для справки в будущем, есть ли разница между кросс-корреляцией и сверткой? Скажем просто: «Да, но нет».