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