【深度学习】框架演变-CNN经典结构

和很多领域一样,目前在深度学习领域有两个工作方向。一个是去寻找更为强大,但是也更为复杂的模型网络和实验方法,目的是 提高深度神经网络的性能(准确率) ,这类工作主要由 科研人员(学院派) 完成。复杂网络的实时性需求 催生了另一个工作方向,即研究如何将科研人员的研究成员落地到实际的硬件与应用场景中,并且要确保算法稳定高效,这类人员就是所谓的 工程派

本篇文章梳理前者中的一些经典的CNN演变结构和其核心思想。


1998年 LeNet-5

Y.Lecun 原文链接 Gradient-Based Learning Applied to Document Recognition

LeNet-5的结构图如下
在这里插入图片描述
LeNet-5网络共7层,不包含输入,每层都包含可训练参数。每层有多个FeatureMap,每个FeatureMap通过卷积滤波器提取输入的一种特征,每个FeatureMap有多个神经元。(具体原理可参见之前博客中对多层感知机和CNN算子的分析)

LeNet-5虽然简单,但包含了深度学习的基本模块,即 卷积层、池化层和全连接层 ,是一种用于手写体字符识别的非常高效的卷积神经网络。


2012年 AlexNet

Alex Krizhevsky 原文链接 ImageNet Classification with Deep Convolutional Neural Networks

AlexNet是2012年ILSVRC的冠军,在原始架构中有两条并行的处理管道,是为了让两个GPU协同工作,从而以更快的计算速度和内存共享来构建训练模型。按GPU划分的架构具有较少的权重,因为并非所有层都互连,减少一些互连可以缩短处理器之间的通信时间,有助于提高效率。
在这里插入图片描述
相比与LeNet,AlexNet的主要创新点在于:

  1. 用ReLU作为激活函数 :ReLU和Sigmoid不同,该函数是非饱和函数,成功解决Sigmoid在网络较深时的梯度弥散问题(梯度弥散,Sigmoid函数在饱和时的导数值接近于0)。
  2. 使用Dropout避免模型出现过拟合:在训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。
  3. 全部使用最大池化而非之前的平均池化。
  4. 实现数据增强:随机从256×256的原始图像中截取224×224大小的区域(以及水平翻转的镜像),相当于增强了(256-224)×(256-224)×2=2048倍的数据量。原始图像在使用了数据增强后,减轻了过拟合,提升了泛化能力。

值得说明的是,2013年ZFNet的一个变体Clarifai是2013年ILSVRC的获胜者。ZFNet与AlexNet在架构上没有太大区别,主要变化在于超参数的选择差异,如初始滤波器的步长由4变为2,以及在第三、四和五卷积层中使用更多的滤波器等。这提醒我们: 在使用深度学习算法时,小细节是重要的。 ZFNet将top-5错误率从AlexNet的15.4%降低到14.8%,Clarifai进一步增加 宽度/深度 后,top-5错误率降低到了11.1%.


2014年 VGG与GoogleLeNet

VGG是2014年ISLVRC中表现最好的一个项目,但它并不是获胜者。获胜者是GoogleNet,它的top-5错误率为6.7%,而VGG的错误率为7.3%。


VGG

Karen Simonyan 原文链接 Very Deep Convolutional Networks for Large-Scale Image Recognition

VGG体现了网络深度增加的发展趋势。VGG的一个重要创新就是减少了滤波器的尺寸, 减小滤波器尺寸需要增加深度 ,这是因为除非网络很深,否则一个小的滤波器只能捕捉到图像的一个小区域。 例如,在7×7的输入中,由3个3×3的连续卷积捕捉的单个特征将形成一个新的区域。注意,直接在输入数据上使用单个7×7滤波器也将捕获7×7输入区域的视觉特征。在第一种情况下,我们使用3×3×3=27个参数,而在第二种情况下,我们使用7×7×1=49个参数。因此,在使用3个连续卷积的情况下,参数占用的空间更小。同时,3次连续卷积通常能比一次卷积捕捉到更有趣、更复杂的特征,并且一次卷积得到的激活将看起来像原始边缘特征,于是7×7滤波器的网络将无法在较小的区域捕获复杂的形状。

在这里插入图片描述

一般来说,深度越大,非线性越强,正则化越强。由于存在更多的ReLU层,较深的网络将具有更大的非线性,并且由于增加的深度通过使用重复的卷积组合将结构强加于层而具有更大的正则化。VGG另外一个有趣的设计是,在每个最大池化层之后,滤波器的数量通常会增加到原来的2倍。这个想法是,每当空间占用减小到原来的1/2时,总是将深度增加到原来的2倍。这种设计导致了跨层计算某种程度上的平衡,并被后来的一些架构(如ResNet)所继承。


GoogleLeNet

Christian Szegedy 原文链接 Going deeper with convolutions

GoogleLeNet提出了一个新的概念,称为Inception(初始架构)。Inception是网络中的一个网络。 GoogleLeNet的开始部分十分类似于传统的卷积网络,关键是中间的Inception模块。Inception的基本思想是:图像中的关键信息可以在不同的细节层次上获得。如果使用大滤波器,就可以在包含有限变化的较大区域中捕获信息;如果使用较小的滤波器,就可以在较小区域中捕获详细信息。在Inception层中,前面的层能与不同尺寸(1×1、3×3和5×5)的滤波器并行卷积,让神经网络在不同的粒度级别灵活地建模图像。且由于Inception层上所有滤波器都是可学习的,所以神经网络可以决定哪些滤波器对输出影响大。

在这里插入图片描述


