vgg卷积神经网络的简单介绍

本篇文章给大家谈谈vgg卷积神经网络,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

经典深度神经网络架构解析 - VGG,ResNet,Inception

深度神经网络对于问题的抽象建立在我们可以通过合适的神经网络架构构造一个通用的函数逼近,使得我们可以从输入样本空间映射到目标样本空间。这一听起来简单的任务在实际构建过程中需要耗费大量的计算和时间以完成模型试验和迭代。而由于迁移学习的可行性,使得我们可以借助已有的在特定分类任务中表现出色的架构来完成类似甚至看起来完全不相关的任务。在学习的过程中,阅读了一些这些经皮饥典的网络架构的相关论文,在此做一个记录。

VGG Net 与之前的经典网络结构相比最突出的特征是大量的使用 3x3 (部分架构中还采用了 1x1 )的小卷积核,并且采用 same padding 来维持卷积前后的 w 和 h,Feature map 的缩放完全交给 2x2 的 max pooling 层来完成,此后基本上所有的卷积神经网络的卷积核都采用 3x3 的尺寸。也正因为采用这个简单的、小的卷积核结构,才使得 VGG 成为同时代网络中最经典的深度神经网络。

在深度神经网络中采用小卷积核的原因:小卷积核通过多层叠加后可以在输入层取得与大卷积核同等规模的感受野,且由于网络层次的增加会同步增加网络的容量 model capacity 和复杂度 model complexity,进一步地,通过叠加多个层次的卷积核还可以减少模型的参数:例如对于通道数为 C 的输入和输出来说,采用 7x7 的卷积核需要的参数是 7x7xCxC = 49C 2 个,而通过叠加 3 层 3x3 的卷积核所需要的参数数量为 3 x [3x3xCxC] = 27C 2 个。

在 VGG 的架构中,作者采用 1x1 卷积的主要目的在于增加网络中的非线性,采用与原有输入特征相同通道数量的 1x1 的卷积结构,执行卷积前后不改变特征的表达的数量,但根据作者的经验在同等架构下带有 1x1 结构的网络表现不如 3x3 的网络,因此在后续广为沿用的 VGG 架构都是单纯的 3x3 网络。

一个值得注意的细节是,为了使得网络具有缩放不变性,作者在训练时先将全部图片缩放至 384x384 的尺寸,在此基础上随机裁剪 224x224 的图片区域作为网络的输入,最后再用经过在指定范围内进行尺寸缩放的图片进行微调。

另一个细节是作者在测试时采用了很多比较高明的技巧如 Ensemble 和 multi-crop 等方法使得测试的结果得到了一定的提升,不过这些提升一般只在竞赛中有意义,在真实的生产环境中应用很少。

ResNet 的提出是基于这样一个发现:直觉上深度神经网络应该的性能应该优于架构类似但相对层数更少的网络,但在实际情况中,随着网络层次的加深,梯度消失 Vanishing gradient 的影响愈加明显,网络的训练变得异常困难。这个现象在作者看来反应出了通过非线性激活的神经网络来构建近似恒等映射是困难的,那么我们可以反其道而行之,我们希望神经网络学习这个特定映射和恒等映射之间的差值,此时,由于给定了一个参考基准,使得整个学习的过程更加的容易,这兆扰个想法实在是精妙!

在此基础上 ResNet 网络的构建都是基于上图中基本单元构成的。

Inception 这个系列目前共有燃猜返 5 篇文章,包括:

其中第一篇是对 Inception 架构的一个简单介绍,第二篇则是在改进 Inception 网络的过程中发现了 Batch Normalization 这一被后续广泛使用的提高网络稳健性的方法,第三篇 Rethinking the Inception Architecture for Computer Vision 这一篇相比前两篇论文信息量更大,作者给了很多构建深度卷积神经网络的建议,并且在这一篇中进一步改进了下图中第一版的 Inception Module,将 5x5 的卷积核改为两个 3x3 卷积层的叠加,这是一篇十分诚意的论文,值得反复阅读。

