说在前面

  • 上一篇文章中,我们详细说了CNN的主要结构组成和训练原理,今天我们来回顾一下CNN的网络模型发展史,主要学习CNN是如何被提出来?网络结构如何进化?每一次改进解决的问题?等等,这对理解网络模型有很好的帮助,并且在我的毕业设计中可以根据数据合理选取网络模型。

  • 在1998年前的CNN发展史这篇博客 http://www.lunarnai.cn/2018/07/03/Brief_history_CNN/ 已经叙述的很详尽了,有兴趣的可以看一下,基本上是如何从动物中获取灵感构建计算机的神经网络模型,下面我只阐述重大的CNN模型突破节点。

1. LeNet-5 (1998)

  • 原文链接:http://axon.cs.byu.edu/~martinez/classes/678/Papers/Convolution_nets.pdf Gradient-Based Learning Applied to Document Recognition.

  • LeCun同志可以说是CNN的开山鼻祖,1998年他提出了长达46页的巨作——LeNet-5模型,其模型结构如下图所示:

    image-20210405171842663

    LeNet-5模型一共有7层,卷积层-池化层-卷积层-池化层-3个全连接层,为什么叫LeNet-5呢,因为当时默认卷积层包括卷积+池化,所以等价于2个卷积层+3个全连接层,一共5层。当时主要用LeNet-5进行邮件上的手写邮政编码数字识别,取得了不错的效果。

    此外LeNet-5还有一些有趣的细节,一个是使用了tanh作为激活函数,这里作者表示对称的激活函数能够更快收敛,,这里不用ReLU的原因可能在于98年的时候,网络的深度还不太深,因此梯度消失不是一个太大的问题,而相比之下加速收敛的性质更加重要。

    此外论文在附录对比了随机梯度下降和批梯度下降 ,指出随机梯度下降以及mini-bath SGD能够极大加快拟合速度,并且最终效果很好。

    优点:这种网络当时提出来成为了CNN标准的“模板”——叠加卷积层和池化层,并以一个全连接层结束网络。

    缺点:当时一段时间并未火起来,原因在于当时历史背景,这个简单的网络仅有6000多个参数,但训练起来费时且没有GPU加速,相比较于传统的SVM等算法,效率还是差了许多,所以并没有大放异彩。

2. AlexNet (2012)

  • 可以看到硬件跟不上,1998年到2012年中间十多年没有新的CNN网络提出来,但是在2006年,研究人员成功利用GPU加速了CNN,相比CPU实现快了4倍,可以说是一个大的突破,也为12年的AlexNet打下了良好的基础。

  • 原文链接:https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf ImageNet Classification with Deep Convolutional Neural Networks.

  • 相比于LeNet-5,AlexNet仅仅多堆叠了卷积层,一共有8个网络层,网络模型如下图所示:

    image-20210405174059025

    这个图看上去有点费劲,转换一下就是下面这幅图:

    由卷积层-池化层-卷积层-池化层-3个卷积层-池化层-3个全连接层组成。整体来看除了卷积层增多了,没有大的改变。

    创新点

    1. 使用ReLu激活函数,不容易发生梯度消失问题。
    2. 对输入的数据进行了数据增强处理。(水平变换、光照增强、随机裁剪、平移变换等等)
    3. 首次使用Dropout防止过拟合。
    4. 采用两块GPU并行计算,最上面那张图就是每一层分两块进行计算,所以看着比较繁琐,这里也是由于GPU不是很好,所以要两块并行。

3. VGG (2014)

  • 原文链接:https://arxiv.org/pdf/1409.1556.pdf VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION.

  • VGG 提出了几种网络模型分别是 VGG13、VGG16、VGG19,他们的网络结构如下图所示:

    相比AlexNet,仅仅是堆叠了更多的卷积层、池化层,整体来看和文章名字一样Very Deep。下图是VGG19的具体结构图:

    在VGG中也是引入了1×1的卷积核,可以改变输出的维度。

4. GoogLeNet (2015)

  • 论文链接:https://arxiv.org/pdf/1409.4842.pdf Going deeper with convolutions.

  • GoogLeNet (网络没有最深,只有更深),这里名字起的很好,致敬了LeNet,这真的只是巧合吗???GoogLeNet 引入了新的网络结构Inception-v1,也是“Network in Network”,(Inception得名于2010年由莱昂纳多·迪卡普里奥主演的科幻电影《盗梦空间》)。

  • Inception的网络模型如下图所示:

    使用不同的卷积并行拓扑结构,然后进行连接,获得1×1、3×3、5×5卷积提取的不同特征,然后对他们进行归并融合;采用1×1的卷积进行降维,消除计算瓶颈,作者还引入了两个辅助分类器,使分类器在较浅层的网络也进行识别,增加反向传播的梯度信息。

  • 后来Inception也有了V2、V3、V4版本,论文连接如下,感兴趣的同学可以了解一下。

    https://arxiv.org/pdf/1502.03167.pdf Batch Normalization: Accelerating Deep Network Training b y Reducing Internal Covariate Shift

    https://arxiv.org/pdf/1512.00567.pdf Rethinking the Inception Architecture for Computer Vision

    https://arxiv.org/pdf/1602.07261.pdf Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

