深度学习中的卷积与反卷积
普通的神经网络(全连接网络):只能处理向量,因而需要把常见的把图像、音频等高维输入数据展开成向量才能输入给神经网络,这大大破坏了数据在空间上的位置信息。
卷积和反卷积:使得神经网络能够处理二维以上的数据,因而能够保持数据在空间上的位置信息。另外,权重共享使得网络参数大大减少,从而降低了计算复杂度。
卷积
首先假设对于卷积,已知:
input size
kernel size
stride
padding size
首先来看两个例子:
1)
2)
卷积层输入特征与输出特征尺寸与卷积核参数的关系为:
卷积与矩阵乘法的关系
考虑如下一个卷积运算。
对于上述卷积运算,我们把上图所示的3×3卷积核展成一个如下所示的[4,16]的稀疏矩阵 C, 其中非0元素
C=
再把
X=
则CX=Y是一个[4,1]的输出矩阵。把Y重新排列成
通过上述的分析,我们已经知道卷积层的前向操作可以表示为输入X和矩阵C相乘,那么我们很容易得到卷积层的反向传播就是X和C的转置相乘。
即卷积的前向操作为:
卷积的反向操作为:
卷积与反卷积的关系
其实卷积层的前向传播过程就是反卷积层的反向传播过程,卷积层的反向传播过程就是反卷积层的前向传播过程.
即反卷积的前向操作为:
反卷积的反向操作为:
假设对于反卷积,已知:
input size
kernel size
stride
padding size
反卷积层输入特征与输出特征尺寸与卷积核参数的关系为:
其中带上标的为反卷积层参数,不带上标的是反卷积层对应的卷积层参数。其中会有关系:k=k′,s=s′。
举个例子:
反卷积参数为(i′=2,k′=3,s′=1,p′=2),其对应的卷积操作的参数为(i=4,k=3,s=1,p=0)。对比可以发下,反卷积多了p′=2。这是因为卷积层中左上角的输入只对左上角的输出有贡献,所以反卷积层会出现 p′=k−p−1=2。
反卷积:
对应的卷积操作为:
Fractionally Strided Convolution
上面也提到过反卷积有时候也被叫做Fractionally Strided Convolution,即卷积操作的步长不为1。对于步长 s>1的卷积,我们可能会想到其对应的反卷积步长 s′<1。 如下图所示为一个参数为 (i=5,k=3,s=2,p=1)的卷积操作(就是第一张图所演示的)所对应的反卷积操作。对于反卷积操作的小数步长我们可以理解为:在其输入特征单元之间插入 s−1 个0,插入0后把其看出是新的特征输入,然后此时步长 s′不再是小数而是为1。因此,结合上面所得到的结论,我们可以得出Fractionally Strided Convolution的输入输出关系为:
总结:
卷积操作的输出尺寸:
反卷积操作的输出尺寸:
小数步长反卷积操作的输出尺寸:
(对于反卷积操作,在其输入特征单元之间插入s−1个0,周围再填充s-p-1个0)