神经网络:全连接层
全连接层:全连接层一般会放在网络的最后,作用是用来综合所有信息。对于cnn它提取特征的范围是全图的,直接把图像降维成一堆序列。卷积层是一种局部连接,它所能提取的特征的范围,取决于卷积核的感受野,当卷积核感受野覆盖到全图的时候,它的作用就和全连接层类似了。(所以用和特征图尺寸一样大小的卷积核做卷积,提取全图范围特征,和接全连接层,计算过程是等效的,输入输出,参数量完全一样)全连接之所以失宠:有人说是
问题汇总简答(持续更新):
(1)全连接层对模型的影响?
首先我们明白全连接层的组成如下:
二层全连接层结构
那么全连接层对模型影响参数就是三个:
- 全接解层的总层数(长度)
- 单个全连接层的神经元数(宽度)
- 激活函数
首先我们要明白激活函数的作用是:
增加模型的非线性表达能力
更详细了解请去:
蒋竺波:CNN入门讲解:什么是激活函数(Activation Function)zhuanlan.zhihu.com
如果全连接层宽度不变,增加长度:
优点:神经元个数增加,模型复杂度提升;全连接层数加深,模型非线性表达能力提高。理论上都可以提高模型的学习能力。
如果全连接层长度不变,增加宽度:
优点:神经元个数增加,模型复杂度提升。理论上可以提高模型的学习能力。
难度长度和宽度都是越多越好?
肯定不是
(1)缺点:学习能力太好容易造成过拟合。
(2)缺点:运算时间增加,效率变低。
那么怎么判断模型学习能力如何?
看Training Curve 以及 Validation Curve,在其他条件理想的情况下,如果Training Accuracy 高, Validation Accuracy 低,也就是过拟合 了,可以尝试去减少层数或者参数。如果Training Accuracy 低,说明模型学的不好,可以尝试增加参数或者层数。至于是增加长度和宽度,这个又要根据实际情况来考虑了。
PS:很多时候我们设计一个网络模型,不光考虑准确率,也常常得在Accuracy/Efficiency 里寻找一个好的平衡点。
-------------------
全连接层:
全连接层一般会放在网络的最后,作用是用来综合所有信息。对于cnn它提取特征的范围是全图的,直接把图像降维成一堆序列。
卷积层是一种局部连接,它所能提取的特征的范围,取决于卷积核的感受野,当卷积核感受野覆盖到全图的时候,它的作用就和全连接层类似了。(所以用和特征图尺寸一样大小的卷积核做卷积,提取全图范围特征,和接全连接层,计算过程是等效的,输入输出,参数量完全一样)
全连接之所以失宠:
有人说是参数量大的原因。其实如果特征图压缩的足够小再做全连接,参数量和计算量也是不算大的。
我觉得主要原因还是,目前大多数的任务,如目标检测,或是分割,并不要求提取全图特征,只需要提取能够覆盖目标物体的大小的感受野内特征即可。尤其是小物体检测问题,感受野很小即可,如果还去接全连接提取全图特征,我们待检测的目标会被淹没在和其它背景的平均特征之中变得不可识别。
全卷积还有一个很大的优点:
不再要求输入尺寸为固定尺寸,只要求输入图片不太小到被网络下采样到尺寸不够用就行。
输入图像正好被下采样到1*1,那就是和接全连接一样的效果;下采样后大于1*1,也完全不影响网络的计算过程。
全连接的那种计算形式就不能做到这么通用,所以可以完全被全卷积形式替换。
作者:炫云
链接:https://zhuanlan.zhihu.com/p/136786896
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
激活函数(Activation Function),假设我们经过一个Relu之后的输出如下
Relu:
然后开始到达全连接层
全连接层
以上图为例,我们仔细看上图全连接层的结构,全连接层中的每一层是由许多神经元组成的(1x 4096)的平铺结构,上图不明显,我们看下图
它是怎么样把3x3x5的输出,转换成1x4096的形式?
很简单,可以理解为在中间做了一个卷积
从上图我们可以看出,我们用一个3x3x5的filter 去卷积激活函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,这个输出就是一个值
因为我们有4096个神经元
我们实际就是用一个3x3x5x4096的卷积层去卷积激活函数的输出
全连接层有两层1x4096fully connected layer平铺结构(有些网络结构有一层的,或者二层以上的)
但是大部分是两层以上,泰勒公式都知道吧,意思就是用多项式函数去拟合光滑函数,我们这里的全连接层中一层的一个神经元就可以看成一个多项式,用许多神经元去拟合数据分布,但是只用一层fully connected layer 有时候没法解决非线性问题,而如果有两层或以上fully connected layer就可以很好地解决非线性问题了.
全连接层之前的作用是提取特征,全连接层的作用是分类
假设这个神经网络模型已经训练完了
全连接层已经知道
当我们得到以上特征,我就可以判断这个东东是猫了,因为全连接层的作用主要就是实现分类(Classification),从下图,我们可以看出
红色的神经元表示这个特征被找到了(激活了),同一层的其他神经元,要么猫的特征不明显,要么没找到,当我们把这些找到的特征组合在一起,发现最符合要求的是猫,ok,我认为这是猫了,那我们现在往前走一层,那们现在要对子特征分类,也就是对猫头,猫尾巴,猫腿等进行分类,比如我们现在要把猫头找出来
猫头有这么些个特征,于是我们下一步的任务,就是把猫头的这么些子特征找到,比如眼睛啊,耳朵啊
道理和区别猫一样,当我们找到这些特征,神经元就被激活了(上图红色圆圈),这细节特征又是怎么来的?,就是从前面的卷积层,下采样层来的
全连接层到底什么用?我来谈三点。
- 全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽(注1)。
- 目前由于全连接层参数冗余(仅全连接层参数就可占整个网络参数80%左右),近期一些性能优异的网络模型如ResNet和GoogLeNet等均用全局平均池化(global average pooling,GAP)取代FC来融合学到的深度特征,最后仍用softmax等损失函数作为网络目标函数来指导学习过程。需要指出的是,用GAP替代FC的网络通常有较好的预测性能。具体案例可参见我们在ECCV'16(视频)表象性格分析竞赛中获得冠军的做法:「冠军之道」Apparent Personality Analysis竞赛经验分享 - 知乎专栏 ,project:Deep Bimodal Regression for Apparent Personality Analysis
- 在FC越来越不被看好的当下,我们近期的研究(In Defense of Fully Connected Layers in Visual Representation Transfer)发现,FC可在模型表示能力迁移过程中充当“防火墙”的作用。具体来讲,假设在ImageNet上预训练得到的模型为 ,则ImageNet可视为源域(迁移学习中的source domain)。微调(fine tuning)是深度学习领域最常用的迁移学习技术。针对微调,若目标域(target domain)中的图像与源域中图像差异巨大(如相比ImageNet,目标域图像不是物体为中心的图像,而是风景照,见下图),不含FC的网络微调后的结果要差于含FC的网络。因此FC可视作模型表示能力的“防火墙”,特别是在源域与目标域差异较大的情况下,FC可保持较大的模型capacity从而保证模型表示能力的迁移。(冗余的参数并不一无是处。)
注1: 有关卷积操作“实现”全连接层,有必要多啰嗦几句。
以VGG-16为例,对224x224x3的输入,最后一层卷积可得输出为7x7x512,如后层是一层含4096个神经元的FC,则可用卷积核为7x7x512x4096的全局卷积来实现这一全连接运算过程,其中该卷积核参数如下:
“filter size = 7, padding = 0, stride = 1, D_in = 512, D_out = 4096”
经过此卷积操作后可得输出为1x1x4096。
如需再次叠加一个2048的FC,则可设定参数为“filter size = 1, padding = 0, stride = 1, D_in = 4096, D_out = 2048”的卷积层操作。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)