用于深度学习的卷积神经网络经典模型
下面详细介绍LeNet-5模型的工作原理。
LeNet-5模型* * *有七层,每层包含很多参数,也就是卷积神经网络中的参数。虽然只有七层,在当今庞大的神经网络中是很少的,但它包括卷积层、池层和全连接层,可以说麻雀虽小,五脏俱全。为方便起见,我们将卷积层称为C层,将下采样层称为下采样层。
首先,输入层输入原始图像,原始图像被处理成32×32像素的值。然后,下面的隐藏层计量器在卷积和子采样之间交替。C1层是卷积层,包含六个特征图。每个映射是28x28个神经元。卷积核可以是5×5的十字,这28×28个神经元* * *共享卷积核的权重参数。通过卷积运算,增强了原始信号的特征,也降低了噪声。当卷积核不同时,从图像中提取的特征是不同的。C2层是一个汇集层。上面已经介绍了池层的功能。它平均局部像素值以实现子采样。
pooling图层包含六个要素地图,每个地图的像素值为14x14。这个池层非常重要,可以保证一定程度上提取网络的特征,同时大大降低计算复杂度,从而降低网络结构过拟合的风险。由于卷积层和池层交替出现,隐藏层的第三层是另一个卷积层,第二个卷积层由16个特征图组成,每个特征图用于加权和计算的卷积核是10x10。第四个隐藏层,即第二个池层,也包含16个特征图,每个特征图使用的卷积核为5x5。第五隐层采用5×5卷积核运算,包含120个神经元,也是该网络卷积运算的最后一层。
之后第六层是全连通层,包含84个特征图。在全连接层,对输入进行点乘,然后加上偏置,再通过一个激活函数传递给输出层的神经元。最后一层,第七层,为了得到输出向量,设置了十个神经元进行分类,相当于输出一个十个元素的一维数组,即0到9。
AlexNet模型
AlexNet简介
在2012的Imagenet图像识别大赛中,Alext提出的alexnet网络模型一鸣惊人,掀起了神经网络的应用热潮,获得了2012图像识别大赛的冠军,也让卷积神经网络真正成为图像处理中的核心算法。上面介绍的LeNet-5出现在上个世纪。虽然是经典,但由于各种复杂的现实场景,只能用在一些领域。然而,随着SVM等手工设计功能的快速发展,LeNet-5并没有形成很大的应用局面。随着ReLU和dropout的提出,以及GPU带来的计算能力的突破和互联网时代大数据的爆发,卷积神经网络带来了历史性的突破,AlexNet的提出将深度学习置于人工智能的前沿。
图像预处理
AlexNet的训练数据采用ImageNet子集中的ILSVRC2010数据集,包括1000个类别,***1.2万个训练图像,50000个验证集,150000个测试集。在网络训练之前,我们需要对数据集图像进行预处理。首先,我们需要把不同分辨率的图片全部换成256x256的图像。变换方法是将图片的短边缩放到256像素值,然后截取长边中间的256像素值,得到256x256的图像。除了对图像大小进行预处理,还需要减去图像的平均值。图像一般由RGB三原色组成,根据RGB三个分量分别取平均值,可以突出图像的特点,便于后期计算。
另外,为了保证训练效果,我们还需要对训练数据进行更加苛刻的处理。在256x256大小的图像中截取227x227大小的图像,然后镜像图像,使原始数据增加(256-224)x(256-224)x2= 2048倍。最后RGB空间是PCA,然后主成分是高斯扰动的(0,0.1)。结果,错误率降低了1%。对于测试数据,我们提取图像四角大小为224,224的图像,中心大小为224,224的图像以及它们的镜像,这样可以得到65,438+00个图像,我们可以使用softmax进行预测,将所有预测进行平均,作为最终的分类结果。
ReLU激活功能
我们前面提到常用的非线性激活函数是sigmoid,它可以确定输入在0到1之间的所有连续实值。但这就带来了一个问题,当一个负数的绝对值很大时,那么输出就是0;如果是绝对值非常大的正数,则输出为1。这会导致饱和现象,在这种情况下神经元的梯度会变得特别小,这必然会增加网络的学习难度。另外,sigmoid输出的值不是0作为平均值,因为这样会导致上层输出的非零平均值信号会直接输入到后一层的神经元。所以AlexNet模型提出了ReLU函数,公式为:f(x)=max(0,x)f(x)=max(0,x)。
用ReLU代替sigmoid,发现ReLU得到的SGD收敛速度比Sigmoid快很多,这成为AlexNet模型的优点之一。
拒绝传统社会的人
AlexNet模型提出了一种有效的模型组合方法,只需要单个模型两倍的时间,这种方法被称为Dropout。在整个神经网络中,随机选择一半的神经元,使其输出变为0。通过这种方式,网络关闭了一些神经元,减少了过拟合现象。同时,训练的迭代次数也在增加。当时一个GTX580 GPU只有3GB内存,无法进行大规模计算。但是随着硬件水平的发展,当时的GPU已经能够实现并行计算。并行计算后,两个GPU可以互相通信传输数据,充分利用了GPU资源,所以模型设计采用两个GPU并行运行,大大提高了运行效率。
模型分析
AlexNet模型* * *有八层,其中前五层是卷积层,其中前两个卷积层和第五个卷积层有池层,其他卷积层没有。后三层完全连接,约65万个神经元,约6000万个待训练参数。
图像预处理后,原始图像进入第一卷积层C1后变成55x55像素大小。这时,一个* * *有96个频道。模型分为上下两块,方便GPU运行,通道数为48更适合GPU并行运行。在上面的模型中,第48层直接变成了一个曲面,这使得模型看起来更像一个立方体,大小为55x55x48。在第二卷积层C2中,卷积核的大小为5x5x48,因此再次执行卷积运算。C1和C2卷积层卷积运算后会有一个池层,大大降低了特征提取后特征图像的像素值,方便了运算,使特征更加明显。第三层的卷积层C3更为特殊。第三层的卷积层合并通道,将前面两个通道的数据再次合并,这是一个拼接操作。在第三层之后,由于串联连接,通道的数量变为256。全卷积的卷积核大小变成13×13×25613×13×256。4096个这样大小的卷积核对输入图像进行4096次全卷积运算,最后的结果是一个列向量,一个* * *,4096个数。这是最终的输出,但是AlexNet最终会分成1000个类,所以通过第八层,也就是全连通的第三层,会得到1000个类输出。
Alexnet网络中各层作用不同,ReLU,多CPU用于提高训练速度,重叠池用于提高精度,不易产生过拟合,局部归一化响应用于提高精度,数据增益和丢失用于减少过拟合。
VGG网
在ILSVRC-2014中,牛津大学视觉几何组提出的VGGNet模型在定位任务中排名第一,在分类任务中排名第一[[i]]。如今在计算机视觉领域,卷积神经网络的良好效果赢得了开发者的青睐,而上面提到的AlexNet模型效果更好,所以广大从业者和学习者都试图对其进行改进以获得更好的效果。后来很多人认为AlexNet模型中所谓的局部归一化响应浪费了计算资源,但并没有大幅度提升性能。VGG的本质是AlexNet结构的增强版,强调卷积神经网络设计中的深度。卷积层深度提升到19层,并在当年的ImageNet大赛中获得定位问题第一名。整个网络向人们证明,我们可以用很小的卷积核达到很好的效果,前提是我们加深网络的层数,这也证明了如果要提高整个神经网络的模型效果,更有效的方法是加深其深度。虽然计算量会大大增加,但整体复杂度也会增加,可以解决更复杂的问题。虽然VGG网络已经诞生好几年了,但是在其他许多网络上的效果并不是很好,VGG有时也能发挥其优势,让人有意想不到的收获。
与AlexNet网络非常相似,VGG***有五个卷积层,每个卷积层后面都有一个池层。当时在ImageNet大赛中,笔者分别尝试了六种网络结构。这六种结构几乎一样,只是层数不同,从11到19不等。网络结构的输入是大小为224*224的RGB图像,最终输出分类结果。当然,在入网的时候,图片是要进行预处理的。
与AlexNet网络相比,VGG网络在网络的深度和宽度上都做了一些扩展,具体的卷积运算类似于AlexNet网络。我们主要说明VGG网络所做的改进。首先,由于很多研究者发现归一化层的效果不是很好,并且占用了大量的计算资源,作者在VGG网络中取消了归一化层。其次,VGG网络使用更小的3×3卷积核,两个连续的3×3卷积核相当于5×5感受野。以此类推,三个3×3连续卷积核相当于7×7感受野。这个变化使得参数变小,节省了计算资源,把资源留给后面更深的网络。第三点是VGG网络中的池层特征池核改为2x2,而AlexNet网络中的池核为3x3。这三个改进无疑会减少整个参数计算,让我们在有限的计算平台上获得更多的资源用于更深的网络。由于层数较多,卷积核较小,整个网络的特征提取效果很好。实际上,由于VGG的层数较多,计算量还是相当大的,卷积层数多成为其最显著的特点。另外,VGG网络的扩展性能突出,结构简单,所以迁移性能好,迁移到其他数据集时泛化性能好。到目前为止,VGG网络经常被用来提出特征。所以当现在很多更新的模型都没有效果的时候,使用VGG或许可以解决这些问题。
谷歌网
Google凭借GoogleNet在2014 Imagenet挑战赛(ILSVRC14)中再次获得第一名。该方法通过增加神经网络的深度和宽度取得了较好的效果,并保证了在此过程中计算资源的不变。这个网络表明,增加深度、宽度和训练数据是在现有深度学习中获得更好结果的主要途径。但是增加尺寸可能会带来过拟合的问题,因为深度和宽度的加深必然会带来参数过多。此外,增加网络规模也带来了占用太多计算资源的缺点。为了在充分利用计算资源的前提下提高整个模型的性能,作者使用了Inception模型,如下图所示。可以看出,这种类金字塔模型使用宽度不同大小的并行卷积核,增加了卷积核的输出宽度。因为使用了尺度更大的卷积核,所以增加了参数。使用1*1的卷积核来最小化参数的数量。
初始模块
上表是网络分析图。第一个行为卷积层的输入为224×224×3,卷积核为7×7,步长为2,填充为3。输出维数为112×112×64,其中使用了7×7卷积。第二个行为池层,卷积核为3×33×3,滑动步长为2,填充为1,输出维数为56×56×64,计算方法为1/2×(112+2×1。3+1)=56。第三和第四行类似于第一和第二行。Inception模块的第五行分为四个分支,输入都是上层生成的28×28×192结果:1部分,1×1卷积层,输出大小为28×28×64;第二部分采用1×1卷积层,输出大小为28×28×96。作为输入,使用3×3卷积层,输出大小为28× 28× 128。第三部分使用1×1卷积层,输出大小为28×28×32。作为输入,使用3×3卷积层,输出大小为28× 28× 32。在3×3池层的第三部分中,输出大小为28×28×32。第5行的Inception模块会将上述结果的输出结果并联起来,从而增加网络宽度。
雷斯内特
在2015的ImageNet大赛中,何的ResidualNetworks获得了ImageNet多个领域的第一名,ResNet上的这篇论文也获得了CVPR2016的最佳论文,实至名归。
上面介绍的VGG和谷歌网络都是通过增加卷积神经网络的深度来得到更好的结果,也让人明白网络的深度和广度决定了训练效果。但同时,随着宽度和深度的加深,效果其实会变差。也就是模型层次加深,错误率增加。模型深度加深,以一定的错误率换取学习能力的增强。而深度神经网络模型牺牲了大量的计算资源,学习能力应该不会高于浅层神经网络。这种现象主要是因为随着神经网络层数的增加,梯度消失的现象越来越明显。因此,为了解决这个问题,作者提出了深度残差网络的一种结构残差:
上图是残差网络的基本结构。可以看出,实际上增加了一个恒等式映射,将原来的变换函数H(x)转换为F (x)+X,整个网络的变化可以在示意图中清晰地看到,使网络不再是简单的堆叠结构,很好地解决了由于网络层数增加而导致梯度不那么明显的问题。所以这个时候,网络可以做得很深。到目前为止,网络的层数可以超过1000层,可以保证很好的效果。而且这种简单的叠加并没有给网络增加额外的参数和计算,也提高了网络训练的效果和效率。
在竞赛中,为了证明自己的观点是正确的,作者设计了几个有控制变量的实验。作者首先构造了两个分别为18层和34层的平面网络,然后设计了两个分别为18层和34层的残差网络。然后,用控制变量对这四个模型进行实验,观察数据量的变化。下图是实验结果。实验中,在平面网络上观察到明显的退化现象。实验结果还表明,在残差网络上,34层的效果明显好于18层,证明了残差网络的性能随着层数的增加而提高。不仅如此,残差网络在更深层结构中的收敛性能也得到了明显的提高,整个实验取得了巨大的成功。
此外,作者还对快捷方式进行了实验。如果剩余网络模块的输入输出维数不一致,要统一维数就必须对维数较少的进行维数化。维度增加的最佳效果是用0填充。但是实验数据显示两者差别很小,所以不是特别需要线性投影。用0填充维度也保证了模型的复杂度控制在相对较低的水平。
随着实验的深入,作者提出了更深层次的剩余模块。这个模型减少了每一层的参数,把资源留给了更深层的模型。在低复杂度的情况下,模型没有明显的梯度消失,所以目前的模型最高可以达到1202层,错误率仍然控制的很低。但是层数也带来了过拟合的现象,但是很多研究者还在改进。毕竟ResNet在性能上远远领先于其他机型。
残网的本质是捷径。从一个角度来说,也可以解释为多路径的网络。如下图所示:
ResNet可以很深,但是从上图我们可以了解到,当网络很深,也就是有很多层的时候,数据传输的路径其实是相对固定的。似乎也可以理解为多人投票制,大部分梯度分布在文中所谓的有效路径上。
DenseNet
在ResNet模型之后,有人试图对Resnet模型进行改进,于是ResNeXt模型诞生了。
这就是上面介绍的Resnet模型,结合了GoogleNet中inception模块的思想,比ResNet更有效。随后DenseNet模型诞生,直接连接所有模块,整个模型更简单粗暴。密集连接成为其主要特征。
我们比较了DenseNet和ResNet:
从上图可以看出,与ResNet相比,DenseNet的参数数量明显减少,效果更好,但DenseNet需要消耗更多内存。
摘要
以上介绍了卷积神经网络历史上的一些著名模型。这几款都很经典,各有千秋。随着计算能力的不断增强,各种新型网络训练的效率和效果也在逐步提高。从收敛速度来看,VGG >:Inception & gt;DenseNet & gtResNet,从泛化能力来看,Inception >:dense net = ResNet & gt;VGG从计算的角度出发,假设