卷积神经网络网络详解(上)

1. 什么是卷积神经网络

卷积神经网络是一种带有卷积结构的深度神经网络,卷积结构可以减少深层网络占用的内存量,其三个关键的操作,其一是局部感受野,其二是权值共享,其三是pooling层,有效的减少了网络的参数个数,缓解了模型的过拟合问题。

1.1 网络结构

卷积神经网络整体架构:**卷积神经网络是一种多层的监督学习神经网络,隐含层的卷积层和池采样层是实现卷积神经网络特征提取功能的核心模块。该网络模型通过采用梯度下降法最小化损失函数对网络中的权重参数逐层反向调节,通过频繁的迭代训练提高网络的精度。卷积神经网络的低隐层是由卷积层和最大池采样层交替组成,高层是全连接层对应传统多层感知器的隐含层和逻辑回归分类器。第一个全连接层的输入是由卷积层和子采样层进行特征提取得到的特征图像。最后一层输出层是一个分类器,可以采用逻辑回归,Softmax回归甚至是支持向量机对输入图像进行分类。
卷积神经网络结构包括:卷积层,降采样层,全链接层。每一层有多个特征图,每个特征图通过一种卷积滤波器提取输入的一种特征,每个特征图有多个神经元。

输入图像统计和滤波器进行卷积之后,提取该局部特征,一旦该局部特征被提取出来之后,它与其他特征的位置关系也随之确定下来了,每个神经元的输入和前一层的局部感受野相连,每个特征提取层都紧跟一个用来求局部平均与二次提取的计算层,也叫特征映射层,网络的每个计算层由多个特征映射平面组成,平面上所有的神经元的权重相等。通常将输入层到隐藏层的映射称为一个特征映射,也就是通过卷积层得到特征提取层,经过pooling之后得到特征映射层。

1.2 局部感受野与权值共享

卷积神经网络的核心思想就是局部感受野、是权值共享和pooling层,以此来达到简化网络参数并使得网络具有一定程度的位移、尺度、缩放、非线性形变稳定性。

  • 局部感受野:由于图像的空间联系是局部的,每个神经元不需要对全部的图像做感受,只需要感受局部特征即可,然后在更高层将这些感受得到的不同的局部神经元综合起来就可以得到全局的信息了,这样可以减少连接的数目。
  • 权值共享:不同神经元之间的参数共享可以减少需要求解的参数,使用多种滤波器去卷积图像就会得到多种特征映射。权值共享其实就是对图像用同样的卷积核进行卷积操作,也就意味着第一个隐藏层的所有神经元所能检测到处于图像不同位置的完全相同的特征。其主要的能力就能检测到不同位置的同一类型特征,也就是卷积网络能很好的适应图像的小范围的平移性,即有较好的平移不变性(比如将输入图像的猫的位置移动之后,同样能够检测到猫的图像)

1.3 卷积层、下采样层、全连接层

卷积层:通过卷积运算我们可以提取出图像的特征,通过卷积运算可以使得原始信号的某些特征增强,并且降低噪声。用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map了),然后加一个偏置bx,得到卷积层Cx

下采样层:因为对图像进行下采样,可以减少数据处理量同时保留有用信息,采样可以混淆特征的具体位置,因为某个特征找出来之后,它的位置已经不重要了,我们只需要这个特征和其他特征的相对位置,可以应对形变和扭曲带来的同类物体的变化。每邻域四个像素求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个sigmoid激活函数,产生一个大概缩小四倍的特征映射图Sx+1。

全连接层:采用softmax全连接,得到的激活值即卷积神经网络提取到的图片特征。

卷积神经网络相比一般神经网络在图像理解中的优点:

  • 网络结构能够较好的适应图像的结构
  • 同时进行特征提取和分类,使得特征提取有助于特征分类
  • 权值共享可以减少网络的训练参数,使得神经网络结构变得简单,适应性更强