相比于 VGG Net,Inception 网络不再是基本的卷积神经网络的堆叠,取而代之的是对不同变体的 Inception Module 进行叠加。尽管从结构上 Inception 网络更加复杂,但由于大量的使用了 1x1 的卷积核,使得参数量居然比 VGG 还要小。

在此我们除了盲目复杂化网络以外,一个不可避免的问题是:为什么 Inception 网络会有更有的表现?

一种说法是我们在构建网络的过程中很难知道如何选择合适的卷积核,而 Inception Module 使得我们可以尝试多个不同的选择,让网络自己确定哪个方式更加合适。

另一种说法来自本系列的第 5 篇文章,keras 的作者 Francois Chollet 给出的解释是,在传统的卷积神经网络中,卷积核不仅需要在宽度和高度方向上建立特征识别能力,还要在深度(通道)方向上也构建这一能力。再一次地, 知识的表示形式决定了学习的难易程度 ,我们是否可以将这两个方向的特征识别分离开来,而简化这一任务?这就是 Inception 网路及后续在此基础上衍生出的 Xception 网络的核心思想。

Lecture 9 卷积神经网络架构

首先回顾一下在数字识别领域有巨大成功的LeNet-5,该网络结构为 [CONV-POOL-CONV-POOL-FC-FC]。卷积层使用5x5的卷积核,步长为1;池化层使用2x2的区域,步长为2;后面是全连接层。如下图所示:

而2012年的 AlexNet 是第一个在ImageNet大赛上夺冠的大型CNN网络,它的结构和LeNet-5很相似,只是层数变多了——[CONV1-MAX POOL1-NORM1-CONV2-MAX POOL2-NORM2-CONV3-CONV4-CONV5-Max POOL3-FC6-FC7-FC8],共有5个卷积层、3个池化层、2个归一化层和三个全连接层。如下图所示:

之所以分成上下两个部分,是因为当时的GPU容量太小,只能用两个来完成。还有一些细节是:

AlexNet夺得ImageNet大赛2012的冠军时,将正确率几乎提高了10%,2013年的冠军是ZFNet,和AlexNet使用相同的网络架构,只是对超参数进一步调优:

这样将错误率从16.4%降低到11.7%

14年的冠亚军GoogLeNet和VGG分别有22层和19层,下面来分别介绍。

VGG 相对于AlexNet使用更小的卷积核,层数也更深。VGG有16层和19层两种。卷积核只使用3x3,步长为1,pad为1;池化区域2x2,步长为2。

那么为什么使用3x3的小卷积核呢?

下面看一下VGG-16的参数和内存使用情况:

VGG网络的一些细节是:

下面来看一下分类的第一名,GoogLeNet。

先说明 GoogLeNet 的一些细节:

“Inception”模块 是一种设计的比较好的局域网拓扑友纤结构,然后将这些模块堆叠在一起。

这种拓扑结构对来自前一层的输入,并行应用多种不同的滤波操作,比如1x1卷积、3x3卷积、5x5卷积和3x3池化。然后将所有滤波器的输出在深度上串联在一起。如下图所示:

但是这种结构的一个问题是计算复杂度大大增加。比如考虑下面的网络设置:

输入为28x28x256,而串联后的输出为28x28x672。(假设每个滤波操作都通过零填充保持输入尺寸)并且运算花费也非常高:

由于池化操作会保持原输入的深度,所以网络的输出一定会增加深度。解决办法是在进行卷积操作前添加一个“瓶颈层”,该层使用1x1卷积,目的是保留原输入空间尺寸的同时,减小深度,只要卷积核的数量小于原输入的深度即可。

使用这种结构,同样的网肆改络参数设置下,的确会减少计算量:

最终得到的输出为28x28x480。此时总运算量为:

Inception module堆叠成垂直结构,这里方便描述,将模型水平放置:

所以含参数的层总计3+18+1 = 22层。此外,橙色部分的层不计入总层数,这两块的结构都是:AveragePool 5x5+3(V) - Conv 1x1+1(S) - FC - FC - SoftmaxActivation - Output。“该相对较浅的网络在此分类任务上的强大表现表明,网络中间层产生的特征应该是非常有区别性的。 通过添加连接到这些中间层裂告判的辅助分类器,我们期望在分类器的较低阶段中鼓励区分,增加回传的梯度信号,并提供额外的正则化。 这些辅助分类器采用较小的卷积核,置于第三和第六个Inception module的输出之上。 在训练期间,它们的损失会加到折扣权重的网络总损失中(辅助分类的损失加权为0.3)。 在预测时,这些辅助网络被丢弃。”——引自原论文

