查看个人微信号推送文章:经典卷积神经网络(Classic Convolutional Neural Networks)

简介

介绍了几种经典的卷积神经网络,分别为:
LeNet-5(1998)、AlexNet(2012)、VGGNet(2014)、InceptionNet(2014)和ResNet(2015)。

LeNet-5(1998)

LeNet-5是Yann LeCun在1998年提出的卷积神经网络算法,最初用于解决手写识别的问题。

LeNet-5的网络结构

LeNet-5的网络结构如下图所示:

LeNet-5网络由7层组成。每层有多个特征图(Feature Map),每个特征图通过一种卷积滤波器提取输入的一种特征。每个特征图有多个神经元。

输入:输入为32*32的灰度图像。即输入为一个2维度的矩阵。

Layer1卷积层:6个大小为5*5的卷积核,步长为1。因此输出为28*28*6。需要训练的参数个数为:5*5*6+6=156,每个卷积核大小为5*5,共有6个卷积核,最后加上6个偏置项。

Layer2池化层(降采样层):2*2的池化层,使用平均池化方法,步长为2。因此输出为14*14*6。采样的方式为将4个输入相加,乘以一个可训练的参数,再加上一个可训练的偏置项,结果通过sigmoid函数(与平常熟知的平均池化不同)。需要训练的参数个数为:2*6=12个。

Layer3卷积层:16个大小为5*5的卷积核,步长为1。因此输出为10*10*16。在这一层中,输入为Layer2中所有6个或者几个特征的map组合。在该层中,前6个特征图以Layer2中3个相邻的特征图子集为输入,接下来的6个特征图以Layer2中4个相邻特征图的子集作为输入。然后的3个以不相邻的4个特征图子集作为输入,最后一个将Layer2中所有的特征图作为输入。下图说明了从Layer2的6个特征图得到Layer3的16个特征图的过程:

图中,最左边的0-5为Layer2的6个特征图,最上边的0-15为Layer3的6个特征图。Layer3的前6个特征图(0-5)与Layer2层相连的3个特征图相连接。之后的6个特征图与Layer2中相连的4个特征图相连接,后面的3个特征图与Layer2中不相连的4个特征相连接,最后一个与Layer2中所有特征连接。而输出的图像大小仍旧为10*10。

因此,需要训练的参数个数为:6*(3*5*5+1)+6*(4*5*5+1)+3*(4*5*5+1)+1*(6*5*5+1)=1516

Layer4池化层(降采样层):2*2的池化层,使用平均池化方法,步长为2。因此输出为5*5*16。采样的方式为将4个输入相加,乘以一个可训练的参数,再加上一个可训练的偏置项,结果通过sigmoid函数(与平常熟知的平均池化不同)。需要训练的参数个数为:2*16=32。

Layer5卷积层(全连接层的输入层):将Layer4的16个单元特征输入,卷积核的大小为5*5,卷积核的个数为120个。输出为1*1*120。即120个卷积结果。需要训练的参数个数为(5*5*16+1)*120=48120。该层将作为全连接层的输入层。

Layer6全连接层:该层有84个神经元。计算输入向量与权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。可训练的参数个数为(120+1)*84=10164。

Layer7softmax分类层:对于数字识别来说,该层有10个结点,分别表示数字0到9。该层的参数个数为84*(10+1)=850。该层采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式为:

式子中i的值为0到9,j的值为0到83(84-1,因为Layer6层有84个结点)。RBF的值越接近于0,则越接近于识别的结果数字。

下图展示了LeNet-5识别数字3的过程:

AlexNet(2012)

AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的起学生Alex Krizhevsky设计的卷积神经网络。在比赛中取得了top-5错误率为15.3%的成绩。

AlexNet的网络结构

AlexNet的网络结构如下图所示:

AlexNet网络由8层组成,5层卷积层和3层全连接层。每层卷积层后面都有池化层。

输入:ImageNet数据集。训练集包含120万张图片,验证集包含5万张图片,测试集包含15万张图片。这些图片分为了1000个类别。

AlexNet有以下特点:

特点1:ReLU(Rectified Linear Unit) Nonlinearity

AlexNet使用了Relu激活,并验证了其效果在较深的网络超过了Sigmoid激活函数。Sigmoid函数在网络较深的时候会出现梯度弥散问题。