2.利用CNN实现图像识别的任务

     输入层读入经过规则化(统一大小)的图像,每一层的每个神经元将前一层的一组小的局部近邻的单元作为输入,也就是局部感受野和权值共享,神经元抽取一些基本的视觉特征,比如边缘、角点等,这些特征之后会被更高层的神经元所使用。

      卷积神经网络通过卷积操作获得特征图,每个位置,来自不同特征图的单元得到各自不同类型的特征。一个卷积层中通常包含多个具有不同权值向量的特征图,使得能够保留图像更丰富的特征。

       卷积层后边会连接池化层进行降采样操作,一方面可以降低图像的分辨率,减少参数量,另一方面可以获得平移和形变的鲁棒性。卷积层和池化层的交替分布,使得特征图的数目逐步增多,而且分辨率逐渐降低,是一个双金字塔结构。

3.CNN的求解

CNN在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。卷积网络执行的是监督训练,所以其样本集是由形如:**(输入向量,理想输出向量)**的向量对构成的。所有这些向量对,都应该是来源于网络即将模拟系统的实际“运行”结构,它们可以是从实际运行系统中采集来。

3.1 参数初始化

在开始训练前,所有的权都应该用一些不同的随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;“不同”用来保证网络可以正常地学习。实际上,如果用相同的数去初始化权矩阵,则网络无学习能力。

3.2 训练过程

 第一阶段:前向传播阶段

  • 从样本集中取一个样本,输入网络

  • 计算相应的实际输出;在此阶段信息从输入层经过逐级的变换,传送到输出层,这个过程也是网络在完成训练之后正常执行时执行的过程 

第二阶段:后向传播阶段

  • 计算实际输出与相应的理想输出的差

  • 按照极小化误差的方法调整权值矩阵

网络的训练过程如下: 

  1. 选定训练组,从样本集中分别随机地寻求N个样本作为训练组;
  2. 将各权值、阈值,置成小的接近于0的随机值,并初始化精度控制参数和学习率;
  3. 从训练组中取一个输入模式加到网络,并给出它的目标输出向量;
  4. 计算出中间层输出向量,计算出网络的实际输出向量;
  5. 将输出向量中的元素与目标向量中的元素进行比较,计算出输出误差;对于中间层的隐单元也需要计算出误差;
  6. 依次计算出各权值的调整量和阈值的调整量;
  7. 调整权值和调整阈值;
  8. 当经历M后,判断指标是否满足精度要求,如果不满足,则返回(3),继续迭代;如果满足就进入下一步;
  9. 训练结束,将权值和阈值保存在文件中。这时可以认为各个权值已经达到稳定,分类器已经形成。再一次进行训练,直接从文件导出权值和阈值进行训练,不需要进行初始化。

3.3 注意事项

  • 数据集的大小和分块

数据驱动的模型一般依赖于数据集的大小,CNN和其他经验模型一样,能够适用于任意大小的数据集,但用于训练的数据集应该足够大, 能够覆盖问题域中所有已知可能出现的问题,设计CNN的时候,数据集应该包含三个子集:训练集、测试集、验证集

训练集:包含问题域中的所有数据,并在训练阶段用来调整网络的权重

测试集:在训练的过程中用于测试网络对训练集中未出现的数据的分类性能,根据网络在测试集上的性能情况,网络的结构可能需要作出调整,或者增加训练循环次数。

验证集:验证集中的数据统一应该包含在测试集和训练集中没有出现过的数据,用于在网络确定之后能够更好的测试和衡量网络的性能

一般数据集中65%的用于训练,25%的用于测试,10%用于验证

  • 数据预处理

为了加速训练算法的收敛速度,一般都会采用一些数据预处理技术,其中包括:去除噪声、输入数据降维、删除无关数据等。数据的平衡化在分类问题中异常重要,一般认为训练集中的数据应该相对于标签类别近似于平均分布,也就是每一个类别标签所对应的数据集在训练集中是基本相等的,以避免网络过于倾向于表现某些分类的特点。为了平衡数据集,应该移除一些过度富余的分类中的数据,并相应补充一些相对样例稀少的分类中的数据。还有一个方法就是复制一部分这些样例稀少分类中的数据,并在这些数据中加入随机噪声。

  • 数据规则化

