全连接层的作用

参考

全连接层的作用是什么? 全连接层的作用是什么? - 知乎

(1)全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。

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

        在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽(注1)。

        注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”的卷积层操作。

(2)将学到的“分布式特征表示”映射到样本标记空间的作用

        全连接层把特征整合到一起,输出为一个值,大大减少特征位置对分类器带来的影响;

        一般情况下,全连接层都是两层以上,因为需要解决非线性问题;

        

         影响参数:1)全连接层总层数(宽度);2)单个全连接层的神经元数目(长度);3)激活函数

        宽度增加 / 长度增加:模型复杂度增加,学习能力强;

        过大:导致过拟合,以及运算效率不好; 

(3)FC可一定程度保留模型复杂度(可用于微调和迁移)

        不含FC的网络微调后的结果要差于含FC的网络。因此FC可视作模型表示能力的“防火墙”,特别是在源域与目标域差异较大的情况下,FC可保持较大的模型capacity从而保证模型表示能力的迁移。(冗余的参数并不一无是处。)

(4)卷积神经网络中全连接层的设计,属于人们在传统特征提取+分类思维下的一种"迁移学习"思想

卷积神经网络尚未火热的年代,人们使用haar/lbp + adaboost级连的组合方式检测人脸,hog+svm的组合方式检测行人。这种传统的目标检测方法一个认知上的优势就是: 模块的功能明确,划分得很清晰,符合人们的理解方式。其中,haar,lbp,hog等手工设计的特征提取算子用于提取特征,adaboost,svm用于对提取的特征分类。

而卷积神经网络中conv+relu(早期为sigmoid)+pooling(以下称三剑客)的组合,不仅可以替代手工设计特征算子的繁琐,而且局部感受野+权值共享的设计思想也能避免全连接网络中的种种弊端。此时人们将三剑客的组合视为特征提取的过程,如果按照早期人们特征提取+分类的设计思路,那么分类使用全连接的设计方式,就可以刚好实现了一个end-to-end的架构,也即早起卷积神经网络的原型
 

目录

基本流程:准备数据->Dataloader 加载数据->创建网络模型->损失函数->优化器->训练->验证

优化器

Batch Normalization(批标准化)

计算量(Flops)和参数量(Params)的区别

池化层

全连接层

ResNet

如图1所示,如果F(x)和x的channel个数不同怎么办,因为F(x)和x是按照channel维度相加的,channel不同怎么相加呢?

U-Net

卷积

过拟合

Transformer


基本流程:准备数据->Dataloader 加载数据->创建网络模型->损失函数->优化器->训练->验证

优化器

优化问题定义为寻找神经网络上的一组参数  , 能够显著地降低代价/损失函数 , 该代价函数通常包括整个训练集上的性能评估和额外的正则化项。

  1. 随机梯度下降(SGD, stochastic gradient descent)

        根据训练过程中每一次迭代使用的数据量的大小, 可以分为批量梯度下降随机梯度下降小批量随机梯度下降等三种优化算法。根据不同的数据量和参数量,可以选择一种具体的实现形式。

        但是问题就是由于训练数据多样,容易朝偏离网络最优点方向训练,网络训练不稳定。

        常见的改进方法主要从以下两个方面进行改进: 学习率衰减梯度方向优化,其中学习率衰减可以理解为在对参数更新的步数大小做调整,而梯度方向优化可以理解为对更新的方向做调整

        2. SGDM(加入了一阶动量)

        引入了动量 充当速度角色,它代表参数在参数空间移动的方向和速率。

        3. AdaGrad(加入了二阶动量)

        优点:学习率学习数据的特征自动调整其大小。对于那些只有少部分数据含有的特征,对应神经元权重获得更新机会。

        特点:Adagrad算法的缺点是在经过一定次数的迭代依然没有找到最优点时,由于这时的学习率已经非常小,很难再继续找到最优点。

        4. RMSProp

        5. Adam

        Adam(Adaptive Moment Estimation)自适应矩估计,是另一种自适应学习率的算法。

Batch Normalization(批标准化)

Batch Normalization是2015年一篇论文中提出的数据归一化方法,往往用在深度神经网络中激活层之前。其作用可以加快模型训练时的收敛速度,使得模型训练过程更加稳定,避免梯度爆炸或者梯度消失。并且起到一定的正则化作用,几乎代替了Dropout。 

  • 核心

  •  BN中均值和方差如何得到?

        神经网络中传递的张量数据,其维度通常记为[N, H, W, C],其中N是batch_size,H、W是行、列,C是通道数。那么上式中BN的输入集合 B 就是下图中蓝色的部分。

 

