鸡血文章 人生就是不断的探索的过程,最近个人意识越来越强,在这个意识的世界里,我们应该怎么做,那就是不断的探索,直到物理停止。



从什么是全连接层,全连接层的作用,以及如何实现全连接层,不同的实现的过程其实有不同的体现,然后就是全卷积网络。这是一个递推的过程。作用都是:

如果说卷积层、池化层和**函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用


1.全连接层的作用:参考文章参考文章

全连接层之前的作用是提取特征,全理解层的作用是分类,更准确的是对这些特征进行分类,如果我们后面接一个softmax的话,那么最后就是对应的类别了。我们以猫咪为例子:

从全连接层的变化看懂卷积神经网络的奥秘

从全连接层的变化看懂卷积神经网络的奥秘

把分布式特征representation映射到样本标记空间,就是上面这一部分了。

泰勒公式都知道吧,意思就是用多项式函数去拟合光滑函数,我们这里的全连接层中一层的一个神经元就可以看成一个多项式,我们用许多神经元去拟合数据分布,但是只用一层fully connected layer 有时候没法解决非线性问题。而如果有两层或以上fully connected layer就可以很好地解决非线性问题了。

全连接层就是全连接的卷积层 怎么去理解这句话呢?为什么说全连接和卷积都是线性的过程,其实本质上并没有很大的差别,只是前期的时候,卷积层的卷积核感受野是有限的,所以feature map每个点的位置他映射到的特征是有限的。而到了全连接必然要将全部的局部整合起来,这就是全连接的意义了。

可是有个问题是假设我们是13 * 13 * 256的featuremap,那么我们如何进行全连接呢?下面就涉及到这三种方式的过程。第一种是flatten,第二种是adaptive pooling,第三种是convolution layer 这是我目前所看到的


2.全连接层的实现

方法1. flatten:
从全连接层的变化看懂卷积神经网络的奥秘

这种方法就是flatten的过程,这个过程是直接展平的,这个过程有啥好处,直接flatten不做任何的处理,是全连接层的一个弊端的地方,那就是如果你输入的图片的大小不同,那么featuremap最终也是不同的,所以你的flatten是不一样的大小的,这样你后面接的比如全连接层,那他的输入就要不断的变化,但是一般这个参数的量是固定的,这就导致了为什么全连接层的存在你不能随便改变输入图片的大小。还有就是他不会损失信息。
不损失信息带来的另一个问题就是计算量巨大,好的吧,真的是两难啊

方法2: adaptive pooling

从全连接层的变化看懂卷积神经网络的奥秘

这个过程就是假设你输入的是13 * 13 * 256的特征那么经过pooling后,其实就是1 * 1 * 256,就是对feature-map每一层先进行取平均,这样的过程的好处是啥,首先没有flatten,所以一定程度上没有破坏空间结构,同时就是比起前面减少了计算的参数量,但是其实这样会一定程度上损失信息。毕竟如果是25 * 25缩小成1的话其实还是挺损失的信息的。但是呢 其实一定程度上还可以防止过拟合。

这篇文章做了GAP和flatten的区别

方法3:Convolution layer

从全连接层的变化看懂卷积神经网络的奥秘

其实这个过程和flatten的计算的参数的数量是一致的,而且比起flatten来说,他没有破坏featuremap本身的空间结构,个人觉得用这种方式其实会比直接fallten的方式更好,但是就是还是老问题,参数量大,而且只能固定输入的图片的大小。

举例说明,如果一幅图片经过卷积网络之后,feature map为7 * 7 * 4096,类别有10类,那么如果这里接full connection层它的参数数量为7 * 7 * 4096 * 10,但是我们可以换一种思路,下一层用卷积层实现同样功能,那么就是需要10个7 * 7的filter,filter的深度为4096,这样我们会发现参数的数量相同,并且计算的时间复杂度以及空间复杂度等等都没有区别,那么为什么还要用卷积层呢?

这主要是为了解决当图片中有多个类别物体的情况下,某一个物体最后映射的feature map是7 * 7,但是这幅图中还有其他物体,这样最后我们不仅仅需要得到一个一维向量1 * 1 * 10,事实上我们需要的假如说是6 * 6 * 10,我们需要对6*6的每个网格都做分类,那么这时候如果用full connect层,需要经过多次全连接层,才能得到6 * 6 * 10个score feature,而如果用卷积层,就可以通过利用滑动窗口,一次前向传播就得到6 *6 * 10的score feature,这样无疑是更加高效的,因为这样只需要计算每个位置卷积不同的地方即可,事实上不同的地方很小。

个人觉得第三种方法需要减少计算量的方法可以模拟mobilenet那样来处理。

总结三种方法:除了第二种方法可以任意图片大小输入,其他的都不能。第三种也是,难道每次卷积的kernel 的大小都在改变吗?不可能的,参数量来看的第二种肯定是最好少的,还有就是第二种和第三种不会破坏空间结构。局部连接和全连接要做一个好的权衡,我觉得是关键。


谈谈全卷积

但是全卷积的好处,的确可以无限图片的输入,个人觉得,这个好处应该是用在目标检测和语义分割这种情况,个人比较了解目标检测,个人大概谈谈用了全卷积网络后的好处。

YOLOv2开始用的是全卷积网络,其实我觉得YOLOv1也可以用了,何必那么麻烦非要先全连接,然后全连接转化为一个featuremap的大小呢?而且还破坏了空间结构。可是用了全卷积网络后的YOLOv2,其实最后输出的featuremap大小是不确定的。也因为使用了全卷积网络所以可以多尺度训练。我觉得

从全连接层的变化看懂卷积神经网络的奥秘

相关文章:

  • 2021-08-31
  • 2021-10-29
  • 2021-07-26
  • 2021-11-06
  • 2021-10-16
  • 2021-12-15
  • 2021-07-29
猜你喜欢
  • 2021-06-26
  • 2021-11-25
  • 2021-10-24
  • 2021-12-24
  • 2022-12-23
  • 2021-10-14
  • 2021-08-31
相关资源
相似解决方案