该文章参考:https://mp.weixin.qq.com/s/Ox8IeC_K-3teYlmq4I6TCA
瓶颈模块
作用:减少卷积的参数
实现:使用成本较低的1x1卷积以特定速率r来降低通道数量,从而使后续的3x3卷积的参数更少。最后,再使用另一个1x1卷积来拓宽网络。
code:
Inception模块
作用:网络可以学习不同类型的过滤器
实现:并行地使用不同操作然后融合结果
code:
这段代码使用一个最大池化融合了卷积核大小为1、3、5的卷积层。在实践中,还会将其与上述的瓶颈思想结合起来。
code:
残差模块
作用:ResNet(残差网络)是微软的研究者提出的一种架构,能让神经网络拥有他们想要的任何层数,同时还能提升模型的准确度。
实现:在卷积模块的输出上添加初始激活。
code:
与Inception不同:Inception模块是连接输出,而残差模块是添加它们。
ResNeXt模块
作用:研究者为卷积模块引入了基数(cardinality)项,以作为类似于宽度(通道数量)和深度(层数)的又一维度
。
基数是指现在模块中的并行路径的数量。不同于Inception模块的并行操作,当基数为4时,其并行使用的4个操作是相同的。
code:
其思想是将所有输入通道划分为不同的组别。卷积仅在它们指定的通道组内操作,不能跨组进行。研究发现,每个组都会学习到不同类型的特征,同时也能提升权重的效率。
假设有一个瓶颈模块,首先使用4的压缩率将256的输入通道降低到64,然后再将它们返回到256个通道作为输出。如果我们想引入一个32的基数和2的压缩率,那么我们就会有并行的32个1x1的卷积层,其中每个卷积层有4个输出通道(256/(32*2))。之后,我们会使用32个带有4个输出通道的3x3卷积层,后面跟着32个带有256个输出通道的1x1层。最后一步涉及到叠加这32个并行路径,这能在添加初始输入构建残差连接之前提供一个输出。
Dense模块
密集(dense)模块是残差模块的一个极端版本,其中每个卷积层都会获得该模块所有之前的卷积层的输出。
实现: 首先,我们将输入激活添加到一个列表中,之后进入一个在模块的深度上迭代的循环。每个卷积输出也都连接到该列表,这样后续的迭代会得到越来越多的输入特征图。
code:
Squeeze-and-Excitation模块
SENet曾短暂地也在ImageNet上达到过最佳表现。它基于ResNeXt,并且重在建模网络通道方面的信息。
SENet引入了一种非常简单的模块,可以添加到任何已有的架构中。它会创建一个小型神经网络,该网络能学习如何根据输入情况为每个过滤器加权
。
code:
每个通道都被压缩成单个值,并被馈送给一个两层神经网络。根据通道的分布情况,该网络学习基于它们的重要性为这些通道加权。最后这些权重会与卷积激活相乘。
NASNet Normal Cell
NASNet 的提出者通过人工方式定义了一个包含不同类型的卷积和池化层的搜索空间,其中包含不同的可能设置。他们还定义了这些层可以并行或顺序排布的方式以及添加或连接的方式。定义完成后,他们基于一个循环神经网络构建了一个强化学习算法,其奖励是提出了在CIFAR-10数据集上表现优良的特定设计。
NASNet 由 Normal Cell 和 Reduction Cell 构成,它们在彼此之后重复。
code:
倒置残差模型
研究者想出了一个做法,做瓶颈残差模块相反的事。他们增多了使用低成本 1×1 卷积的通道的数量,因为后续的可分离卷积层能够极大降低参数数量。它会在关闭这些通道之后再添加到初始激活。
code:
最后还有一点:这个可分离卷积之后没有激活函数。相反,它是直接被加到了输入上。研究表明,在纳入某个架构之后,这一模块是非常有效的。
AmoebaNet Normal Cell
AmoebaNet 是当前在 ImageNet 上表现最好的,甚至在广义的图像识别任务上可能也最好。类似于 NASNet,它是由一个算法使用前述的同样的搜索空间设计的。唯一的区别是他们没使用强化学习算法,而是采用了一种常被称为「进化(Evolution)」的通用算法。该算法工作方式的细节超出了本文范围。最终,相比于 NASNet,研究者通过进化算法用更少的计算成本找到了一种更好的方案。