1.3 网络的基本块
在对目标领域的网络结构进行总结之后,我们需要对网络进行抽象,得到多个更小的基本块。图像领域的神经网络一般包括如表1-1所示的几种基本块。
表1-1 网络基本块
下面简要介绍其中几种基本块。
1.残差块
如图1-4所示,残差块(residual block)是残差网络的基本组成单元,是为了缓解随着网络层数增加导致的梯度消失问题而引入的。
在实际网络中,为了解决特定的问题,残差块出现了很多变种。如图1-5所示,在残差结构中使用1×1的卷积进行降维和升维。
图1-4 残差块
图1-5 在残差结构中使用1×1的卷积进行降维和升维
当残差结构与主干之间的维度不一致时,在残差结构中使用1×1的卷积进行维度调整,如图1-6所示。
图1-6 在残差结构中使用1×1的卷积进行维度调整
在基本残差块的基础上,还可以调整直连的位置,如图1-7所示。
图1-7 调整直连的位置
对于残差分支,可以采用不同的操作,以满足特定目的。如图1-8所示,分别对应的操作是固定比例(constant scale)、专用通道(exclusive gating)、直连通道(shortcut-only gating)、丢弃直连(dropout shortcut)。
图1-8 残差块的其他变形
图1-8 残差块的其他变形(续)
2.初端块
初端块(inception block)是GoogLeNet的基本组成单元。GoogLeNet已经演进了好几个版本,每个版本的初端块结构不尽相同。第一版的初端块由1×1、3×3、5×5的卷积层和3×3的池化层组成,目的是从一个相同的层中提取不同尺寸的特征,增强单层特征的提取能力,结构如图1-9所示。
图1-9 第一版初端块的结构
在基本初端块的基础上,可以增加额外的层来达到降低计算量的目的,如图1-10所示。
图1-10 给初端块增加额外的层
为了进一步减少计算量和参数量,在第三版初端块GoogLeNet中,对卷积核的尺寸进行了调整,如图1-11、图1-12所示。
GoogleNet在后续版本中调整了初端块的具体实现细节,但是初端块的结构没有很大变化。
图1-11 第三版初端块的更多变形
图1-12 第三版初端块结构
3.残初块
残初块(inception_residual block)是将残差块和初端块结合在一起使用,以获得杂交优势。图1-13所示是在inception_resnet(在初端块中引入ResNet的残差结构的网络结构)中使用的残初块。
图1-13 在inception_resnet中使用的残初块
4.跳块
跳块(skip block)是指在网络中跳着对不同的层进行卷积运算,通过上池化和下池化操作得到相同尺寸的特征图并拼接在一起。图1-14是一个采用跳块的网络。
5.组卷积块
组卷积块(depthwise separable block)是为了降低参数量和运算量,将输入特征图分成多个组,卷积运算限制在对应的组内进行。在AlexNet中,特征图被分成了两组,而MobileNet将分组做到了极致,每组仅包含一个通道的特征图。组卷积块可以显著降低参数量和运算量,使神经网络部署在嵌入式设备上成为可能。图1-15是MobileNet中使用的组卷积块。
图1-14 跳块示意图
图1-15 MobileNet中使用的组卷积块
6.融合块
融合块(feature cascade chaining)常用于网络中多个子网络数据的融合,融合一般通过对应元素的乘法、加法运算来实现。图1-16是Multipath中使用的融合块。
图1-16 Multipath中使用的融合块
7.多并行块
多并行块是某些网络为了提高检测精度,引入少数服从多数的投票机制,即最后由多个全连接层组成。图1-17是Parallel FC中使用的多并行块(multistep net path feature maxout block)。
图1-17 Parallel FC中使用的多并行块
基于类似的思路,某些网络将少数服从多数的机制发扬光大,引入多个卷积层,甚至引入多个网络。图1-18是MultiStep Net中使用的多并行块。
图1-18 MultiStep Net中使用的多并行块
除了以上介绍的基本块,还有很多奇异的网络中使用的奇异的结构。算法研究者为了提高检测精度,在深度学习拓荒时代进行硬件架构的设计时,要求架构师不仅把已有的算法理解透彻,还要判断未来的趋势。再加上芯片项目周期较长,如何保证芯片上市时仍然具有竞争力,对任何架构师都是不小的挑战。