将数据规则化到统一的区间(如[0,1])中具有很重要的优点:防止数据中存在较大数值的数据造成数值较小的数据对于训练效果减弱甚至无效化,一个常用的方法是将输入和输出数据按比例调整到一个和激活函数相对应的区间。

  • 网络权值初始化

CNN的初始化主要是初始化卷积层和输出层的卷积核(权值)和偏置。网络权值初始化就是将网络中的所有连接权重赋予一个初始值,如果初始权重向量处在误差曲面的一个相对平缓的区域的时候,网络训练的收敛速度可能会很缓慢,一般情况下网络的连接权重和阈值被初始化在一个具有0均值的相对小的区间内均匀分布。

  • BP算法的学习速率

如果学习速率选取的较大,则会在训练过程中较大幅度的调整权值w,从而加快网络的训练速度,但是这和造成网络在误差曲面上搜索过程中频繁抖动,且有可能使得训练过程不能收敛。如果学习速率选取的较小,能够稳定的使得网络逼近于全局最优点,但也可能陷入一些局部最优,并且参数更新速度较慢。自适应学习率设定有较好的效果。

  • 收敛条件

有几个条件可以作为停止训练的判定条件,训练误差、误差梯度、交叉验证等。一般来说,训练集的误差会随着网络训练的进行而逐步降低。

  • 训练方式

训练样例可以有两种基本的方式提供给网络训练使用,也可以是两者的结合:逐个样例训练(EET)、批量样例训练(BT)。在EET中,先将第一个样例提供给网络,然后开始应用BP算法训练网络,直到训练误差降低到一个可以接受的范围,或者进行了指定步骤的训练次数。然后再将第二个样例提供给网络训练。EET的优点是相对于BT只需要很少的存储空间,并且有更好的随机搜索能力,防止训练过程陷入局部最小区域。EET的缺点是如果网络接收到的第一个样例就是劣质(有可能是噪音数据或者特征不明显)的数据,可能使得网络训练过程朝着全局误差最小化的反方向进行搜索。相对的,BT方法是在所有训练样例都经过网络传播后才更新一次权值,因此每一次学习周期就包含了所有的训练样例数据。BT方法的缺点也很明显,需要大量的存储空间,而且相比EET更容易陷入局部最小区域。而随机训练(ST)则是相对于EET和BT一种折衷的方法,ST和EET一样也是一次只接受一个训练样例,但只进行一次BP算法并更新权值,然后接受下一个样例重复同样的步骤计算并更新权值,并且在接受训练集最后一个样例后,重新回到第一个样例进行计算。ST和EET相比,保留了随机搜索的能力,同时又避免了训练样例中最开始几个样例如果出现劣质数据对训练过程的过度不良影响。

4.LeNet-5结构分析

LeNet-5共包含8层

  • C1层是一个卷积层,由6个特征图Feature Map构成。特征图中每个神经元与输入为5*5的邻域相连。特征图的大小为28*28,这样能防止输入的连接掉到边界之外(32-5+1=28)。C1有156个可训练参数(每个滤波器5*5=25个unit参数和一个bias参数,一共6个滤波器,共(5*5+1)6=156个参数),共156(28*28)=122,304个连接。
  • S2层是一个下采样层,有6个14*14的特征图。特征图中的每个单元与C1中相对应特征图的2*2邻域相连接。S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。每个单元的22感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。S2层有12(6(1+1)=12)个可训练参数和5880(14*14(2*2+1)*6=5880)个连接。
  • C3层也是一个卷积层,它同样通过5x5的卷积核去卷积层S2,然后得到的特征map就只有10x10个神经元,但是它有16种不同的卷积核,所以就存在16个特征map了。 C3中每个特征图由S2中所有6个或者几个特征map组合而成。为什么不把S2中的每个特征图连接到每个C3的特征图呢?原因有2点。第一,不完全的连接机制将连接的数量保持在合理的范围内。第二,也是最重要的,其破坏了网络的对称性。由于不同的特征图有不同的输入,所以迫使他们抽取不同的特征(希望是互补的)。