从2015年开始,网络的层数爆发式的增长,15-17年的冠军都是有152层,开始了“深度革命”!

ResNet 是一种非常深的网络,使用了残差连接。细节是:

表现这么好的ResNet仅仅是因为深吗?答案是否定的,研究表明一个56层的卷积层堆叠网络训练误差和测试误差都比一个20层的网络要大,并且不是过拟合的原因,而是更深的网络优化更难。但是一个更深的模型至少能和一个较浅的模型表现一样好,如果想把一个较浅的层变成较深的层,可以用下面的方式来构建:将原来比较浅的层拷贝到较深的层中,然后添加一些等于本身的映射层。现在较深的模型可以更好的学习。

ResNet通过使用多个有参层来学习输入与输入输出之间的 残差映射( residual mapping ) ,而非像一般CNN网络(如AlexNet/VGG等)那样使用有参层来直接学习输入输出之间的 底层映射( underlying mapping) 。

若将输入设为X,将某一有参网络层映射设为H,那么以X为输入的该层的输出将为H(X)。通常的CNN网络会直接通过训练学习出参数函数H的表达式,从而直接得到 X 到 H(X) 的映射。而 残差学习 则是致力于使用多个有参网络层来学习输入到输入、输出间的残差(H(X) - X)的映射,即学习 X - (H(X) - X) ,然后加上X的 自身映射(identity mapping) 。也就是说网络的输出仍然是 H(X) - X + X = H(X),只是学习的只是 (H(X) - X),X部分直接是本身映射。

残差学习单元通过本身映射的引入在输入、输出之间建立了一条直接的关联通道,从而使得强大的有参层集中精力学习输入、输出之间的残差。一般我们用 来表示残差映射,那么残差学习单元的输出即为: 。当输入、输出通道数相同时,自然可以直接使用 X 进行相加。而当它们之间的通道数目不同时,我们就需要考虑建立一种有效的自身映射函数从而可以使得处理后的输入 X 与输出 Y 的通道数目相同即 。

当X与Y通道数目不同时,有两种自身映射方式。一种是简单地将X相对Y缺失的通道直接补零从而使其能够相对齐,另一种则是通过使用1x1的卷积来表示 Ws 映射从而使得最终输入与输出的通道一致。

实验表明使用一般意义上的有参层来直接学习残差比直接学习输入、输出间映射要容易得多(收敛速度更快),也有效得多(可通过使用更多的层来达到更高的分类精度)。比如在极端情况下,如果自身映射是最优的,那么将残差设为零比通过使用一堆非线性层进行自身映射更容易。

完整的网络结构如下:

对于ResNet-50+的网络,为提高计算效率,使用类似GoogLeNet的“瓶颈层”。像Inception模块那样通过使用1x1卷积来巧妙地缩减或扩张特征图维度从而使得3x3 卷积的卷积核数目不受上一层输入的影响,它的输出也不会影响到下一层。不过它纯是为了节省计算时间进而缩小整个模型训练所需的时间而设计的,对最终的模型精度并无影响。

ResNet的实际训练如下:

实际的训练效果为可以堆叠很多的层而不使准确率下降:152在ImageNet上, 1202层在CIFAR上。现在和预想中的一致,网络越深,训练准确率越高。横扫了2015年所有的奖项,第一次超过人类的识别率。

下面左图通过Top1准确率来比较各种网络的准确性;右图是不同网络的运算复杂度,横轴为计算量,圆圈大小表示内存占用。其中 Inception-v4是 Resnet + Inception。

图中可以看出:

还可以比较前向传播时间和功率消耗:

[img]

卷积神经网络的结构、尺寸

(摘录源于: CS231n课程笔记 )