计算量(Flops)和参数量(Params)的区别

(89条消息) 深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结_模型参数量怎么计算_紫芝的博客-CSDN博客

  • 计算量->时间复杂度,执行时间的长短
  • 参数量->空间复杂度,占用显存的量

(1)卷积

        计算量:

(kernel*kernel*map*map) *channel_input*channel_output

kernel*kernel 就是weight*weight

map*map是下个featuremap的大小,也就是上个weight*weight到底做了多少次运算

其中kernel*kernel*map*map= 1个feature的计算量

         参数量:

(kernel*kernel*map*map) *channel_input*channel_output

kernel*kernel 就是weight*weight

map*map是下个featuremap的大小,也就是上个weight*weight到底做了多少次运算

其中kernel*kernel*map*map= 1个feature的计算量

(2)针对于池化层:

        无参数

(3)针对于全连接层:

参数量=计算量=weight_in*weight_out

池化层

池化层是模仿人的视觉系统对数据进行降维,用更高层次的特征表示图像。

实施池化的目的:(1) 降低信息冗余;(2) 提升模型的尺度不变性、旋转不变性;(3) 防止过拟合。

池化层的常见操作包含以下几种:最大值池化,均值池化,随机池化,中值池化,组合池化等。

(1)最大池化层

 最大值池化的优点在于它能学习到图像的边缘和纹理结构。但是,自ResNet之后,池化层在分类网络中应用逐渐变少,往往采用stride=2的卷积替代最大值池化层。

(2)均值池化层

 均值池化的优点在于可以减小估计均值的偏移,提升模型的鲁棒性。

全连接层

全连接层的作用是什么? 全连接层的作用是什么? - 知乎

(1)全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用

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

        在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽(注1)。

        注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”的卷积层操作。

        注2:卷积操作实现全连接层的原因

        网络需要输入固定大小图像的主要原因就是有全连接层,当把全连接层替换成了卷积层后,就可以不限制输入图像的大小,一次性输入网络即可获得一张图片所有位置的检测目标概率,形成一幅 heatmap。

        固定大小是说送入网络训练的每一个数据大小需要一样,可以全都是 227*227,也可以全都是 224*224,只要统一就行。
        这样要求的原因是全连接层与前一层连接时,参数数量需要预先设定好。不同于卷积操作,卷积核的参数数量就是卷积核大小,它与前一层的 feature map 多大没有关系,但是全连接层的参数是随着前一层 feature map 的大小变化而变化的,当输入图像大小不同,全连接层之前得到的 feature map 大小也不一样,那么全连接层的参数数量就不能确定,所以必须固定输入图像的大小。

(2)将学到的“分布式特征表示”映射到样本标记空间的作用

        全连接层把特征整合到一起,输出为一个值,大大减少特征位置对分类器带来的影响;

        一般情况下,全连接层都是两层以上,因为需要解决非线性问题;

        

         影响参数:1)全连接层总层数(宽度);2)单个全连接层的神经元数目(长度);3)激活函数

        宽度增加 / 长度增加:模型复杂度增加,学习能力强;

        过大:导致过拟合,以及运算效率不好; 

(3)FC可一定程度保留模型复杂度(可用于微调和迁移)

        不含FC的网络微调后的结果要差于含FC的网络。因此FC可视作模型表示能力的“防火墙”,特别是在源域与目标域差异较大的情况下,FC可保持较大的模型capacity从而保证模型表示能力的迁移。(冗余的参数并不一无是处。)

(4)卷积神经网络中全连接层的设计,属于人们在传统特征提取+分类思维下的一种"迁移学习"思想

卷积神经网络尚未火热的年代,人们使用haar/lbp + adaboost级连的组合方式检测人脸,hog+svm的组合方式检测行人。这种传统的目标检测方法一个认知上的优势就是: 模块的功能明确,划分得很清晰,符合人们的理解方式。其中,haar,lbp,hog等手工设计的特征提取算子用于提取特征,adaboost,svm用于对提取的特征分类。

而卷积神经网络中conv+relu(早期为sigmoid)+pooling(以下称三剑客)的组合,不仅可以替代手工设计特征算子的繁琐,而且局部感受野+权值共享的设计思想也能避免全连接网络中的种种弊端。此时人们将三剑客的组合视为特征提取的过程,如果按照早期人们特征提取+分类的设计思路,那么分类使用全连接的设计方式,就可以刚好实现了一个end-to-end的架构,也即早起卷积神经网络的原型

