转载请注明出处:blog.justkitt.com
本系列文章会从最基本的神经网络结构开始讲起,之后会进一步介绍基础神经网络在检测、分割、识别等任务上的耦合方式。本系列文章尽量每周更新三次。
LeNet-5
LeCun 等人提出的一种名为“LeNet-5”网络结构并将其用在手写数字识别上,该结构受Hubel 等人在猫视觉皮层的研究中所发现的一种具有局部敏感和方向选择功能的具有“感受野”的神经元所启发,具体结构如下图,卷积神经网络随之诞生。
LeNet-5是一个只有三个卷积层的卷积神经网络,分别为5x5x6,5x5x16,5x5x120,中间有一些pooling层,之后接一个全连接层然后输出。
AlexNet
Alex Krizhevsky 等人在ILSVRC-2010 中提出的一种针对1000 种类别分类的模型,重新把神经网络带入大众的视野。该结构在测试数据上达到top-1 错误率和top-5 错误率分别为37.5% 和17%,极大程度上提高了当时的最佳成绩。这个卷积神经网络有大约6 千万个参数和65 万个神经元,有五个卷积层和三个全连接层,其中全连接层的最后一层为1000 分类的softmax 层。某些卷积层后面跟随有最大池化层。为了降低全连接层中出现过拟合的可能性,增加了一种称为“dropout”的方法,在实验中被证实是非常有效的。AlexNet 网络结构如下图所示,各网络层参在后续的表格中给出,其中conv 表示卷积层,fc 表示全连接层。

AlexNet 相对于传统卷积神经网络所做的优化主要有:
1. 局部响应归一化(LRN)
该操作的目的在于对局部神经元的响应创立竞争机制,增大较大的响应值,减小细微的响应值,主要为了抑制微小的神经元响应值,模拟哺乳动物视觉系统中的侧抑制现象,提高系统抗噪声能力。

