大家好啊,我是董董灿。
上一篇介绍了池化层Resnet图像识别入门——池化层,池化层一般接在卷积层后面,用来完成特征图的降维和特征融合操作。
除了池化层,在CNN网络的最后,一般还会有一个全连接层(Fully Connected Layer)。
那么CNN中为什么还需要一个全连接层呢,它的作用是什么?这篇文章会告诉你答案。
全连接层
全连接层,指的是每一个结点都与上一层的所有结点相连(示意图如上图所示),用来把前面几层提取到的特征综合起来。由于其全连接的算法,一般全连接层的参数也是最多的。
前面的文章卷积的核心,特征提取提到卷积的作用是完成图像的特征提取,那提取出了特征之后,还是无法根据提取的一堆特征来完成图像的识别。
因为卷积层提取出来的特征太多了。
举个例子,一张画着猫咪的图片,经过几十层卷积的特征提取,很有可能已经提取出了几十个甚至上百个特征,那我们如何根据这几十上百个特征来最终确认,这是一只猫呢?
把上面的问题细化并且简化一下,不说几十上百个特征,就说卷积层只提取了3个特征:分别是鼻子,耳朵和眼睛。实际上,有鼻子、耳朵和眼睛这三个特征的动物有很多,我们并不能只根据某个动物有鼻子、耳朵和眼睛,就把它简单的认为是一只猫。
那么就需要一种方法,把鼻子、耳朵和眼睛这三个特征进一步融合,使得神经网络看到这三个特征的融合集合之后,可以区分这是一只猫而不是一只狗。
上面的例子比较简单,实际网络中卷积提取的特征远远不止3个,而是成百上千个,将这些特征进一步融合的算法,就是全连接。
或者说,全连接,可以完成特征的进一步融合。使得神经网络最终看到的特征是个全局特征(一只猫),而不是局部特征(眼睛或者鼻子)。
之前在某文章中看到过一个对全连接的比较形象的回答,大意是说:
假设你是一只蚂蚁,你的任务是找小面包。这时候你的视野比较窄,只能看到很小一片区域,也就只能看到一个大面包的部分。
当你找到一片面包之后,你根本不知道你找到的是不是全部的面包,所以你们所有的蚂蚁开了个会,互相把自己找到的面包的信息分享出来,通过开会分享,最终你们确认,哦,你们找到了一个大面包。
上面说的蚂蚁开会的过程,就是全连接,这也是为什么,全连接需要把所有的节点都连接起来,尽可能的完成所有节点的信息共享。
说到这,大概就能理解全连接的作用了吧。
卷积和全连接
其实有两首诗可以很形象的概括卷积和全连接的作用。
我们知道卷积是对图像的局部区域进行连接,通过卷积核完成的是感受野内的长宽方向以及channel 方向的数据连接。因此,卷积操作,提取的特征是局部特征。也就是说,卷积是“不是庐山真面目,只缘身在此山中”。
而全连接层呢?它的每次完成的是所有channel方向的连接,它看到的是全局特征。全连接是“不畏浮云遮望眼,自缘身在最高层”。
除此之外,卷积和全连接在算法上是可以转换的。通常情况下,在进行全连接的计算时,可以把它等效于卷积核为1x1的卷积运算。
总结一下
全连接的作用,说的学术专业一点,就是把卷积层学到的特征空间映射到样本标记空间。
说的通俗易懂点,就是把卷积学到的一堆特征互相融合一下,变成样本(比如一只猫)的代表。
在使用Resnet50对ImageNet2012数据集进行分类时,最终完成某个图片的分类,全连接层会输出一个值。在ImageNet 中,281-287都代表猫。比如282这个值,代表的是一只虎猫,而这个值,就是把所有的虎猫的特征进行了融合后计算而来的。
- 281 n02123045 猫, tabby, tabby cat
- 282 n02123159 猫, tiger cat
- 283 n02123394 猫, Persian cat
- 284 n02123597 猫, Siamese cat, Siamese
- 285 n02124075 猫, Egyptian cat
- 286 n02125311 猫, cougar, puma, catamount, mountain lion, painter
- 287 n02127052 猫, lynx, catamount
看到这,可能有人会问,既然全连接层处理的特征比卷积层信息更丰富,那为什么在CNN网络中进行图像识别和分类时,我们还大量的使用卷积而不全部使用全连接呢?
答案很简单。
全连接由于连接了上一层所有的节点,需要的模型参数更多,计算更密集。一个普通的卷积神经网络,如果用全连接来实现,你可以试试,分分钟挤爆你的CPU,甚至你的显卡。
欢迎关注@董董灿是个攻城狮 和同名微信公众号
本文作者原创,转载请联系作者,请勿随意转载