例如,存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。这样C3层有1516(6*(325+1)+6(425+1)+3(425+1)+(256+1)=1516)个可训练参数和151600(10*10*1516=151600)个连接。

  • S4层是一个下采样层,由16个55大小的特征图构成。特征图中的每个单元与C3中相应特征图的22邻域相连接,跟C1和S2之间的连接一样。S4层有32个可训练参数(每个特征图1个因子和一个偏置16*(1+1)=32)和2000(16*(2*2+1)5*5=2000)个连接。
  • C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个单元的55邻域相连。由于S4层特征图的大小也为55(同滤波器一样),故C5特征图的大小为11(5-5+1=1):这构成了S4和C5之间的全连接。之所以仍将C5标示为卷积层而非全相联层,是因为如果LeNet-5的输入变大,而其他的保持不变,那么此时特征图的维数就会比11大。C5层有48120(120*(1655+1)=48120由于与全部16个单元相连,故只加一个偏置)个可训练连接。
  • F6层有84个单元(之所以选这个数字的原因来自于输出层的设计),与C5层全相连。有10164(84*(120*(1*1)+1)=10164)个可训练参数。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。然后将其传递给sigmoid函数产生单元i的一个状态。
  • 最后,输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,每个有84个输入。

1、输入层:N个32x32的训练样本

输入图像大小为32x32,比MNIST数据库中的字母大,这样做的原因是希望潜在的明显特征,如笔画断点或角点能够出现在最高层特征监测子感受野的中心。

2、C1层

  • 输入图像大小:32x32
  • 卷积核大小:5x5
  • 卷积核个数:6
  • 输出特征图数量:6
  • 输出特征图大小:28x28(32-5+1)
  • 神经元数量:4707(28x28x6)
  • 连接数:122304((28x28x5x5x6)+(28x28x6))
  • 可训练参数:156(5x5x6+6,权值+偏置)

3、S2层

  • 输入图像大小:(28x28x6)
  • 卷积核大小:2x2
  • 卷积核个数:6
  • 输出特征图数量:6
  • 输出特征图大小:14x14(28/2,28/2)
  • 神经元数量:1176(14x14x6)
  • 连接数:5880((2x2x14x14x6)+(14x14x6))
  • 可训练参数:12(1x6+6,权值+偏置)

备注:S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid函数计算。可训练系数和偏置控制着sigmoid函数的非线性程度。

如果系数比较小,那么运算近似于线性运算,下采样相当于模糊图像。

如果系数比较大,根据偏置的大小下采样可以被看成是有噪声的“或”运算或者有噪声的“与”运算。

每个单元的2*2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。

4、C3层

  • 输入图像大小:(14x14x6)
  • 卷积核大小:5x5
  • 卷积核个数:16
  • 输出特征图数量:16
  • 输出特征图大小:10x10(14-5+1)
  • 神经元数量:1600(10x10x16)
  • 连接数:151600(1516x10x10)
  • 可训练参数:1516

备注:C3层也是一个卷积层,通过5x5的卷积核去卷积S2层,然后得到的特征图map就有10x10个神经元,但是有16种不同的卷积核,就存在16个不同的特征map。

C3中每个特征图由S2中的所有6个或几个特征图组合而成,为什么不把S2中的所有特征图都连接到C3的特征图呢:

第一,不完全的连接机制将连接的数量保持在合理的范围内
第二,也是最重要的,这样一来就可以破坏网络的对称性,由于不同的特征图有不同的输入,所以迫使他们抽取不同的特征。
5、S4层

  • 输入图像大小:(10x10x16)
  • 卷积核大小:2x2
  • 卷积核个数:16
  • 输出特征图数量:16
  • 输出特征图大小:5x5x16
  • 神经元数量:400(5x5x16)
  • 连接数:2000((2x2x5x5x16)+(5x5x16))
  • 可训练参数:32((1+1)x16)

备注:S4是一个下采样层,由16个5x5大小的特征图构成,特征图的每个单元与C3中相应的特征图的2x2邻域相连,S4层有32个可训练参数(每个特征图1个因子和一个偏置)和2000个连接。

