全连接层与卷积层可以互相转化

这个论述应该出自 FCN(Fully Convolutional Networks,全卷积神经网络)的论文,我看了一下挺新奇的,记录一下。

原理

参考网页一,这部分说明如下

全连接层和卷积层之间唯一的不同就是卷积层中的神经元只与输入数据中的一个局部区域连接,并且在卷积列中的神经元共享参数。然而在两类层中,神经元都是计算点积,所以它们的函数形式是一样的。因此,将此两者相互转化是可能的:

  • 对于任何一个卷积层,都存在一个能实现和它一样的前向传播函数的全连接层。权重矩阵是一个巨大的矩阵,除了某些特定块,其余部分都是零。而在其中大部分块中,元素都是相等的。
  • 相反,任何全连接层都可以被转化为卷积层。比如,一个 K=4096 的全连接层,输入数据的尺寸是 7 * 7 * 512,这个全连接层可以被等效地看做是一个 F=7,P=0,S=1,K=4096 的卷积层。换句话说,就是将滤波器的尺寸设置为和输入数据体的尺寸一致了。因为只有一个单独的深度列覆盖并滑过输入数据体,所以输出将变成 1 * 1 * 4096,这个结果就和初始的那个全连接层一样了。

我个人理解和解释如下

  • 对于卷积层转为全连接层,卷积层的每个输出值其实就是输入数据的一部分元素与对应参数的乘积和 + 偏置,这就可以转为一个全连接层,只是对应全连接层的大部分权重是 0 而已。

  • 对于全连接层转为卷积层,只要输入数据的长宽一致,比如这里例子的 7×7,那么这里就可以转为大小为 7×7 的卷积核的卷积层。也就是说,卷积核和输入尺寸一致,那么每一个卷积核输出的就是一个 1×1 的元素,也就是单个元素,对应着全连接层的单个输出层。另一点就是输出通道数和全连接层的输出神经元数目一致即可。也就是说,例如文中提到的 K=4096的全连接层接在 7x7x512的输入后,可以转化为一个 7x7大小、输入通道数为 512、输出通道为 4096的卷积层。

    注意:这种全连接层转为卷积层的方式,二者是完全等价的,参数数量也是一样的。

参考资料

  1. https://www.zhihu.com/column/p/30195134
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2019-2026 Vincere Zhou
  • 访问人数: | 浏览次数:

请我喝杯茶吧~

支付宝
微信