你了解不同的卷积神经网络(CNNs)吗?近年来,我们见证了无数CNNs的诞生。这些网络已经发展得如此深入,以至于很难将整个模型可视化。我们不再细究它们的原理,而是把它们当作黑盒模型。
本文展示了10种常见CNN架构的可视化,可任您挑选。这些可视化图使我们对整个模型有了更加清晰的了解,而不需要向下滚动几次才可以看到softmax层。
所谓“常见”,我指的是那些深度学习库(如TensorFlow、Keras和PyTorch)共享的有预训练权重的模型,以及通常在课堂上所讲的模型。其中一些模型在ImageNet大规模视觉识别挑战赛(ILSVRC)等竞赛中取得了成功。
我们将讨论在Keras中具有预训练模型的6种架构。上图改编自Keras文档中的一个表。
补充一点,我们平时看到的卷积神经网络架构是很多因素的结果——升级的计算机硬件、ImageNet比赛、处理特定的任务、新的想法等等。Google 研究员 Christian Szegedy曾提到:
“这种进步大多不来自于更强大的硬件、更多的数据集和更大的模型,而主要来源于新的想法、算法和优化的网络结构。”(Christian Szegedy等人,2014)
现在我们继续介绍,看看网络结构是如何慢慢优化起来的。
关于可视化图的说明:可视化图中没有再标注卷积核数量、padding、stride、dropout和拉平操作。
Legend
1. LeNet-5 (1998)
它有2个卷积层和3个全连接层(因此是“5”——神经网络的名称通常是由它们拥有的卷积层和全连接层的数量派生出来的)。我们现在所知道的平均池化层被称为子采样层,它具有可训练的权重(和当前设计CNNs不同)。这个架构有大约60,000个参数。
2. AlexNet
AlexNet网络有6千万个参数,8个网络层——5个卷积层和3个全连接层。相比于LeNet-5,AlexNet只是堆了更多的网络层。
在论文发表时,作者指出AlexNet是“在ImageNet子集上训练的最大的卷积神经网络之一。”
⭐️创新点
1.他们首次实现将线性整流函数(ReLus)作为激活函数。
2.使用卷积神经网络的重叠池化。
3. VGG-16 (2014)
你现在应该已经注意到CNNs开始变得越来越深了。这是因为提高深度神经网络性能最直接的方法是增加它们的大小(Szegedy et. al)。Visual Geometry Group (VGG)的工作人员提出了VGG-16,它有13个卷积层和3个全连接层,继续采用了AlexNet的ReLU激活函数。同样,这个网络只是在AlexNet上堆叠了更多的层。它有138M的参数,占用😱大约500mb的磁盘空间。他们还设计了一种更深的变型,VGG-19。
4. Inception-v1 (2014)
这个22层网络架构具有5M的参数,被称为 Inception-v1 网络 。这个架构,如论文中所述,大量使用了Network In Network(参见附录)方法。这是通过“Inception 模块”实现的。Inception模块的架构设计是对稀疏结构近似研究的产物(更多信息请阅读论文)。每个模块有3个点改进:
1.使用不同卷积的并行拓扑结构,然后进行连接,获得1×1、3×3和5×5卷积提取的不同特征,从而对它们进行“归并”。这一想法的灵感来自Arora等人在论文Provable bounds for learning some deep representations,改论文提出了一种逐层构建的方法,即分析最后一层的相关统计数据,并将其归并成具有高相关性的单元组。
2.采用1×1卷积进行降维,消除计算瓶颈。
3.1×1卷积在卷积层中加入非线性(基于Network In Network论文)。
4.作者还引入了两个辅助分类器,以使分类器在较浅层的网络部分也进行识别,以增加反向传播的梯度信息,并提供额外的正则化。辅助网络(连接到辅助分类器的分支)在推断时被丢弃。
注意:模块的名称(Stem和Inception)一直没有采用Inception,直到后来的版本,即Inception-v4 和Inception-ResNets,才用于这个Inception版本。我把它们加在这里是为了便于比较。
5. Inception-v3 (2015)
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版本。我把它们加在这里是为了便于比较。
⭐️创新点
1.引入BN层(为了简单起见,没有反映在上面的图中 )。
✨与之前的版本 Inception-v1 相比,有什么改进?
2.将7×7卷积替换为一系列3×3个卷积
6. ResNet-50 (2015)
⭐️创新点
1.推广跳连接结构skip connections (首批使用批标准化的)。
7. Xception(2016)
Xception是从Inception上改进,Inception模块用通道独立卷积层替换。它与Inception-v1的参数数量大致相同(23M)。
Xception将Inception假设引入eXtreme(因此而得名)。那么什么是Inception假设?谢天谢地,文章中明确提到了这一点(感谢François!)
- 首先,通过1x1卷积核捕获跨通道(或交叉特征映射)相关性。
- 其次,通过常规3x3或5x5卷积捕获每个通道内的空间相关性。
将这个想法运用到极致意味着对每个通道执行1x1卷积,然后对每个输出执行3x3。这与用通道独立卷积替换初始模块相同。
⭐️创新点
1. 引入完全基于通道独立卷积层的CNN。
8. Inception-v4 (2016)
来自谷歌的人员再次使用有43M个参数的Inception-v4网络进行了进一步改进。同样,这是 Inception-v3 的一个改进。主要的区别是Inception-C模块中的Stem块和一些微小的变化。作者还“为每个网格大小的 Inception块做了统一的选择”。他们还提到,拥有“残差连接可以显著提高训练速度。”
10. ResNeXt-50 (2017)
为了帮助大家让学习变得轻松、高效,给大家免费分享一大批资料,让AI越来越普及。有啥不懂的可以加QQ群:519970686 ,交流讨论,学习交流,共同进步。
当真正开始学习的时候难免不知道从哪入手,导致效率低下影响继续学习的信心。
但最重要的是不知道哪些技术需要重点掌握,学习时频繁踩坑,最终浪费大量时间,所以拥有有效资源还是很有必要的。