Есть много тонкости между значениями свертки и корреляции. Оба относятся к более широкой идее о внутренних произведениях и проекциях в линейной алгебре, то есть проецируют один вектор на другой, чтобы определить, насколько он «силен» в направлении последнего.
Эта идея распространяется на область нейронных сетей, где мы проецируем выборку данных на каждую строку матрицы, чтобы определить, насколько хорошо она «вписывается» в эту строку. Каждая строка представляет определенный класс объектов. Например, каждая строка может классифицировать букву в алфавите для распознавания рукописного ввода. Обычно каждая строка называется нейроном, но ее также можно назвать согласованным фильтром.
По сути, мы измеряем, насколько похожи две вещи, или пытаемся найти какую-то особенность в чем-то, например, сигнал или изображение. Например, когда вы свертываете сигнал с помощью полосового фильтра, вы пытаетесь выяснить, какой контент у него в этой полосе. Когда вы коррелируете сигнал с синусоидой, например DFT, вы ищете силу частоты синусоиды в сигнале. Обратите внимание, что в последнем случае корреляция не уменьшается, но вы все еще «коррелируете» две вещи. Вы используете внутренний продукт для проецирования сигнала на синусоиду.
Так в чем же разница? Хорошо, учтите, что при свертке сигнал обратный по отношению к фильтру. С изменяющимся во времени сигналом это приводит к тому, что данные коррелируются в порядке их поступления в фильтр. На мгновение давайте определим корреляцию просто как точечный продукт, т.е. проецируем одно на другое. Итак, в начале мы коррелируем первую часть сигнала с первой частью фильтра. Когда сигнал продолжается через фильтр, корреляция становится более полной. Обратите внимание, что каждый элемент в сигнале умножается только на тот элемент фильтра, который он «касается» в данный момент времени.
Итак, с помощью свертки мы в некотором смысле коррелируем, но мы также пытаемся сохранить порядок во времени, когда происходят изменения, когда сигнал взаимодействует с системой. Однако, если фильтр симметричный, как это часто бывает, это не имеет значения. Свертка и корреляция дадут одинаковые результаты.
С помощью корреляции мы просто сравниваем два сигнала, а не пытаемся сохранить порядок событий. Чтобы сравнить их, мы хотим, чтобы они смотрели в одном направлении, то есть выстроились в линию. Мы накладываем один сигнал поверх другого, чтобы мы могли проверить их сходство в каждом временном окне, если они не совпадают по фазе или мы ищем меньший сигнал в большем.
В обработке изображений все немного по-другому. Нам нет дела до времени. Однако свертка все еще обладает некоторыми полезными математическими свойствами . Однако, если вы пытаетесь сопоставить части большего изображения с меньшим (то есть с согласованной фильтрацией), вам не захочется переворачивать их, потому что тогда функции не будут выстраиваться. Если, конечно, фильтр является симметричным. В обработке изображений корреляция и свертка иногда используются взаимозаменяемо, особенно с нейронными сетями . Очевидно, что время все еще актуально, если изображение является абстрактным представлением двумерных данных, где одним измерением является время - например, спектрограмма.
Итак, в итоге, и корреляция, и свертка - это скользящие внутренние продукты, используемые для проецирования одной вещи на другую, поскольку они изменяются в пространстве или времени. Свертка используется, когда важен порядок, и обычно используется для преобразования данных. Корреляция обычно используется, чтобы найти меньшую вещь внутри большей, то есть для соответствия. Если хотя бы одна из двух «вещей» симметрична, то не имеет значения, какую вы используете.