Sigmoid函数:

当时用sigmoid函数作为激活函数时,随着网络层数的增加(隐藏层),训练误差反而会增大。靠近输出层的隐含层梯度较大,参数更新速度快,很快就会收敛;靠近输入层的隐含层梯度较小,参数更新速度慢,几乎和初始状态一样;在含有四个隐藏层的网络中,第一层比第四层满了可能会接近100倍,即出现梯度弥散现象。

sigmoid函数的导数:

sigmoid函数计算量较大,在反向传播的过程中求导数涉及到了除法;反向传播过程中还可能出现梯度消失的现象;函数的敏感区间较短,(-1,1)之间敏感,超过区间将处于饱和状态。

Relu函数为:

Using ReLU nonlinearity, CNNs could be trained much faster.

Reasons:
1. No complicated math.数学公式简单,计算速度快。
2. It converges faster. The slope doesn’t plateau when x gets large. 当x变大的时候,不会梯度弥散或梯度消失。
3. It’s sparsely activated. Since ReLU is zero for all negative inputs, some units may not be activated. 具有稀疏性,当x为负值的时候,梯度为0,神经元将不会被训练。

Relu函数的导数:
当x小于等于0时,导数为0;当x大于0的时候,导数为1。
Relu函数的导数在大于0的时候,梯度为常数,因此不会导致梯度弥散。但是Relu函数在负半区的导数为0,当神经元激活值进入负半区的时候,梯度为0,这个神经元将不会被训练,即具有稀疏性。

特点2:Data Augmentation(Reduce Overfitting)

AlexNet对图像进行了数据增强,缓解了图像的过拟合,提高模型的泛化能力。具体来说,对图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,之后对10次的结果求平均值。数据增强的方法主要有两种:对图像进行镜像对称或者随机裁剪图片。

1.对图像进行镜像对称

Data Augmentation by Mirroring

2.随机裁剪图片

Data Augmentation by Random Crops

在原图和镜像反射的图(256*256)中随机抽取227*227的块。

特点3:Dropout(Reduce Overfitting)

使用Dropout随机忽略一部分神经元,从而避免了模型的过拟合。

A neuron is dropped from the network with a probability of 0.5.

以0.5的概率断开某些神经元的连接(即从全连接变为非全连接)。

通过Dropout操作也可以提高模型的准确性。

特点4:最大池化

重叠使用了最大池化。之前卷积神经网络普遍使用了平均池化,而AlexNet全部使用了最大池化,避免了平均池化的模糊效果。

VGGNet(2014)

VGGNet是牛津大学计算机视觉组(University of Oxford)和Google DeepMind与204年提出的卷积神经网络。VGGNet通过反复的堆叠33的小型卷积核和22的最大池化层,构建了16-19层深的卷积神经网络。其取得了ILSVRC 2014比赛分类项目的第2名和定位项目的第1名。

VGGNet的网络结构

VGGNet的网络结构图如下图所示:

特点1:The Use of 1×1 and 3×3 Filters(Reduce the number of parameters)

两个3×3卷积核叠加,相当于一个5×5的卷积核的覆盖范围。但是训练的参数减少了。

By using 2 layers of 3×3 filters, it actually have already covered 5×5 area as in the above figure.
| filters | number of parameters |
| ———— | ———— |
|1 layer of 5*5 filter |5*5=25 |
|2 layers of 3*3 filter | 3*3+3*3=18 |
可以看到,一个5×5的卷积核需要训练25个参数,而2层3×3的卷积核需要训练的参数为18个。训练的参数减少,可以加快模型的训练速度,同时避免模型的过拟合。

特点2:引入1*1的卷积核

VGGNet的卷积结构中,引入了1*1的卷积核,不影响输入输出维度的情况下,引入非线性变化。增强的网络表达能力,降低计算量。

特点3:Data Augmentation(Multi-Scale)

通过随机将图像裁剪成224224尺寸;或者将图片缩放成256×256、284384尺寸,实现数据的增强。使得模型更加准确。

特点4:先训练简单的网络,再训练复杂的网络

在训练的时候,可以先训练简单的(层数较少)的VGGNet的A级网络,然后使用A网络的权重初始化后面的复杂模型,加快模型的收敛速度。