最常见的形式就是将一些卷积层和ReLU层放在一起,其后紧跟池化层,然后重复如此直到图像在空间上被缩小到一个足够小的尺寸,在某个地方过渡成全连接层也较为常见。最后的全连接层得到输出,比如分类评分等。

换句话说,最常见的卷积神经网络结构如下:

INPUT - [[CONV - RELU]*N - POOL?]*M - [FC - RELU]*K - FC

其中*指的是重复次数,POOL?指的是一个可选的汇聚层。其中N =0,通常N=3,M=0,K=0,通常K3。例如,下面是一些常见的网络结构规律:

输入层(包含图像的)应该能被2整除很多次。常用数字包括32(比如CIFAR-10),64,96(比如STL-10)或224(比如ImageNet卷积神经网络),384和512。

最常用的设置是用用2x2感受野,步长为1。

———·———·———·———·———·———·———·———·———·———·——

(以下)直接全复制,供查阅参考。

———·———·———·———·———·———·———·———·———·———·——

下面是卷积神经网络领域中比较有名的几种结构:

VGGNet的细节: 我们进一步对 VGGNet 的细节进行分析学习。整个VGGNet中的卷积层都是以步长为1进行3x3的卷积,使用了1的零填充,汇聚层都是以步长为2进行了2x2的最大值汇聚。可以写出处理过程中每一步数据体尺寸的变化,然后对数据尺寸和整体权重的数量进行查看:

注意,大部分的内存和计算时间都被前面的卷积层占用,大部分的参数都用在后面的全连接层,这在卷洞虚亩积神经网络中是比较常见的。在这个例子中,全部参数有140M,但第一个全连接层就包含了100M的参数。

一旦对于所有这些数值的数量有了一个大略估计(包含激活数据,梯度和各种杂项),数量应该转化为以GB为计量单誉渗位。把这个值乘以4,得到原始的字节数(因为每个浮点数占用4个字节,如果是双精度浮点数那就是占用8个字节),然后多次除以1024分别得到占用内存的KB,MB,最后是GB计量。如果你的网络工作得不好,一个常用的方法是降低批尺寸(batch size),因为纳森绝大多数的内存都是被激活数据消耗掉了。

卷积神经网络

关于花书中卷积网络的笔记记录于 。

卷积神经网络(Convolutional Neural Network,CNN或ConvNet)是一种具有 局部连接、权重共享 等特性的深层前馈神经网络。卷积神经网络是受生物学上感受野的机制而提出。 感受野(Receptive Field) 主要是指听觉、视觉等神经系统中一些神经元的特性,即 神经元只接受其所支配的刺激区域内的信号 。

卷积神经网络最早是主要用来处理图像信息。如果用全连接前馈网络来处理图像时,会存在以下两个问题:

目前的卷积神经网络一般是由卷积层、汇聚层和全连接层交叉堆叠而成的前馈神经网络,使用反向传播算法进行训练。 卷积神经网络有三个结构上的特性:局部连接,权重共享以及汇聚 。这些特性使卷积神经网络具有一定程度上的平移、缩放和旋转不变性。

卷积(Convolution)是分析数学中一种重要的运算。在信号处理或图像处理中,经常使用一维物毕旦或二维卷积。

一维卷积经常用在信号处理中,用于计算信号的延迟累积。假设一个信号发生器每个时刻t 产生一个信号 ,其信息的衰减率为 ,即在 个时间步长后,信息为原来的 倍。假设 ,那么在时刻t收到的信号 为当前时刻产生的信息和以前时刻延迟信息的叠加:

我们把 称为 滤波器(Filter)或卷积核(Convolution Kernel) 。假设滤波器长度为 ,它和一个信号序列 的卷积为:

信号序列 和滤波器 的卷积定义为:

一般情况下滤波器的长度 远小于信号序列长度 ,下图给出一个一维卷积示例,滤波器为 :

二维卷积经常用在图像处理中。因为图像为一个两维结构,所以需要将一维卷积进行扩展。给定一个图像 和滤波器 ,其卷积为:

下图给出一个二维卷积示例:

注意这里的卷积运算并不是在图像中框定卷积核大小的方框并将各像素值与卷积核各个元素相乘并加和,而是先把卷积核旋转180度,再做上述运算。