ResNet

(二十七)通俗易懂理解——Resnet残差网络 - 知乎 (zhihu.com)

1.产生原因:

随着网络深度的不断增大,所引入的激活函数也越来越多,数据被映射到更加离散的空间,此时已经难以让数据回到原点(恒等变换)。这就是网络的退化现象。

退化现象让我们对非线性转换进行反思,非线性转换极大的提高了数据分类能力,但是,随着网络的深度不断的加大,我们在非线性转换方面已经走的太远,竟然无法实现线性转换。显然,在神经网络中增加线性转换分支成为很好的选择,于是,ResNet团队在ResNet模块中增加了快捷连接分支,在线性转换和非线性转换之间寻求一个平衡。

2. 网络架构

 (a)快捷连接,弱化梯度消失问题;

(b)降采样的构建块,减少参数;

        常见于ResNet50/101/152(右图),一般称整个结构为一个”building block“。其中右图又称为”bottleneck design”,目的一目了然,就是为了降低参数的数目,第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。

3. 细节问题

如图1所示,如果F(x)和x的channel个数不同怎么办,因为F(x)和x是按照channel维度相加的,channel不同怎么相加呢?

他们的channel个数一致,所以采用计算方式:

虚线的的Connection部分(”第一个绿色矩形和第三个绿色矩形“)分别是3x3x64和3x3x128的卷积操作,他们的channel个数不同(64和128),所以采用计算方式:

其中W是卷积操作(用128个(3x3)x64的filter),用来调整x的channel维度的;

4. resnet50 和 resnet101

        首先我们看一下表2,上面一共提出了5中深度的ResNet,分别是18,34,50,101和152,首先看表2最左侧,我们发现所有的网络都分成5部分,分别是:conv1,conv2_x,conv3_x,conv4_x,conv5_x,之后的其他论文也会专门用这个称呼指代ResNet50或者101的每部分。

        拿101-layer那列,我们先看看101-layer是不是真的是101层网络,首先有个输入7x7x64的卷积,然后经过3 + 4 + 23 + 3 = 33个building block,每个block为3层,所以有33 x 3 = 99层,最后有个fc层(用于分类),所以1 + 99 + 1 = 101层,确实有101层网络;

        注:101层网络仅仅指卷积或者全连接层,而激活层或者Pooling层并没有计算在内;

        这里我们关注50-layer和101-layer这两列,可以发现,它们唯一的不同在于conv4_x,ResNet50有6个block,而ResNet101有23个block,查了17个block,也就是17 x 3 = 51层。

U-Net

它是在FCN的基础上构建,它的U型结构解决了FCN无法上下文的信息和位置信息的弊端。

  • 编码:前半部分是编码, 它的作用是特征提取(获取局部特征,并做图片级分类),得到抽象语义特征由两个3x3的卷积层(RELU)再加上一个2x2的maxpooling层组成一个下采样的模块,一共经过4次这样的操作
  • 解码:利用前面编码的抽象特征来恢复到原图尺寸的过程, 最终得到分割结果(掩码图片),由一层反卷积+特征拼接concat+两个3x3的卷积层(ReLU)反复构成,一共经过4次这样的操作,与特征提取网络刚好相对应,最后接一层1*1卷积,降维处理,即将通道数降低至特定的数量,得到目标图。

卷积

(87条消息) 卷积原理:几种常用的卷积(标准卷积、深度卷积、组卷积、扩展卷积、反卷积)_chenyuping666的博客-CSDN博客

卷积运算的过程就是通过卷积核扫描输入矩阵的元素,将卷积核和扫描对应的元素相乘再相加,得到一个输出,通过不断地滑动,得到最后的输出矩阵。其运算过程如下:

在上边的例子中,采用3×3的卷积核卷积5×5的输入特征矩阵。从上述运算可以看出两个不足。

  • 第一个是通过卷积后输出矩阵相对于输入矩阵变小了,当参与多层的神经网络时,矩阵会变得越来越小。这对于人信息提取是不利的。
  • 第二个是中间元素参与运算的次数要远大于周围元素,尤其是当输入矩阵是高维时,差距会更大,因此在计算中我们会丢失掉一部分的边缘信息。

为了解决以上两点问题,我们在输入矩阵的周围进行填充。

