写这篇文章的初心是考虑到目前没有太多图解网络结构的博客和文章(如果你知道相关的文章,请分享给我吧)。所以我决定写一篇文章来作为参考。出于这样的目的,我阅读了许多论文和代码(大多来自TensorFlow和Keras)来完成这篇文章。
补充一点,我们平时看到的卷积神经网络架构是很多因素的结果——升级的计算机硬件、ImageNet比赛、处理特定的任务、新的想法等等。Google 研究员 Christian Szegedy曾提到:
- “这种进步大多不来自于更强大的硬件、更多的数据集和更大的模型,而主要来源于新的想法、算法和优化的网络结构。”(Christian Szegedy等人,2014)
现在我们继续介绍,看看网络结构是如何慢慢优化起来的。- 关于可视化图的说明:可视化图中没有再标注卷积核数量、padding、stride、dropout和拉平操作。
目录(按发表年份排序)
图例
1. LeNet-5 (1998)
图1:LeNet-5架构,引自他们的论文
LeNet-5是最简单的架构之一。它有2个卷积层和3个全连接层(因此是“5”——神经网络的名称通常是由它们拥有的卷积层和全连接层的数量派生出来的)。我们现在所知道的平均池化层被称为子采样层,它具有可训练的权重(和当前设计CNNs不同)。这个架构有大约60,000个参数。
⭐️创新点
这种架构已经成为标准的“模板”:叠加卷积层和池化层,并以一个或多个全连接层结束网络。
📝发表
作者: Yann LeCun, Léon Bottou, Yoshua Bengio, and Patrick Haffner
发表于: Proceedings of the IEEE (1998)
2. AlexNet
AlexNet网络有6千万个参数,8个网络层——5个卷积层和3个全连接层。相比于LeNet-5,AlexNet只是堆了更多的网络层。
在论文发表时,作者指出AlexNet是“在ImageNet子集上训练的最大的卷积神经网络之一。”
⭐️创新点
他们首次实现将线性整流函数(ReLus)作为激活函数。
使用卷积神经网络的重叠池化。
📝发表
作者:Alex Krizhevsky, IIya Sutskever, Geoffrey Hinton. 加拿大,多伦多大学
发表于:2012年神经信息处理系统会议(NeurIPS 2012)
3. VGG-16 (2014)
你现在应该已经注意到CNNs开始变得越来越深了。这是因为提高深度神经网络性能最直接的方法是增加它们的大小(Szegedy et. al)。Visual Geometry Group (VGG)的工作人员提出了VGG-16,它有13个卷积层和3个全连接层,继续采用了AlexNet的ReLU激活函数。同样,这个网络只是在AlexNet上堆叠了更多的层。它有138M的参数,占用😱大约500mb的磁盘空间。他们还设计了一种更深的变型,VGG-19。
⭐️创新点
正如他们在摘要中提到的,本文的贡献在于设计了更深层次的网络(大约是AlexNet的两倍)。
📝发表
论文: Very Deep Convolutional Networks for Large-Scale Image Recognition
作者: Karen Simonyan, Andrew Zisserman. University of Oxford, UK.
arXiv 印本, 2014
4. Inception-v1 (2014)
图4:Inception-v1架构。这个CNN有两个辅助网络(在推断时被丢弃)。体系结构引自论文中的图3。
这个22层网络架构具有5M的参数,被称为 Inception-v1 网络 。这个架构,如论文中所述,大量使用了Network In Network(参见附录)方法。这是通过“Inception 模块”实现的。Inception模块的架构设计是对稀疏结构近似研究的产物(更多信息请阅读论文)。每个模块有3个点改进:
使用不同卷积的并行拓扑结构,然后进行连接,获得1×1、3×3和5×5卷积提取的不同特征,从而对它们进行“归并”。这一想法的灵感来自Arora等人在论文Provable bounds for learning some deep representations,改论文提出了一种逐层构建的方法,即分析最后一层的相关统计数据,并将其归并成具有高相关性的单元组。
采用1×1卷积进行降维,消除计算瓶颈。
1×1卷积在卷积层中加入非线性(基于Network In Network论文)。
作者还引入了两个辅助分类器,以使分类器在较浅层的网络部分也进行识别,以增加反向传播的梯度信息,并提供额外的正则化。辅助网络(连接到辅助分类器的分支)在推断时被丢弃。
注意:模块的名称(Stem和Inception)一直没有采用Inception,直到后来的版本,即Inception-v4 和Inception-ResNets,才用于这个Inception版本。我把它们加在这里是为了便于比较。
⭐️创新点
- 使用稠密modules/blocks构建网络。我们并非堆叠卷积层,而是堆叠modules或blocks,其中包含卷积层。Inception得名于2010年由莱昂纳多·迪卡普里奥主演的科幻电影《盗梦空间》。</divpara-item></ahelp_4"></divch-text"></divfinished-text"></divpara-item></spanmicrosoft>
📝发表
作者:Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich. Google, University of Michigan, University of North Carolina
发表于: 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)
5. Inception-v3 (2015)
图5:Inception-v3架构。这个CNN有一个辅助网络(在推理时被丢弃)。*注意:所有卷积层后面都是batch norm和ReLU激活。架构引自他们的GitHub代码。
Inception-v3是Inception-v1的后续版本,具有24M的参数。等等,Inception-v2在哪?不用担心——这是v3的早期原型,因此它与v3非常相似,但并不常用。当作者们提出 Inception-v3时,他们对其进行了许多实验,并记录了一些成功的调整。 Inception-v3 是包含这些调整的网络(优化器的调整、损失函数以及向辅助网络中的辅助层添加BN层)。
注意:模块的名称(Stem,Inception-A, Inception-B等)一直没有采用Inception,直到后来的版本,即Inception-v4 和Inception-ResNets,才用于这个Inception版本。我把它们加在这里是为了便于比较。
⭐️创新点
- 引入BN层(为了简单起见,没有反映在上面的图中 )。
✨与之前的版本 Inception-v1 相比,有什么改进?
将n×n卷积分解为非对称卷积:1×n和n×1卷积
将5×5卷积分解为两个3×3卷积运算
将7×7卷积替换为一系列3×3个卷积
📝发表
论文:Rethinking the Inception Architecture for Computer Vision
作者:Christian Szegedy, Vincent Vanhoucke, Sergey Ioffe, Jonathon Shlens, Zbigniew Wojna. Google, University College London
发表于:2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)
6. ResNet-50 (2015)
图6:ResNet-50架构,基于keras-team的GitHub代码
这就是本篇文章开头问题的答案。在前几个CNNs中我们发现他们是通过增加层数来获得更好的性能,但是随着网络深度的增加,准确度达到饱和(这可能并不令人惊讶),然后迅速下降。微软研究院的研究人员使用ResNet解决了这个问题——使用skip connections(又叫 shortcut connections, residuals),同时构建更深层次的模型。
ResNet是最早采用批量标准的一批架构((Ioffe和Szegedy在2015年向ICML提交了批量标准化论文)上面显示的是ResNet-50,参数为26M。
ResNets的基本构建块是conv和identity块。因为它们看起来很像,您可以这样简化ResNet-50(不要引用我的话):⭐️创新点
推广了skip connections (他们不是最开始用skip connections的人;
设计更深层的CNNs(多达152层),而不损害模型的泛化能力;
首批使用批量标准化。
📝发表
作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun. Microsoft
发表于: 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)
7. Xception(2016)
图7:Xception 架构,基于keras-team在GitHub上的代码。通道独立卷积层被记作'conv sep'。
Xception是从Inception上改进,Inception模块用通道独立卷积层替换。它与Inception-v1的参数数量大致相同(23M)。
Xception将Inception假设引入eXtreme(因此而得名)。那么什么是Inception假设?谢天谢地,文章中明确提到了这一点(感谢François!)
首先,通过1x1卷积核捕获跨通道(或交叉特征映射)相关性。
其次,通过常规3x3或5x5卷积捕获每个通道内的空间相关性。
将这个想法运用到极致意味着对每个通道执行1x1卷积,然后对每个输出执行3x3。这与用通道独立卷积替换初始模块相同。
⭐️创新点
- 引入完全基于通道独立卷积层的CNN。
📝发表
论文:Xception: Deep Learning with Depthwise Separable Convolutions
作者:François Chollet. Google.
发表于:2017 IEEE Conference on Computer Vision and Pattern Recognition(CVPR)
8. Inception-v4 (2016)
图8: Inception-v4架构。这个CNN有一个辅助网络(在推理时被丢弃)。*注意:所有卷积层后面都是batch norm和ReLU激活。架构引自他们的GitHub代码。
来自谷歌的人员再次使用有43M个参数的Inception-v4网络进行了进一步改进。同样,这是 Inception-v3 的一个改进。主要的区别是Inception-C模块中的Stem块和一些微小的变化。作者还“为每个网格大小的Inception块做了统一的选择”。他们还提到,拥有“残差连接可以显著提高训练速度。” 总而言之,注意前面提到过incepp -v4工作得更好,因为它增加了模型大小。
✨与之前的版本 Inception-v3 相比,有什么改进?
更换了Stem模块
添加了更多的Inception 模块
incep -v3模块 统一选择,意味着为每个模块使用相同数量的过滤器
📝发表
论文: Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
作者: Christian Szegedy, Sergey Ioffe, Vincent Vanhoucke, Alex Alemi. Google.
发表于: Proceedings of the Thirty-First AAAI Conference on Artificial Intelligence
9. Inception-ResNet-V2 (2016)
图9:incepated - resnet - v2架构。*注意:所有卷积层后面都是batch norm和ReLU激活。架构引自他们的GitHub代码。</spanmicrosoft>
在发表 Inception-v4网络的同一篇文章中,作者还介绍了Inception-ResNets网络家族—Inception-ResNet-v1和Inception-ResNet-v2。后者有56M个参数。
✨与前一个版本 Inception-v3 相比,有什么改进?
将 Inception模块转化为Residual Inception模块。
加入更多的Inception模块。
在Stem模块之后添加一个新的Inception模块(Inception-A)。
📝发表
论文: Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
作者: Christian Szegedy, Sergey Ioffe, Vincent Vanhoucke, Alex Alemi. Google
发表于: Proceedings of the Thirty-First AAAI Conference on Artificial Intelligence
10. ResNeXt-50 (2017)
Fig. 10: ResNeXt架构, 引自对应论文.
你可能会联想到ResNets,没错,它们是相关的。ResNeXt-50有25M (ResNet-50有25.5M)。ResNeXts的不同之处在于在每个模块中添加了并行塔/分支/路径,如上面的“总共32个塔”所示。
⭐️ 创新点:
在一个模块中增加并行塔的数量(“基数”)(我的意思是,Inception网络已经对此进行了探索……)
📝发表:
论文: Aggregated Residual Transformations for Deep Neural Networks
作者: Saining Xie, Ross Girshick, Piotr Dollár, Zhuowen Tu, Kaiming He. University of California San Diego, Facebook Research
发表于: 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)
附录:Network In Network (2014)
回想一下,在卷积中,像素的值是滤波器和当前滑动窗口中权重的线性组合。作者提出用一个隐层的微型神经网络代替这种线性组合。这就是他们创造的Mlpconv。这里我们要处理的是卷积神经网络中的一个隐层网络。
Mlpconv的这种思想类似于1×1卷积,并成为Inception架构的主要特性。
⭐️创新点
MLP卷积层, 1×1卷积
全局平均池化(取每个特征map的平均值,并将结果向量输入softmax层)
📝发表
作者: Min Lin, Qiang Chen, Shuicheng Yan. National University of Singapore
arXiv印本, 2013
这里把10个网络结构的可视化图再罗列一下,作简单的回顾: