以下是我看过最好的全连接层的解释!
原文链接:卷积神经网络(CNN)入门讲解关注专栏
以上图为例,我们仔细看上图全连接层的结构,全连接层中的每一层是由许多神经元组成的(1 × 4096)的平铺结构,上图不明显,我们看下图:
注:上图和我们要做的下面运算无联系
并且不考虑激活函数和bias
当我第一次看到这个全连接层,我的第一个问题是:
它是怎么样把3x3x5的输出,转换成1x4096的形式?
很简单,可以理解为在中间做了一个卷积。
从上图我们可以看出,我们用一个 3×3×5 的 filter 去卷积激活函数的输出,得到的结果就是一个 fully-connected layer 的一个神经元的输出,这个输出就是一个值。
因为我们有4096个神经元,
我们实际就是用一个 3×3×5×4096 的卷积层去卷积激活函数的输出。
以VGG-16再举个例子吧:在 VGG16 全连接层中,对 224×224×3 的输入,最后一层卷积可得输出为 7×7×512,如后层是一层含 4096 个神经元的 FC,则可用卷积核为 7×7×512×4096 的全局卷积来实现这一全连接运算过程。
很多人看到这,可能就恍然大悟
哦,我懂了,就是做个卷积呗
不
你不懂
敲黑板了
麻烦后排吃东西的同学叫下前排玩游戏的同学去把第一排的同学吵醒
我要说重点了!!!!!!!!!!!
这一步卷积一个非常重要的作用:
就是把分布式特征 representation 映射到样本标记空间
什么,听不懂
那我说人话
就是它把特征representation整合到一起,输出为一个值。
这样做,有一个什么好处?
就是大大减少特征位置对分类带来的影响。
来,让我来举个简单的例子
这个例子可能过于简单了点
可是我懒得画了,大家将就着看吧
从上图我们可以看出,猫在不同的位置,输出的 feature 值相同,但是位置不同。对于电脑来说,特征值相同,但是特征值位置不同,那分类结果也可能不一样,而这时全连接层 filter 的作用就相当于
喵在哪我不管
我只要喵
于是我让filter去把这个喵找到,实际就是把 feature map 整合成一个值:这个值大,哦,有喵;这个值小,那就可能没喵,和这个喵在哪关系不大了有没有,鲁棒性有大大增强了有没有
喵喵喵
因为空间结构特性被忽略了,所以全连接层不适合用于在方位上找 Pattern 的任务,比如 segmentation。
ok, 我们突然发现全连接层有两层 1×4096 fully-connected layer 平铺结构(有些网络结构有一层的,或者二层以上的)
好吧也不是突然发现,我只是想增加一点戏剧效果
但是大部分是两层以上呢,这是为啥子呢?
泰勒公式都知道吧,意思就是用多项式函数去拟合光滑函数。我们这里的全连接层中一层的一个神经元就可以看成一个多项式,我们用许多神经元去拟合数据分布,但是只用一层 fully-connected layer 有时候没法解决非线性问题,而如果有两层或以上 fully-connected layer 就可以很好地解决非线性问题了。
说了这么多,我猜你应该懂的
听不懂?
那我换个方式给你讲
我们都知道,全连接层之前的作用是提取特征,全理解层的作用是分类,我们现在的任务是去区别一图片是不是猫:
我先撸一把先
撸完了,回来啦(嗯,怎么好像哪里不对)
假设这个神经网络模型已经训练完了,全连接层已经知道:
当我们得到以上特征,我就可以判断这个东东是猫了。因为全连接层的作用主要就是实现分类(Classification),从下图,我们可以看出:
红色的神经元表示这个特征被找到了(激活了),而同一层的其他神经元,要么猫的特征不明显,要么没找到。当我们把这些找到的特征组合在一起,发现最符合要求的是猫,ok,我认为这是猫了。
那我们现在往前走一层:那们现在要对子特征分类,也就是对猫头,猫尾巴,猫腿等进行分类。比如我们现在要把猫头找出来:
猫头有这么些个特征,于是我们下一步的任务,就是把猫头的这么些子特征找到,比如眼睛啊,耳朵啊
道理和区别猫一样
当我们找到这些特征,神经元就被激活了(上图红色圆圈)
这细节特征又是怎么来的?
就是从前面的卷积层,下采样层来的
至此,关于全连接层的信息就简单介绍完了
原文链接:卷积神经网络(CNN)入门讲解关注专栏