5. ResNet (2015)

  • 论文链接:https://arxiv.org/pdf/1512.03385.pdf Deep Residual Learning for Image Recognition.

  • ResNet 叫深度残差网络,是由中国广东的何凯明大神在2015年CVPR上提出来的,并且一经出世,就在ImageNet中斩获图像分类、检测、定位三项冠军!这篇论文的影响力可以说是非常巨大,后面的几乎所有的CNN论文都引用的这篇ResNet。(我的毕业设计也采用的ResNet网络模型);这篇论文也是突破了一个瓶颈,解决了CNN网络深度的重大问题(稍后解释),总之,我觉得这篇论文的影响力十分巨大,相比之前CNN模型的进化(仅仅是网络深度),ResNet是质的改变!

  • ResNet提出前发现的问题?

    在之前的经验来看,从LeNet到AlexNet再到VGG、GoogLeNet,网络深度不断增加,模型性能越来越好,那么就想:是否网络深度不断增加,性能会一直增加?但实验结果发现,深度网络中存在着退化问题,如下图所示:56层的网络比20层的网络训练效果还差

    image-20210407110009997

    这种情况并不是发生了过拟合,过拟合是训练误差小而测试误差大,而上面的图片显示训练误差和测试误差56层的网络都大。

  • 造成这样不符合常理的现象原因是?

    随着网络深度的增加,反向传播的梯度也在逐渐减小,这就是所谓的梯度消失现象,网络越深,反向传播的梯度会越来越小,导致梯度下降更慢,浅层的网络不能够更新梯度,训练没有突破。

  • 解决办法?——“short cut” or “skip connection” or “resNet”

    话不多说直接上图,ResNet提出了一种新的结构解决了上述梯度消失的问题,下面是基本结构单元:

    在正常的卷积层旁边加了一条短接线short cut,也就是常说的skip connection,假设正常卷积层输出是F(x),旁边输出是x,则最终两条路线相加为h(x) = F(x) + x,得到的h(x)再传到下一层,当反向传播时,下面来自深层网络传回来的梯度假设为1,经过一个加法门,通过短接线传到上面的梯度也为1,这样就可以将深层的梯度直接畅通无阻地传到上一层,使得浅层地网络参数得到训练,解决了梯度消失的问题。

  • 下面是与VGG的网络结构对比图

    这里说明一下ResNet中的虚线和实线的区别:实际上ResNet有两个基本的block,一个是Identity Block输入和输出的维度是一样的,也就是实线所表示的,它可以串联多个;另外一个block是Conv Block,输入和输出的维度是不一样的,所以不能直接串联,要在短接线处加一个1×1的卷积层,改变维度使得两条路径的维度一致。(随着网络深度增加,channel也增加)具体的结构如下图所示:

    20

  • 这样作者通过构建不同卷积核的个数,以及组合模式,给出了以下几种ResNet的结构模型:

    21

  • ResNet特点:残差网络在模型表征方面并不存在直接的优势,ResNets并不能更好的表征某一方面的特征,但是ResNets允许逐层深入地表征更多的模型。

    残差网络使得前馈式/反向传播算法非常顺利进行,在极大程度上,残差网络使得优化较深层模型更为简单。

    “shortcut”快捷连接添加既不产生额外的参数,也不会增加计算的复杂度。快捷连接简单的执行身份映射,并将它们的输出添加到叠加层的输出。通过反向传播的SGD,整个网络仍然可以被训练成终端到端的形式。


以上是我目前了解到的网络模型,下面的网络模型是近几年的,也分别给出了论文和解析链接:

6. Xception (2016)

7. Inception-ResNet-v2 (2016)

8. ResNeXt-50 (2017)

9. Inception v1 - v4 Inception-ResNet

结尾

  • 以上就是CNN的网络模型发展史,后面的几个模型我也没有深入研究,因为我做的毕业设计就是用的ResNet,所以后面会重点说ResNet的实现过程。
  • 其次一些目标检测的模型在这里没有提及,比如Fast-RCNN、SSD、YOLO V1-V3等等,后期会专门介绍一篇目标检测的框架算法进化史。