1 卷积

我们先来看一下卷积的定义,卷积是指通过两个函数 f 和 g 生成第三个函数的一种数学算子,表征函数 f 与经过翻转和平移的 g 的乘积函数所围成的曲边梯形的面积。

对于连续卷积来说,可以定义为:

深度学习卷积原理及特征尺寸变化_神经网络

对于离散卷积来说,可以定义为:

深度学习卷积原理及特征尺寸变化_计算机视觉_02

但无论是连续还是离散的卷积,他们都有一个特点,就是f和g中的下标之和是一个定值

深度学习卷积原理及特征尺寸变化_计算机视觉_03

1.1 连续卷积举例——信号分析

如下图所示,输入信号是 f(t) ,是随时间变化的。

系统响应函数是 g(t) ,是随时间指数下降的,它的物理意义是说:如果在 t=0 的时刻有一个输入,那么随着时间的流逝,这个输入将不断衰减。

换言之,到了 t=T时刻,原来在 t=0 时刻的输入f(0)的值将衰减为f(0)g(T)。

深度学习卷积原理及特征尺寸变化_深度学习_04

考虑到信号是连续输入的,也就是说,每个时刻都有新的信号进来。

所以,某一时刻最终输出的是所有之前输入信号的累积效果。

如下图所示,在T=10时刻,输出结果跟图中带标记的区域整体有关。

其中,f(10)因为是刚输入的,所以其输出结果应该是f(10)g(0),而时刻t=9的输入f(9),只经过了1个时间单位的衰减,所以产生的输出应该是 f(9)g(1),如此类推,即图中虚线所描述的关系。

这些对应点相乘然后累加,就是T=10时刻的输出信号值,这个结果也是f和g两个函数在T=10时刻的卷积值。

深度学习卷积原理及特征尺寸变化_神经网络_05

显然,上面的对应关系看上去比较难看,是拧着的,所以,我们把g函数对折一下,变成了g(-t),这样就好看一些了。

这就是为什么卷积要“卷”,要翻转的原因,这是从它的物理意义中给出的。

深度学习卷积原理及特征尺寸变化_深度学习_06

然后我们根据定义,把g(-t)向右移动T个单位

深度学习卷积原理及特征尺寸变化_深度学习_07

我们这算的是10这个时刻的卷积结果,如果要算其他位置的,就是把g(-t)曲线再沿着x轴左右滑动就可以了

1.2 从另一个角度来考虑f和g的离散卷积。

我们可以想成,固定f的位置(f的位置固定在哪里,取决于f和g下标之和的数值),将g翻转,然后对翻转后的g(我们称之为g’)进行滑动。

g‘滑动到不同的位置,会和f包围出不同的区域。对这些区域里面的元素两两乘积,然后累加,就得到了卷积函数的值。

1. 3 二维离散卷积

深度学习卷积原理及特征尺寸变化_卷积_08

CNN中的卷积核已经是“扭过”之后的了,所以CNN中直接是对应位置元素相乘再求和。

1.4 卷积等价于多项式相乘

深度学习卷积原理及特征尺寸变化_神经网络_09

 

深度学习卷积原理及特征尺寸变化_神经网络_10

 

2 卷积定理

在适当条件下,两个信号的卷积的傅立叶变换是他们的傅立叶变换的点积。

换句话说,一个域(如时域)的卷积等于另一个域(如频域)的点乘:

深度学习卷积原理及特征尺寸变化_卷积_11

这里F(f)表示函数f的傅里叶变换

2.1 卷积原理的一个用处

利用卷积定理,我们可以简化卷积的运算量。

对于一个长度为 n 的序列,按照卷积的定义来计算则需要做 2n-1 组对位乘法,即时间复杂度为 O(n^2) .

深度学习卷积原理及特征尺寸变化_深度学习卷积原理及特征尺寸变化_12

2n-1我们可以这样去理解:

假设进行卷积的两个序列是f和g,我们固定f的位置,并令f的左端为0,右端为n-1.

卷积的意思是g从左向右滑动,和f包围起来的面积

所以和固定的f有相交区域的g一共有 (n-1)-[-(n-1)]+1=2n-1个

每一个可能的g和f都需要进行O(n)次运算。

所以时间复杂度为O(n^2)

而利用傅立叶变换后,只需要计算一组对位乘法。而

离散傅立叶变换有快速的算法(快速傅立叶变换),所以总的计算复杂度为O(nlogn)  。

参考资料:

【GNN】万字长文带你入门 GCN - 知乎 (zhihu.com)

https://www.zhihu.com/question/22298352/answer/637156871