6、C5层

  • 输入图像大小:5x5x16
  • 卷积核大小:5x5
  • 卷积核个数:120
  • 输出特征图数量:120
  • 输出特征图大小:1X1(5-5+1)
  • 神经元数量:120(1x120)
  • 连接数:48120(5x5x16x120x1+120x1)
  • 可训练参数:48120(5x5x16x120+120)

备注:C5层是一个卷积层,有120个特征图,每个单元与S4层的全部16个单元的5x5邻域相连,构成了S4和C5的全连接,之所以仍将C5标识为卷积层而非全连接层是因为如果LeNet-5的输入变大,而其他的保持不变,那么此时特征图的维数就会比1x1大。

7、F6层

  • 输入图像大小:(1x1x120)
  • 卷积核大小:1x1
  • 卷积核个数:84
  • 输出特征图数量:1
  • 输出特征图大小:84
  • 神经元数量:84
  • 连接数:10164(120x84+84)
  • 可训练参数:10164(120x84+84)

备注:F6有84个单元(之所以选择84是源于输出层的设计),与C5层相连,有10164个可训练参数,类似经典的全连接神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置,之后将其传递给sigmoid函数产生一个单元i的状态。

8、output层

  • 输入图像大小:1x84
  • 输出特征图数量:1x10


5.AlexNet

 上图所示是caffe中alexnet的网络结构,上图采用是两台GPU服务器,所有会看到两个流程图。下边把AlexNet的网络结构示意一下:

 架构:

因为使用了两台GPU训练,因而有两股“流”。使用两台GPU训练的原因是计算量太大,只能拆开来。

要点:

  • 数据集:ImageNet数据集,含1500多万个带标记的图像,超过2.2万个类别
  • 激活函数:ReLU(训练速度快,一定程度上减小了梯度消失的问题)
  • 数据增强:平移、镜像、缩放等
  • 过拟合:dropout
  • 如何训练:批处理梯度下降训练模型,注明了动量衰减值和权值衰减值
  • 训练时间:使用两台GTX 580 GPU,训练了5到6天

 

 AlexNet网络结构:

其实AlexNet的结构很简单,只是LeNet的放大版,输入是一个224x224的图像,经过5个卷积层,3个全连接层(包含一个分类层),达到了最后的标签空间。

AlexNet学习出来的特征是什么样子的?

  • 第一层:都是一些填充的块状物和边界等特征
  • 中间层:学习一些纹理特征
  • 更高层:接近于分类器的层级,可以明显的看到物体的形状特征
  • 最后一层:分类层,完全是物体的不同的姿态,根据不同的物体展现出不同姿态的特征了。

即无论对什么物体,学习过程都是:边缘→ 部分→整体
该方法训练了一个端到端的卷积神经网络实现对图像特征提取和分类,网络结构共7层,包含5层卷积层和2层全连接层。

 AlexNet包含了6亿三千万个连接,6000万个参数和65万个神经元,拥有5个卷积层,其中3个卷积层后面连接了最大池化层,最后还有3个全连接层。

训练技巧:

dropout防止过拟合,提高泛化能力

      训练阶段使用了Dropout技巧随机忽略一部分神经元,缓解了神经网络的过拟合现象,和防止对网络参数优化时陷入局部最优的问题,Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。该网络是利用Dropout在训练过程中将输入层和中间层的一些神经元随机置零,使得训练过程收敛的更慢,但得到的网络模型更加具有鲁棒性。

数据扩充 / 数据增强:防止过拟合

       通过图像平移、水平翻转、调整图像灰度等方法扩充样本训练集,扩充样本训练集,使得训练得到的网络对局部平移、旋转、光照变化具有一定的不变性,数据经过扩充以后可以达到减轻过拟合并提升泛化能力。进行预测时,则是取图像的四个角加上中间共5个位置,并进行左右翻转,一共获得10张图像,对它们进行预测并对10次结果求均值。

  • 水平翻转:

 

  •  随机裁剪、平移旋转:

  •  颜色变换:

颜色变换

池化方式:

AlexNet全部使用最大池化的方式,避免了平均池化所带来的模糊化的效果,并且步长<池化核的大小,这样一来池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。

激活函数:ReLU

