卷积与互相关运算

理清卷积和互相关运算在深度学习中的区别

背景

信号与系统这门课我忘得快差不多了,现在只记住了一个概念:时域卷积等于频域乘积
现在用深度学习,总感觉里面的卷积怪怪的,如下是深度学习所谓的“卷积”(其实是互相关运算):
卷积与互相关运算
输入对应位置和卷积核对应位置相乘再求和,得到输出。
0×0+1×1+3×2+4×3=19,
1×0+2×1+4×2+5×3=25,
3×0+4×1+6×2+7×3=37,
4×0+5×1+7×2+8×3=43.

卷积定义

f(x)f(x)g(x)g(x)是在R上的可积函数,作积分:

+f(τ)g(xτ)dτ\begin{aligned} \int_{-\infty}^{+\infty}f(\tau)g(x-\tau)d\tau \end{aligned}
可以证明,关于几乎所有的实数xx,上述积分是存在的。这样,随着xx的不同取值,这个积分就定义了一个新函数h(x)h(x),称为函数ffgg的卷积,记为h(x)=(fg)(x)h(x)=(f*g)(x)
那么按照这个定义,对于上述矩阵的卷积操作,应该是这样的:
0×3+1×2+3×1+4×0=5,
1×3+2×2+4×1+5×0=11,
......
这样可能还不是很直观,那就搬一下知乎大佬的动图作解释如下:
f,gf,g为同尺寸矩阵,现在假设ff为输入矩阵中某一块,gg为卷积核,如下卷积操作得到这点的卷积值:
卷积与互相关运算这其实相当于将卷积核左右翻转,再上下翻转,然后做互相关运算。
可以看出如果卷积核是一个方块,并且它关于中心对称,那么卷积和互相关运算得到的结果是一样的

实际使用

现在深度学习中所做的卷积操作,其实都是互相关运算。无论哪个框架,conv2的API都是这个操作。
对于我来讲,卷积就是一种运算,和加减乘除一样。

至于区别

这里我推荐这篇知乎文章
传送门