在图像处理中,卷积经常作为特征提取的有效方法。一幅图像在经过卷积操作后得到结果称为 特征映射(Feature Map) 。

最上面的滤波器是常用的高斯滤波器,可以用来对图像进行 平滑去噪 ;中间和最下面的过滤器可以用来 提取边缘特征 。

在机器学习和图像处理领域,卷积的主要功能是在一个图像(或某种特征)上滑动一个卷积核(即滤波器),通过卷积操作得到一组新的特征。在计算卷积的过程中,需要进行卷积核翻转(即上文提到的旋转180度)。 在具体实现上,一般会以互相关操作来代替卷积,从而会减少一些不必要的操作或开销。

互相关(Cross-Correlation)是一个衡量两个序列相关性的函数,通常是用滑动窗口的点积计算来实现 。给定一个图像 和卷积核 ,它们的互相关为:

互相关和卷积的区别仅在于卷积核是否进行翻转。因此互相关也可以称为不翻转卷积 。当卷积罩扰核是可学习的参数时,卷积和互相关是等价的。因此,为了实现上(或描述上)的方便起见,我们用互相关来代替卷积。事实上,很多深度学习工具中卷积操作其实都是互相关操作。

在卷积的标准定义基础上,还可以引入滤波器的 滑动步长 和 零填充 来增加卷积多样性,更灵活地进行特征抽取。

滤波器的步长(Stride)是指滤波器在滑动时的时间间隔。

零填充(Zero Padding)是在输入向量两端进行补零。

假设卷积层的输入神经元个数为 ,卷积大小为 ,步长为 ,神经元两端各填补 个零,那么该卷数兆积层的神经元数量为 。

一般常用的卷积有以下三类:

因为卷积网络的训练也是基于反向传播算法,因此我们重点关注卷积的导数性质:

假设 。

, , 。函数 为一个标量函数。

则由 有:

可以看出, 关于 的偏导数为 和 的卷积 :

同理得到:

当 或 时, ,即相当于对 进行 的零填充。从而 关于 的偏导数为 和 的宽卷积 。

用互相关的“卷积”表示,即为(注意 宽卷积运算具有交换性性质 ):

在全连接前馈神经网络中,如果第 层有 个神经元,第 层有 个神经元,连接边有 个,也就是权重矩阵有 个参数。当 和 都很大时,权重矩阵的参数非常多,训练的效率会非常低。

如果采用卷积来代替全连接,第 层的净输入 为第 层活性值 和滤波器 的卷积,即:

根据卷积的定义,卷积层有两个很重要的性质:

由于局部连接和权重共享,卷积层的参数只有一个m维的权重 和1维的偏置 ,共 个参数。参数个数和神经元的数量无关。此外,第 层的神经元个数不是任意选择的,而是满足 。

卷积层的作用是提取一个局部区域的特征,不同的卷积核相当于不同的特征提取器。

特征映射(Feature Map)为一幅图像(或其它特征映射)在经过卷积提取到的特征,每个特征映射可以作为一类抽取的图像特征。 为了提高卷积网络的表示能力,可以在每一层使用多个不同的特征映射,以更好地表示图像的特征。

在输入层,特征映射就是图像本身。如果是灰度图像,就是有一个特征映射,深度 ;如果是彩色图像,分别有RGB三个颜色通道的特征映射,深度 。

不失一般性,假设一个卷积层的结构如下:

为了计算输出特征映射 ,用卷积核 分别对输入特征映射 进行卷积,然后将卷积结果相加,并加上一个标量偏置 得到卷积层的净输入 再经过非线性激活函数后得到输出特征映射 。

在输入为 ,输出为 的卷积层中,每个输出特征映射都需要 个滤波器以及一个偏置。假设每个滤波器的大小为 ,那么共需要 个参数。

汇聚层(Pooling Layer)也叫子采样层(Subsampling Layer),其作用是进行特征选择,降低特征数量,并从而减少参数数量。

常用的汇聚函数有两种:

其中 为区域 内每个神经元的激活值。

可以看出,汇聚层不但可以有效地减少神经元的数量,还可以使得网络对一些小的局部形态改变保持不变性,并拥有更大的感受野。

