一文看懂CNN经典网络的进化
目录
LeNet(1998)
LeNet-5,这个开创性的模型很大程度上引入了我们今天所知道的卷积神经网络,最初被用于邮政编码中的手写数字的识别。
网络结构:
输入层:原始图像的大小是32×32
C1层是卷积层,单通道下用了6个卷积核filter,这样就得到了6个特征图feature map,其中每个卷积核的大小为5*5,
S2层为 pooling 层,也可以说是池化或者特征映射的过程,不过这里的池化和大家认识的最大和平均池化不太一样,计算过程是:2×2 单元里的值相加然后再乘以训练参数w,再加上一个偏置参数b(每一个feature map共享相同w和b),然后取sigmoid 值,作为对应的该单元的值。下面为卷积操作与池化的示意图:
C3层也是一个卷积层,16个卷积核,卷积核为5*5,注意此处C3并不是与S2全连接而是部分连接。每个feature map只与上一层S2中部分feature maps相连接,下表给出了16个feature maps与上一层S2的连接方式。
为什么要采用部分连接,而不采用全连接呢?首先就是部分连接,可计算的参数就会比较少,其次更重要的是它能打破对称性,这样就能得到输入的不同特征集合。
S4层也是采样层,有16个feature maps,每个feature map的大小为5×5,计算过程和S2类似。
C5为卷积层,有120个卷积核,卷积核的大小仍然为5×5,由于输入的featuremap的大小为5x5,因此经过卷积之后,Feature map的变为1x1,刚好是全连接,但是我们不把它写成F5,因为这只是巧合,输入图像尺寸改变后,这一层就未必是全连接了。另外C5的每一层与S4的每一层为全连接。
F6层为全连接,有86个神经单元,每个神经单元与C5进行全连接。这样F6层就可以得到一个86维特征了。后面可以使用该86维特征进行做分类预测等内容了。
总结:LeNet作为开创者,虽然有些方法现在不怎么常用,如**函数sigmoid,池化方式,但是搭建起了现代深度神经网络的框架,意义非凡。
Parameters: 60,000
Paper: Gradient-based learning applied to document recognition
AlexNet(2012)
AlexNet是由Alex Krizhevsky等人在2012年为了参加ImageNet竞赛而开发的。总体架构与LeNet-5非常相似,尽管这个模型要大得多。这一模式的成功掀起了研究深度学习的热潮。
AlexNet的网络结构:
Points:
1)大量的数据
在ImageNet数据上对网络进行训练,其中包含了来自2.2万多个类别的超过1500万张图像。
2)**函数使用了ReLU(rectified linear units)
因为sigmoid,或者tanh(x)函数的梯度下降速度要不relu慢的多,特别是在损失较小的时候。
3)使用GPU并行计算
4)重叠池化 Overlap Pooling
传统的池化是不重叠的,但是论文发现重叠池化,可以提高准确率,也可以缓解过拟合。
5)数据增强 Data Augment
最简单,最有效,最常用的降低过拟合的方法就是数据增强,通过对图像进行一些变换,得到大量的人工数据集。
文中应用了十点裁剪10Crop(对256x256的图片,分别在四个角和中心点,裁剪224x224的图片,然后水平翻转,得到十张图,送入模型训练),加颜色抖动,高斯噪声。
6)Dropout
为了降低全连接的过拟合,它通过随机将部分神经元的输出置零来实现,也是一种正则化手段.
7)利用带动量和权值衰减的mini-batch SGD对模型进行训练
Parameters: 60 million
Paper: ImageNet Classification with Deep Convolutional Neural Networks
ZF Net (2013)
由于AlexNet的提出,大型卷积网络开始变得流行起来,但是人们对于网络究竟为什么能表现的这么好,以及怎么样能变得更好尚不清楚,ZFNet就是为了解释上面的问题。
ZFNet,主要意义在于对于卷积神经网络的可视化和理解,使得CNN不在像一个完全的黑箱,可以通过模型可视化来诊断模型。
ZFNet的模型,是在AlexNet的基础上附加了deconvnet层,用来可视化。
文中发现了特征的层次化特性,第一二层主要是检测角落和其他边缘或者颜色的结合;第三层有更加复杂的不变性,捕捉到了相似的纹理;第四层显示了特定类间显著的差异性;第五层显示了有显著构成变化的整个物体。学习的过程,通常是由低级到高级。先学习简单的特征,如颜色,边缘等,在通过简单的特征组合成较高级的特征。
Parameters: ~60 million
Paper: Visualizing and Understanding Convolutional Networks
VGG(2014)
VGG有很多个版本,也算是比较稳定和经典的model。它的特点就是 Simplicity 和 depth。这就是2014年发表的模型最好的应用(虽然不是ILSVRC 2014的赢家),其错误率为7.3%。它严格地使用了带有stride和pad都为1的3x3过滤器,以及带有stride 2的2x2 maxpooling层。
Points:
1)只使用了3x3大小的过滤器 与第一层的AlexNet的11x11过滤器和ZF Net的7x7过滤器有很大的不同。
2)作者还给出了理由:两个3x3的conv层的组合有一个有效的5x5的接受域。这反过来模拟了一个更大的过滤器,同时保持较小的过滤器尺寸的好处。其中一个好处是参数数量的减少。另外,对于两个conv层,我们可以使用两个ReLU层而不是一个,提高了非线性的表达能力。3个连续的conv层具有7x7的有效接受域。
3)随着每一层特征图的尺寸减少,过滤器数量也在不断地增加。这应该是为了弥补由于池化导致的信息丢失。
4)在训练中使用比例抖动作为一种数据增强技术。
Parameters: 138 million
Paper: Very Deep Convolutional Networks for Large-Scale Image Recognition
Network In Network(2014)
通过串联数个卷积层块和全连接层块来构建深度⽹络
Points:
1)1*1 卷积层 对往后的网络设计产生了深远的影响
2)多层感知卷积层(Mlpconv Layer):使用 Conv+MLP 代替传统卷积层,增强网络提取抽象特征和泛化的能力;
传统的卷积神经网络是由:线性卷积层、池化层、全连接层堆叠起来的网络。卷积层通过线性滤波器进行线性卷积运算,然后再接非线性**函数,最终生成特征图。传统CNN中,我们可以用大量滤波器来提取潜在特征,这样会造成网络参数过多。
3)全局平均池化层(Global Average Pooling)
具体的实现就是为最后一个mlpconv层的分类任务的每个对应类别生成一个特征映射。 我们不是在特征图顶部添加全连接层,而是使用每个特征图的平均值,并将生成的矢量直接输入到softmax图层。
这样采用均值池化,1)去除了构建全连接层的大量参数,大大减小网络规模,有效避免过拟合;2)全局平均池化汇总(求和)空间信息,因此其对空间变换是健壮的。
NIN中有多个Mlpconv模块,它由⼀个正常的卷积层接上两个 kernel 是 1 × 1 的卷积层构成。后⾯两个充当两个全连接层的⻆⾊。
总结:NIN,很多想法,特别是1x1的卷积核,对后面的深度学习发展产生了重要的影响
Parameters: 29 million
Paper: Network In Network
Inception (GoogLeNet) (2015)
2014年,谷歌的研究人员在ImageNet的分类和检测挑战竞赛中引入了Inception网络。
这个模型由一个被称为“Inception cell”的基本单元组成,在这个单元中,我们在不同的尺度上执行一系列的卷积,然后汇总结果。
为了降低计算量,使用1x1卷积来减少输入通道深度。对于每个单元,我们学习了一组1x1、3x3和5x5过滤器,它们可以学习从输入中提取不同规模的特征。还使用了Max pooling,不过使用了“same”的padding来保存维度,以便正确地连接输出。
将这些Inception结构叠加起来,就构成了经典的GoogLeNet结构
后续的论文中,不断对Inception结构进行精细化的设计。
Inception V2
Points:
(1)加入了BN层,使每一层的输出都规范化到一个N(0, 1)的高斯,从而增加了模型的鲁棒性,可以以更大的学习速率训练,收敛更快,同时作为一种正则化技术,可以减少dropout层的使用。
(2)用2个连续的3x3 conv替代inception模块中的5x5,从而实现网络深度的增加,网络整体深度增加了9层,缺点就是增加了25%的weights和30%的计算消耗。
Inception v3 网络,主要在v2的基础上,提出了卷积分解(Factorization)。
Points:
(1) 将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以减少参数,加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性。
(2)增加网络宽度,网络输入从224x224变为了299x299。
Inception v4主要引入残差连接(Residual Connection)来改进v3结构,代表作为,Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4
Parameters: 5 million (V1) 、 23 million (V3) and 55million(InceptionResnetV2)
Papers:
Going deeper with convolutions
Batch Normalization: Accelerating Deep Network Training by ReducingInternal Covariate Shift
Rethinking the Inception Architecture for Computer Vision
Inception-v4,Inception-ResNet and the Impact of Residual Connections on Learning
ResNet(2015)
随着网络的加深,出现了训练集准确率下降的现象,我们可以确定这不是由于Overfit过拟合造成的(因为过拟合的情况训练集应该准确率很高),对于这种深度网络的退化问题,限制了模型的深度。ResNet的出现解决了这一问题,因此是继AlexNet之后的有一个里程碑。
所以作者针对这个问题提出了一种全新的网络,叫深度残差网络,它允许网络尽可能的加深,其中引入了全新的结构如图1;
ResNet的核心思想是:计算层到层的残差,即F(x),以F(x)+x作为输出。
ResNet正是有了这样的Skip Connection,来自深层的梯度能直接畅通无阻地通过,去到上一层,使得浅层的网络层参数等到有效的训练!
Parameters: 25 million (ResNet 50)
Papers:
- Deep Residual Learning for Image Recognition
- Identity Mappings in Deep Residual Networks
- Wide Residual Networks
DenseNet(2017)
DenseNet可以理解为极端版的ResNet,它的skip connection不仅仅只连接上下层,直接实现了跨层连接,每一层获得的梯度都是来自前面几层的梯度加成。
DenseNet在增加深度的同时,加宽每一个DenseBlock的网络宽度,能够增加网络识别特征的能力,而且由于DenseBlock的横向结构类似 Inception block的结构,使得需要计算的参数量大大降低。因而此论文获得了CVPR2017最佳论文奖项!
Parameters: 0.8 million (DenseNet-100)
Paper: Densely Connected Convolutional Networks
注:由于笔者水平尚浅,对上面的概念理解或许有偏差,欢迎各位指正,不胜感激。