InceptionNet(2014)

InceptionNet在2014的GoogleNet比赛中取得了第一名,与VGG同年。由Google提出。

InceptionNet V1

InceptionNet V1网络的结构为:

该网络有9个Inception module线性叠加,深度为22层(包括池化层为27层)。

特点1:Inception Module

在同一级别上运行多种尺寸过滤器。因为在不同的图片中,信息位置的大小的变化的,例如有的信息占据图片很大空间,而有的信息占据图片很小空间。因此选择一个合适大小的卷积核很困难。大的卷积核有利于提取全局信息,而小的卷积核有利于提取局部信息。

其解决方案就是Inception模块,对输入使用3中大小不同的滤波器(1*1,3*3,5*5)进行卷积操作,使得网络可以提取到“稀疏”和“不稀疏”的特征,增加了网络深度的同时增加了网络对尺度的适应性。还进行了最大池化。输出连接到下一个Inception模块(如下图所示)。

为了降低计算成本,对Inception module进行了改进。在3*3和5*5的卷积之前加入额外的1*1的卷积来限制输入通道的数量,同时增加网络深度。输入通道数量的减少能够使得计算量减少(如下图所示)。

use 1×1 and 3×3(or 5×5) filters to reduce the number of parameters.

there are different sizes of convolutions for each layer. It can extract different kinds of features.

特点2:Auxiliary Classifiers for Training

使用了辅助分类器。

InceptionNet是一个很深的网络,当网络深度较深时,将面临梯度消失问题。InceptionNet引入了辅助分类器,通过将softmax应用于两个Inception模块的输出,计算标签上的辅助损失(Auxiliary loss)。总损失是辅助损失和实际损失的加权和。每种辅助损失的权重为0.3。

The loss is added to the total loss, with weight 0.3。

InceptionNet V2

InceptionNet V2网络在InceptionNet V1的基础上进行了改进,提高了模型的准确性。Inception v2相比Inception v1在ImageNet的数据集上,识别误差率由29%降为23.4%。

特点3:将5*5的卷积分解为两个3*3的卷积运算叠加

将5*5的卷积分解为两个3*3的卷积运算叠加。减少了训练的参数个数,提高网络的性能。

同时,将大小为n*n的滤波器分解为1*n和n*1的卷积的组合。

特点4:滤波器被扩展

模块中的滤波器被扩展,变得更加宽而不是更加深。从而可以提取出更多的特征,避免信息的丢失。

InceptionNet V3

InceptionNet V3网络在InceptionNet V2的基础上进行了改进。

改进有:

1.RMSProp优化器。

2.分解7×7卷积。(使用了71和17的卷积代替7*7)

3.辅助分类器中的BatchNorm。

4.标签平滑(添加到损失公式中的一种正规化组件,可防止网络对类过于自信。防止过度拟合)。

InceptionNet V4

InceptionNet V4网络将原来的卷积、池化的顺序替换为了stem模块,获得了更深的网络结构。

stem模块

stem模块为:

stem之后和Inception V3一样,是Inception模块和Reduction模块。

Inception模块

Inception模块为:

上图中分别表示InceptionA、InceptionB和Inception C。

Reduction模块

Reduction模块为:

上图中分别表示ReductionA和ReductionB。

Inception V4模型最终的结构为:

ResNet(2015)

ResNet是Microsoft Research于2015年提出的,在ImageNet比赛classification任务上获得第一名,其在网络中加入了残差。当网络深度增加时,会使得网络的参数增加,同时带来梯度弥散问题。Kaiming He等人提出残差区块概念。

残差区块

残差区块为:

残差模块有两种:

当x通过卷积和relu操作后,产生的结果为F(x),将F(x)与原始输入x相加,得到H(x)=F(x)+x。残差网络相当于在输入x上增加了一个微小变化。

H(x) = R(x) + x

R(x) = Output -Input = H(x) – x

上式中的R(x)即为残差。

残差网络的优点

残差网络由以下优点:

1.更容易优化;

2.由于这些微小变化,残差网络在反向传播过程中梯度信息更容易传播。

ResNet的网络结构

ResNet的网络结构为:

0
Posted in 算法设计与分析

Leave a Comment:

电子邮件地址不会被公开。