典型的汇聚层是将每个特征映射划分为 大小的不重叠区域,然后使用最大汇聚的方式进行下采样。汇聚层也可以看做是一个特殊的卷积层,卷积核大小为 ,步长为 ,卷积核为 函数或 函数。过大的采样区域会急剧减少神经元的数量,会造成过多的信息损失。

一个典型的卷积网络是由卷积层、汇聚层、全连接层交叉堆叠而成。

目前常用卷积网络结构如图所示,一个卷积块为连续 个卷积层和 个汇聚层( 通常设置为 , 为 或 )。一个卷积网络中可以堆叠 个连续的卷积块,然后在后面接着 个全连接层( 的取值区间比较大,比如 或者更大; 一般为 )。

目前,整个网络结构 趋向于使用更小的卷积核(比如 和 )以及更深的结构(比如层数大于50) 。此外,由于卷积的操作性越来越灵活(比如不同的步长),汇聚层的作用变得也越来越小,因此目前比较流行的卷积网络中, 汇聚层的比例也逐渐降低,趋向于全卷积网络 。

在全连接前馈神经网络中,梯度主要通过每一层的误差项 进行反向传播,并进一步计算每层参数的梯度。在卷积神经网络中,主要有两种不同功能的神经层:卷积层和汇聚层。而参数为卷积核以及偏置,因此 只需要计算卷积层中参数的梯度。

不失一般性,第 层为卷积层,第 层的输入特征映射为 ,通过卷积计算得到第 层的特征映射净输入 ,第 层的第 个特征映射净输入

由 得:

同理可得,损失函数关于第 层的第 个偏置 的偏导数为:

在卷积网络中,每层参数的梯度依赖其所在层的误差项 。

卷积层和汇聚层中,误差项的计算有所不同,因此我们分别计算其误差项。

第 层的第 个特征映射的误差项 的具体推导过程如下:

其中 为第 层使用的激活函数导数, 为上采样函数(upsampling),与汇聚层中使用的下采样操作刚好相反。如果下采样是最大汇聚(max pooling),误差项 中每个值会直接传递到上一层对应区域中的最大值所对应的神经元,该区域中其它神经元的误差项的都设为0。如果下采样是平均汇聚(meanpooling),误差项 中每个值会被平均分配到上一层对应区域中的所有神经元上。

第 层的第 个特征映射的误差项 的具体推导过程如下:

其中 为宽卷积。

LeNet-5虽然提出的时间比较早,但是是一个非常成功的神经网络模型。基于LeNet-5 的手写数字识别系统在90年代被美国很多银行使用,用来识别支票上面的手写数字。LeNet-5 的网络结构如图:

不计输入层,LeNet-5共有7层,每一层的结构为:

AlexNet是第一个现代深度卷积网络模型,其首次使用了很多现代深度卷积网络的一些技术方法,比如采用了ReLU作为非线性激活函数,使用Dropout防止过拟合,使用数据增强来提高模型准确率等。AlexNet 赢得了2012 年ImageNet 图像分类竞赛的冠军。

AlexNet的结构如图,包括5个卷积层、3个全连接层和1个softmax层。因为网络规模超出了当时的单个GPU的内存限制,AlexNet 将网络拆为两半,分别放在两个GPU上,GPU间只在某些层(比如第3层)进行通讯。

AlexNet的具体结构如下:

在卷积网络中,如何设置卷积层的卷积核大小是一个十分关键的问题。 在Inception网络中,一个卷积层包含多个不同大小的卷积操作,称为Inception模块。Inception网络是由有多个inception模块和少量的汇聚层堆叠而成 。

v1版本的Inception模块,采用了4组平行的特征抽取方式,分别为1×1、3× 3、5×5的卷积和3×3的最大汇聚。同时,为了提高计算效率,减少参数数量,Inception模块在进行3×3、5×5的卷积之前、3×3的最大汇聚之后,进行一次1×1的卷积来减少特征映射的深度。如果输入特征映射之间存在冗余信息, 1×1的卷积相当于先进行一次特征抽取 。

关于vgg卷积神经网络和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表