GoogleLeNet由9个按顺序排列的Inception模块组成,共22层,通过选择不同的路径,将能代表不同的空间区域。例如:通过4个3×3的滤波器和1个1×1的滤波器将捕获一个相对较小的的空间区域,而通过许多5×5的滤波器将得到更大的空间占用。不同尺度的对象用适当尺寸来相应处理,这种多粒度分解的灵活性正是由Inception模块实现的,也是其性能的关键之一。其架构中间的部分可参照如下

在这里插入图片描述

GoogleLeNet中还有一些有趣的设计改进,如
1.后续 批归一化与Inception结合使用,简化了网络架构。
2. 使用1×1卷积来降低特征图的深度,这被称为 瓶颈卷积 。在应用瓶颈后,由于减少了层的深度,最终也减少了特征图的深度,从而节省了较大卷积的计算效率。
3. 通过最终激活图集的整个空间区域的平均池化来创建单个值,而不使用全连接层,在最终层中创建的特征数将完全等于滤波器数。用平均池化层替代全连接层,大大减小了参数占用。


值得说明的是,Inception从此成为研究者关注的热点。在演进的Inception-v4中,其与ResNet中的一些思想相结合,创建了一个75层的架构,达到了低至3.08%的错误率!请注意:人类在归类数据库ImageNet中的图像时错误率为5.1%,因此,后续研究中如何进一步提高模型的准确率已经逐渐不再成为关注的重点,更多的关注转移到如何满足复杂网络的实时性需求。


2015年 ResNet

Kaiming He 原文链接 Deep Residual Learning for Image Recognition

ResNet使用了152层,乍一看,这比以前的其他架构都多了一个数量级,该架构在2015年的ILSVRC中获胜,并达到了3.6%的top-5错误率,从而产生了第一个具有人类水平性能的分类器。 训练这样一个深层次网络首先面临的问题是深度增加将带来梯度爆炸或梯度消失(多层激活函数导数值的累加势必阻碍合理的梯度流),这通过引入 批归一化 可以解决。除此之外,在深度增加后,学习过程难以在合理的时间内正确收敛,这种收敛问题在具有复杂损失面的网络中也很常见。

产生的这个基本想法是:尽管层次特征工程是神经网络学习的圣杯,但它的分层实现迫使图像中的所有图像都需要相同的抽象级别。一些概念可以通过使用浅层网络来学习,而另一些可能需要细粒度的连接。 当使用一个非常深的网络,在所有路径上都有一个固定的深度来学习概念时,收敛过程将非常缓慢,其中许多概念也可以使用浅层架构来学习。那么,为什么不让神经网络决定用多少层来学习每个特征呢?


ResNet使用层间的 跳跃连接 (Residual,残差),以便在层间复制。大多数前馈网络只包含第i层和第i+1层之间的连接,而Resnet包含第i层和第i+r层(r>1)之间的连接。构成Resnet基本单元的这种跳跃连接的示例如下
在这里插入图片描述

引入残差模块可以实现有效的梯度流,因为反向传播算法现在有一个超级高速公路,可以使用跳跃连接反向传播梯度。此外,由于有些层使用了跨步卷积来将每个空间维度缩小到原来的1/2,并使用更多的滤波器,深度增加到了2倍(参见VGG中跨层计算的平衡设计)。在这种情况下,不能在跳跃连接上直接使用恒等函数,而应用 线性投影矩阵 来调整维度。该投影矩阵定义了一组步长为2的1×1卷积运算,将空间范围缩小到原来的1/2,在反向传播过程中需要学习投影矩阵的参数。下图展现了ResNet架构的一部分,用实线表示了跳跃连接,用虚线表示了投影矩阵连接

在这里插入图片描述
在残差学习中,最短路径可以实现最大限度的学习,而较长的路径可以看作剩余贡献。这给学习算法提供了为特定输入选择合适的非线性的灵活性,沿较长路径的学习是沿较短路径的简易学习的一种微调。ResNet后续也产生了更多变体,如宽残差网络、高速公路网络和DenseNet等。


2017年 SENet

Jie Hu 原文链接 SENet

SENet是2017年ILSVRC收官赛的冠军,将错误率降低到了2.251%!与之前的研究专注于如何通过空间维度(如加深加宽网络)对网络性能进行提升不同,SENet通过对通道关系建模来提升网络性能。其要点在于:通过学习的方式的方式来自动获取每个通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征
在这里插入图片描述

SENet中关键的操作是Squeeze(压缩)和Excitation(激发)操作,这也是其命名的由来。

  1. S:顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。
  2. E:它是一个类似于循环神经网络中门的机制,通过参数来为每个通道生成权重,其中参数被学习用来显式地建模特征通道间的相关性。

SE模块首先对卷积得到的特征图进行Squeeze操作,得到channel级的全局特征,然后对全局特征进行Excitation操作,学习各个channel间的关系,以得到不同channel的权重,最后Reweight乘以原来的特征图得到最终特征。本质上,SE模块是在channel维度上做attention或者gating操作,这种注意力机制让模型可以更加关注信息量最大的channel特征,而抑制那些不重要的channel特征。

值得说明的是,SE模块的灵活性使得它可以直接应用于现有的网络结构中,如Inception和ResNet。且在引入SE模块后,参数量上的增加带来的计算量并不显著,却能有效提升性能。



《移动平台深度神经网络实战 原理、架构与优化》第8章 卢誉声 机械工业出版社
《神经网络与深度学习》第8章 Charu C.Aggarwal 机械工业出版社
SENet参考博文 :https://blog.csdn.net/gaoxueyi551/article/details/120233959 和 https://zhuanlan.zhihu.com/p/65459972/

猜你喜欢

转载自blog.csdn.net/weixin_47305073/article/details/128183676