如果输入矩阵的大小是n×n,卷积核的大小是f×f,则输出矩阵的大小为 (n-f+1)×(n-f+1)。

如上图所示,我们在输入矩阵的周边像素周围都填充一个元素,用p表示填充数量,图中展示的填充p为1。

用p表示填充数量,则输出矩阵的大小为(n+2p-f+1)×(n+2p-f+1)

感受野

感受野(Receptive Field)的理解与计算 - 知乎 (zhihu.com)

定义:

在卷积神经网络中,感受野(Receptive Field)是指特征图上的某个点能看到的输入图像的区域,即特征图上的点是由输入图像中感受野大小区域的计算得到的

神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次。

二、计算

卷积层(conv)和池化层(pooling)都会影响感受野,而激活函数层通常对于感受野没有影响,当前层的步长并不影响当前层的感受野,感受野和填补(padding)没有关系, 计算当层感受野的公式如下:

 下面来练练手,以AlexNet举个例子

深度可分离卷积

深度可分离卷积 - 知乎 (zhihu.com)

一些轻量级的网络,如mobilenet中,会有深度可分离卷积depthwise separable convolution,由depthwise(DW)和pointwise(PW)两个部分结合起来,用来提取特征feature map

相比常规的卷积操作,其参数数量和运算成本比较低

常规卷积操作

对于一张5×5像素、三通道(shape为5×5×3),经过3×3卷积核的卷积层(假设输出通道数为4,则卷积核shape为3×3×3×4,最终输出4个Feature Map,如果有same padding则尺寸与输入层相同(5×5),如果没有则为尺寸变为3×3

卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。因此卷积层的参数数量可以用如下公式来计算:

N_std = 4 × 3 × 3 × 3 = 108   (k \times k \times c_{in} \times c_{out})

深度可分离卷积

  • 逐通道卷积

Depthwise Convolution的一个卷积核负责一个通道,一个通道只被一个卷积核卷积

一张5×5像素、三通道彩色输入图片(shape为5×5×3),Depthwise Convolution首先经过第一次卷积运算,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5),如下图所示。

其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下:

N_depthwise = 3 × 3 × 3 = 27   ( k \times k \times c_{in}

Depthwise Convolution完成后的Feature map数量与输入层的通道数相同,无法扩展Feature map。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的feature信息。因此需要Pointwise Convolution来将这些Feature map进行组合生成新的Feature map

  • 逐点卷积

Pointwise Convolution的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个输出Feature map

由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为:

N_pointwise = 1 × 1 × 3 × 4 = 12  (1 \times 1 \times c_{in} \times c_{out})

经过Pointwise Convolution之后,同样输出了4张Feature map,与常规卷积的输出维度相同

参数对比

回顾一下,常规卷积的参数个数为:
N_std = 4 × 3 × 3 × 3 = 108

Separable Convolution的参数由两部分相加得到:
N_depthwise = 3 × 3 × 3 = 27
N_pointwise = 1 × 1 × 3 × 4 = 12
N_separable = N_depthwise + N_pointwise = 39

相同的输入,同样是得到4张Feature map,Separable Convolution的参数个数是常规卷积的约1/3 (1/k)。因此,在参数量相同的前提下,采用Separable Convolution的神经网络层数可以做的更深。

空洞卷积

3D视觉开发者社区 (orbbec.com.cn)

(1)产生原因:

空洞卷积最初的提出是为了解决图像分割的问题而提出的,常见的图像分割算法通常使用池化层和卷积层来增加感受野(Receptive Filed),同时也缩小了特征图尺寸(resolution),然后再利用上采样还原图像尺寸,特征图缩小再放大的过程造成了精度上的损失,因此需要一种操作可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样操作,在这种需求下,空洞卷积就诞生了

 (2)原理:

 与正常的卷积不同的是,空洞卷积引入了一个称为 “扩张率(dilation rate)”的超参数(hyper-parameter),该参数定义了卷积核处理数据时各值的间距。扩张率中文也叫空洞数(Hole Size)。

过拟合

现象:模型在验证集合上和训练集合上表现都很好,而在测试集合上变现很差。

判断方法:观察训练的曲现图

防止过拟合的方法:

神经网络:加dropout,batch normalization
基于树的模型:限制深度,加入 正则化项
设置提前终止条件
增加数据集
对数据集进行增强处理(augmentation)

Transformer

十分钟理解Transformer - 知乎 (zhihu.com)

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值