卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。因为用到了所有的局部特征,所以叫全连接。
全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。
——————————以下为个人看法,如果有错,欢迎锤正!——————————
假设我们现在的任务是去区别一图片是不是猫、
假设这个神经网络模型已经训练到此阶段,如图:
经过卷积,池化,激活等层,现已提取了上图所示的局部特征,且已到达了第一层全连接层并激活符合特征存在的部分神经元,该连接层是一维的,而这个层的作用就是根据提取到的局部特征进行相关操作进行组合并输出到第二个全连接层的某个神经元处,如上图,经过组合我们可以知道这是个喵头。
那我们现在往后走一层,到第二层全连接层,假设猫的身体其他部位特征也都被上述类似的操作提取和组合出来,得
当我们找到这些特征,神经元就被激活了(上图红色圆圈)
此时,再将上图中的特征进行组合并输出到输出层,经过softmax函数进行分类,得出结论,这是只猫。
至此,关于全连接层的信息就简单介绍完了
以上图为例,我们仔细看上图全连接层的结构,全连接层中的每一层是由许多神经元组成的(1x 4096)的平铺结构,上图不明显,我们看下图
当我第一次看到这个全连接层,我的第一个问题是
它是怎么样把3x3x5的输出,转换成1x4096的形式
从上图我们可以看出,我们用一个3x3x5的filter 去卷积激活函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,这个输出就是一个值
因为我们有4096个神经元
我们实际就是用一个3x3x5x4096的卷积层去卷积激活函数的输出
这一步卷积一个非常重要的作用,就是把分布式特征representation映射到样本标记空间
就是它把特征representation整合到一起,输出为一个值。这样做,有一个什么好处?
就是大大减少特征位置对分类带来的影响
这个例子可能过于简单了点
可是我懒得画了,大家将就着看吧
从上图我们可以看出,猫在不同的位置,输出的feature值相同,但是位置不同
对于电脑来说,特征值相同,但是特征值位置不同,那分类结果也可能不一样
而这时全连接层filter的作用就相当于,喵在哪我不管,我只要喵
于是我让filter去把这个喵找到
实际就是把feature map 整合成一个值
这个值大
哦,有喵
这个值小
那就可能没喵
和这个喵在哪关系不大了有没有
鲁棒性有大大增强了有没有
因为空间结构特性被忽略了,所以全连接层不适合用于在方位上找Pattern的任务,比如segmentation
ok, 我们发现全连接层有两层1x4096fully connected layer平铺结构(有些网络结构有一层的,或者二层以上的)
但是大部分是两层以上呢
这是为啥子呢
泰勒公式都知道吧
意思就是用多项式函数去拟合光滑函数
我们这里的全连接层中一层的一个神经元就可以看成一个多项式
我们用许多神经元去拟合数据分布
但是只用一层fully connected layer 有时候没法解决非线性问题
而如果有两层或以上fully connected layer就可以很好地解决非线性问题了
固定大小是说送入网络训练的每一个数据大小需要一样, 除了何凯明团队提出的 Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
利用空间金字塔池化将任意大小的图像输出成固定的输出,然后输出到后面的全连接层解决了固定大小的问题。但是固定大小不代表网络输入必须是这个大小,比如说现在输入图像大小为227x227,那么你所有图像都必须为227x227, 不能出现不一样的, 但是你也可以将图像都改为224x224(没有预训练模型的情况下)。
**解释:**含有全连接层的网络输入数据的大小应该是固定的,这是因为全连接层和前面一层的连接的参数数量需要事先确定,不像卷积核的参数个数就是卷积核大小,前层的图像大小不管怎么变化,卷积核的参数数量也不会改变,但全连接的参数是随前层大小的变化而变的,如果输入图片大小不一样,那么全连接层之前的feature map也不一样,那全连接层的参数数量就不能确定, 所以必须实现固定输入图像的大小。
另外全连接的实现可以通过卷积的方式进行, 这里有两种情况:
1、前层为卷积层或池化层(就是全连接层的输入是feature_map,而不是单个值):
比如前层输出为512x5x5的feature map,全连接层有500个神经元,那这可以看做是用5x5的卷积核对前层的这些feature map进行卷积,最后输出500x1x1的feature map;
2、前层是全连接层
若前层有500个神经元,当前层有100个,那可以看做前层有500x1x1个feature map,然后用1x1的卷积核对这些feature map进行卷积,则得到100x1x1个feature map。