Relu函数:f(x)=max(0,x)。采用非饱和线性单元——ReLU代替传统的经常使用的tanh和sigmoid函数,加速了网络训练的速度,降低了计算的复杂度,对各种干扰更加具有鲁棒性,并且在一定程度上避免了梯度消失问题。

优势:

ReLU本质上是分段线性模型,前向计算非常简单,无需指数之类操作;
ReLU的偏导也很简单,反向传播梯度,无需指数或者除法之类操作;
ReLU不容易发生梯度发散问题,Tanh和Logistic激活函数在两端的时候导数容易趋近于零,多级连乘后梯度更加约等于0;
ReLU关闭了右边,从而会使得很多的隐层输出为0,即网络变得稀疏,起到了类似L1的正则化作用,可以在一定程度上缓解过拟合。
缺点:

当然,ReLU也是有缺点的,比如左边全部关了很容易导致某些隐藏节点永无翻身之日,所以后来又出现pReLU、random ReLU等改进,而且ReLU会很容易改变数据的分布,因此ReLU后加Batch Normalization也是常用的改进的方法。
提出了LRN层(Local Response Normalization):

       LRN即Local Response Normalization,局部响应归一化处理,实际就是利用临近的数据做归一化,该策略贡献了1.2%的准确率,该技术是深度学习训练时的一种提高准确度的技术方法,LRN一般是在激活、池化后进行的一种处理方法。LRN是对局部神经元的活动创建竞争机制,使得其中响应较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

为什么输入数据需要归一化(Normalized Data)?

     归一化后有什么好处呢?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。

对于深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。
 

分布式计算:

AlexNet使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算,AlexNet使用两个GTX580的GPU进行训练,单个GTX580只有3GB的显存,限制了可训练网络的最大规模,因此将其分布在两个GPU上,在每个GPU的显存中储存一般的神经元参数。

有多少层需要训练?

整个AlexNet有8个需要训练参数的层,不包括池化层和LRN层,前5层为卷积层,后3层为全连接层,AlexNet的最后一层是由1000类输出的Softmax层用作分类,LRN层出现在第一个和第二个卷积层之后,最大池化层出现在两个LRN之后和最后一个卷积层之后。

每层的超参数、参数量、计算量:
 

     虽然前几个卷积层的计算量很大,但是参数量都很小,在1M左右甚至更小。只占AlexNet总参数量的很小一部分,这就是卷积层的作用,可以通过较小的参数量有效的提取特征。

为什么使用多层全连接:

  • 全连接层在CNN中起到分类器的作用,前面的卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间,全连接层是将学到的特征映射映射到样本标记空间,就是矩阵乘法,再加上激活函数的非线性映射,多层全连接层理论上可以模拟任何非线性变换。但缺点也很明显: 无法保持空间结构。
  • 由于全连接网络的冗余(占整个我拿过来参数的80%),近期一些好的网络模型使用全局平均池化(GAP)取代FC来融合学到的深度特征,最后使用softmax等损失函数作为网络目标函数来指导学习过程,用GAP替代FC的网络通常有较好的预测性能。
  • 全连接的一个作用是维度变换,尤其是可以把高维变到低维,同时把有用的信息保留下来。全连接另一个作用是隐含语义的表达(embedding),把原始特征映射到各个隐语义节点(hidden node)。对于最后一层全连接而言,就是分类的显示表达。不同channel同一位置上的全连接等价与1x1的卷积。N个节点的全连接可近似为N个模板卷积后的均值池化(GAP)。

 GAP:假如最后一层的数据是10个66的特征图,global average pooling是将每个特征图计算所有像素点的均值,输出一个数据值,10个特征图就会输出10个值,组成一个110的特征向量。

  • 用特征图直接表示属于某类的置信率,比如有10个输出,就在最后输出10个特征图,每个特征图的值加起来求均值,然后将均值作为其属于某类的置信值,再输入softmax中,效果较好。
  • 因为FC的参数众多,这么做就减少了参数的数量(在最近比较火的模型压缩中,这个优势可以很好的压缩模型的大小)。
  • 因为减少了参数的数量,可以很好的减轻过拟合的发生。

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值