全连接层(FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。
在实际应用中,全连接层存在以下两种情况:
1.全连接层之前是卷积层,也就是说全连接层的输入是最后一层卷积层(如果是标准CNN结构)是H x W x C的输出,全连接层实现的过程可以理解为使用卷积核大小为H x W(h和w分别为前层卷积结果的高和宽)的全局卷积,具体使用多少个卷积核,要根据后面全连接层的神经元结点数而定。
- 举个栗子(糖炒栗子很好吃!):
假如最后卷积层的输出是7x7x512(VGG-16),如果后层的全连接层含4096个神经元,则使用卷积核为7x7x512x4096全局卷积来实现这一全连接运算过程。
2.全连接层之前还是全连接层,很容易理解,全连接层后又跟一个全连接层,可以转化为用卷积核为1x1的卷积对前层FC的卷积操作,输出后层FC。
- 再举个栗子(糖炒山楂也不错!):
假如前层FC的输出是4096个神经元,后再叠加一个2048个神经元的FC,我们可以把它想象成一个1x1x4096的feature map使用2048个大小为1x1x4096的卷积核进行卷积运算操作。
不过,这里面有个问题,全连接层到底用卷积实现的,还是直接flatten的?
其实两种理解方式的不同,最终得到的效果是一样的,我觉得没必要纠结这一点。
文献《Going Deeper with Contextual CNN for Hyperspectral Image Classification》也提到:
Note that convolving a 1 x 1 x d blob with l filters whose size is 1 x 1 x d can achieve the same effect as fully connecting the 1 x 1 x d input blob to l output nodes.
这里是说,对于1 x 1 x d的特征图,使用1 x 1 x d大小的卷积核去卷积与1 x 1 x d的输入进行全连接操作输出l个神经元效果是相同的。
参考链接:
https://zhuanlan.zhihu.com/p/33841176
https://www.zhihu.com/question/41037974