2. 数据集扩充方式
AlexNet在ImageNet数据集上进行训练的时候,首先将训练图片缩放成256x256,然后再将缩放后的图片crop四个角和中间点成224x224,再之后将crop的图像进行翻转保证水平不变性。
3. ReLU
在Nair和Hinton之后,将ReLU非线性激活函数引入卷积神经网络中,加快了神经网络的收敛速度。
VGGNet
Karen Simonyan(VGG 团队) 研究了卷积网络的深度在大规模图像识别背景下的对准确率的影响。主要通过利用比较小的卷积核(3x3)的堆叠增加模型的深度,在增加模型深度的同时,增加了多个ReLU 函数的作用,增加了整个结构的非线性性,进而增加了决策函数的判别性。利用这种小卷积核的设计,效果相比之前的设计有了显著的提高。
两个3x3的卷积核在接收域基础上等价于5x5,但是中间会有ReLU引入的非线性性,拟合效果会更好。
VGG 团队从网络深度来改进卷积神经网络模型,通过固定网络结构的其他参数,平稳增加网络深度,同时更改所有卷积层的卷积核大小,使得在增加网络层数的同时,整个模型的需要训练的参数数量相对来说没有增加或增加程度在可接受范围内。具体的网络结构见表。
VGGNet 相对于传统卷积神经网络所做的优化主要有:
多尺寸图像训练模式
VGG 团队的训练图片大小设置如下:S 表示训练图片的最小边,之后根据这个最小边的不同选择,可以将训练方式分为:单一尺寸训练和多尺寸训练。在单一尺寸训练模式下,VGG 将S 设置为256 和384 两种。根据这两种S 的设置训练两个模型,其中S=384 的网络结构使用S=256 的网络结构的参数进行初始化。即每次都会把训练图片的大小固定到短边是256 或384 之后用crop 的方式把训练图片变成224x224 的大小。在多尺寸训练模式下,每次数据输入时,将S 随机在一个范围[Smin; Smax] 中选取,VGG 实验中,Smin = 256; Smax = 512。由于物体在图片中可能呈现出不同的大小,所以使用这样的方式能够从某种程度上获益。
多尺寸图像测试模式
在测试时,将测试图片的最短边长记为Q,之后在测试的时候,将第一层全连接层替换成7x7 的卷积层,最后两层全连接层替换成1x1 的卷积层。这样在测试的时候,整个网络结构是一个全部由卷积层构成的网络,网络的输出是一个根据图片输入大小得到的不同空间分辨率以及类别种类所决定的通道数。最后为了得到图片对于每个类别的评分,使用sum-pooled 的方式,将一个三维矩阵转化为一个分数向量。
GoogLeNet(Inception-v1)
Szegedy 等人(下称GoogLeNet 团队)引入了一种名为Inception 的结构,利用这种结构,能够在增加卷积神经网络深度和宽度的同时,充分利用计算资源,使得模型训练难度不会增加太多。他们在ILSVTC-2014 上提交的GoogLeNet 模型,是一个22 层的深度网络,被用在分类和检测任务中,并且在两个任务上都取得了最先进的水平。在GoogLeNet 中,1x1 卷积层被大量使用,主要出于减少计算量,移除计算瓶颈的目的去使用这样的结构,所以在不影响整体网络性能的情况下,使用1x1 的卷积层可以使的网络深度和宽度都有一定程度上的增加。GoogLeNet 的结构如图4所示,蓝色节点表示卷积层,红色节点表示池化层,橙色部分为softmax层,绿色部分为局部归一化层以及串联层等。
作者认为提高深度神经网络的最直接的方式就是不然增加层数,不然增加每一层的神经元数量,但是这样的增加方式会引入大量的参数,同时由于当时Batch Normalization还没有被提出,所以当时过深的网络还会受到梯度消失和梯度爆炸的困扰。作者设计出一种叫做Inception的结构来实现其想法。Inception结构如图所示。
图的左边是一个最naïve的版本,这个版本直接用3x3和5x5的卷积层接上一层的输出。这样的结构计算量会很大,例如假设上一层的通道数是N,3x3卷积层的输出通道数是M,那么3x3卷积的参数个数就是Nx3x3xM,多堆叠几个这样的结构就很容易达到很大的计算量。这时候1x1卷积出现了,这个卷积是至今为止见过的最好用的卷积,它从本质上来说,就是在通道数上做了个全连接,不改变feature map的大小。同样地,我们假设前一层输出的通道数是N,3x3卷积层的通道数是M,1x1卷积层的通道数应该会小于M,那么总体的参数数量就是:Nx1x1xK+Kx3x3xM。这个参数会比直接接上3x3的卷积层参数少。对于5x5也一样。所以就有了右边那种叫做维度减少的Inception模块。还可以优化的地方就是在3x3卷积层的输出后面接上1x1的卷积,这样也会减少总体的参数数量。
同时,Filter Concatenation结构就是在Feature Map上将Inception模块中不同大小的卷积核输出的Feature Map进行空间上的拼接,这样在这一层输出的特征图(可以理解为特征)中,既有比较大的接收域所产生的特征,也有比较小的接收域所产生的特征。
Inception结构上来看也是稀疏的,因为输入相同,但是可以在不同的机器上完成卷积的计算,因为是并行的完全没有关联,然后只需要再将卷积后的结果拼接在一起即可。
GoogLeNet的结构具体如表所示。
表中的#3x3reduce表示的是在3x3卷积层前连接的1x1的卷积层的Feature Map的数量。即之前内容中K的数量。
从表中可以看出,GoogLeNet的全连接层只有一层,大部分都是Inception结构,然后再最后的时候构造出一个近似于分类个数的Feature Map数量,在这个Feature Map上做Avg Pool,得到一个向量,用这个向量后面接一个全连接层,全连接层后面接softmax做分类。全连接层的减少也会对计算的速度有提升。
在分类层前面用avg pool是遵循了network in network这篇文章的思想,但是在之后再加了一个全连接层是为了让自己的模型在其他数据标签上更容易finetuned。同时倒数第二层的avg pool让准确率提高了0.6个点,值得注意的是,在avg pool后面还是接了dropout。
同时,因为从经验上来说,中间卷积层应该更具有区分度,所以作者在训练的时候在中间接入了两个分类层,用这些层计算loss,loss的权重贡献率是0.3。 在rethinking inception这篇文章中,作者给出即使不在中间层接出loss层,对最终的结果几乎没有什么影响。
ResNet
ResNet 是He 等人基于深度残差学习框架所提出的解决系统精度在饱和后,随着网络深度的增加而迅速下滑的问题。原网络受VGGNet 启发,主要采用3x3卷积核,遵循两个设计原则:1) 对于相同输出特征图尺寸,卷积层有相同个数的卷积核;2) 如果特征图尺寸缩小一半,卷积核个数加倍以保持每个层的计算复杂度。同时,通过步长为2 的卷积来进行减采样。残差学习的一个构建单元如图5所示,假设期望的网络层关系映射为H(x),让堆叠的非线性网络层拟合另一个映射F(x):=H(x)-x,所以原先的映射为F(x)+x。
ResNet相对于传统卷积神经网络所做的优化主要有:
1. Batch Normalization
Batch Normalization就是
- 训练的时候根据当前数据的均值和方差,将输出减去均值,然后除以方差,将其进行归一化。并用一个全局变量来记录训练到当前情况时的均值和方差情况(用滑动平均记录)
- 预测的时候用训练时候记录的全局的均值和方差进行计算
通过Batch Normalization,就可以很好地进行梯度消失现象的避免,让输出归一化到一个范围以内,更好地进行训练。
2. Short Cut Connection
就是Resnet中的跳转连接,通过这个跳转连接,能够让反向传播的梯度在往前传回到很前面的层的时候,不发生消失的情况。跳转连接的出现,也让Resnet其实不太像是一个很深的结构,而像是几个比较浅的结构的并行(这个结论需要进一步阅读dualpath-net之后再进一步给出)
…To Be Continued
接下来会介绍Inception-v2、v3、v4、Inception-Resnet-v1、Inception-Resnet-v2、DenseNet、Dualpath-Net、SqueezeNet、ShuffleNet、Xception等基础网络结构,再之后,会介绍一些常见的检测算法以及基础结构与检测算法的合并。