卷积神经网络中关于全局平均池化代替全连接层、以及参数计算等的一些思考

一、引发思考的实验与问题:

在一个非常小的二分类样本集(样本总数目63,“10-crop”法数据增强10倍,样本为矩阵保存为图片),通过ALexNet模型和VGG模型做分类任务,无论怎么调超参数,留出法重复50次的实验情况大致都如图A所示,而用Inception_v1的效果可以达到如图B所示。我就很奇怪为什么效果会差别这么大?按道理就算inception_v1模型有多尺度(并联卷积层)的设计思想,准确率和AUC的值是会提升,但不会提升这么多,而且在训练集的效果差距也太大了。

                              

为了研究这个问题,我首先尝试了自己写的同一个读取数据显示结果的程序,确保自变量因素只有模型本身,而不是一些程序bug导致的。根据图A的结果,训练集的效果也比较差,所以我推断为模型欠拟合了,继而推测是模型不够复杂,无法拟合这种特殊的矩阵图片样本,于是我以VGG模型为基础,开始各种尝试增加模型的复杂度,如增加卷积层的数目、卷积核的个数、甚至卷积核的大小等等,但是收效甚微。

这时,我不禁问我自己,难道真的就是卷积核并联的思想让模型的效果提升这么显著吗?我不信,于是开始了我的更仔细的对照试验——我把Inception_v1的模型的并联卷积层代码删掉,只保留每个并联卷积层中卷积核个数最多的层,形成串联的卷积层,这句话可能不太好理解,具体可以看下图的代码示例:图A是原始的并联卷积层代码,图B是删改后的卷积层代码,只保留了branch1这个分支,如示意图删除了三个并联的分支结构,只保留了一个分支结构,形成传统卷积神经网络(卷积、池化串联的这种结构)。这样就能看之前实验效果的显著提升是不是由并联卷积层导致的。

实验结果:修改后模型的效果如下图所示,确实比Inception_v1模型有下降,但整体效果还是好于ALexNet、VGG模型,这说明之前带来显著影响的并不是前面的卷积层,而是后面的分类层

                                                         

二、分析实验现象与思考

重点来了!

AlexNet和VGG模型最后都是有三个全连接层(FC),而Inception_v1用全局平均池化的方法代替全连接层融合学到的深度特征这种方法可以显著提升在小样本情况下模型的预测分类能力!只有一个分类的全连接层(我是二分类问题,所以只有2个神经元)。

全连接层最大特点是参数爆炸!这里我们来复习一下卷积层和全连接层的参数计算:

卷积层:假设输入这个卷积层的图像大小是224*224*3,这个卷积层的卷积核大小是3*3,步长为2,个数为64,记住卷积层的参数个数与输入图片的大小无关,计算公式——(卷积核高 * 卷积核宽 * 输入图片的通道数 + 1) * 卷积核个数  (+1是因为bias偏置的存在)

所以这个卷积层的参数为 (3*3*3+1)* 64 = 1792

全连接层: 计算公式——(上一层神经元个数 + 1) *  当前层神经元个数(+1同样是因为bias偏置的存在),举例说明,一张图片经过卷积层和池化层处理为7*7*256,输入的全连接层有512个神经元,这个全连接层的参数为:(7*7*256+1)*512=6423040;然后下一个全连接层的神经元个数为1024的话,下一个全连接层的参数为:(512+1)*1024=525312;

初步思考结论:

可以看出全连接层存在参数爆炸与冗余的情况,之前实验效果太差很有很可能是因为有3个全连接层的原因,我做了一个补充实验,把Inception_v1改为了3个全连接层,模型效果立刻显著下降,进一步证明了用全局平均池化减少全连接层的使用可以提升CNN的性能

用全局池化和卷积层方法实现全连接层的好处在我之前的一篇博客有介绍https://blog.csdn.net/Amigo_1997/article/details/104491793

复习:图像(feature map)经过卷积层的大小变化

猜你喜欢

转载自blog.csdn.net/Amigo_1997/article/details/106041216