![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=1739595398-FnkiG5RPCSDYVNrQus8hMEsRqA0mJ3bU-0-93ad9e757e6cfe6f487820f1dcdc9b58)
下面简要介绍其中几种基本块。
1.残差块
如图1-4所示,残差块(residual block)是残差网络的基本组成单元,是为了缓解随着网络层数增加导致的梯度消失问题而引入的。
在实际网络中,为了解决特定的问题,残差块出现了很多变种。如图1-5所示,在残差结构中使用1×1的卷积进行降维和升维。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/18_01.jpg?sign=1739595398-XxiLd9VBjtX7tUAzbdhVX7VIINb7x9lS-0-40bd06f99b3f5b2d832e3f08e8a5f8f9)
图1-4 残差块
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/18_02.jpg?sign=1739595398-vmKpESS7TUQzXOMaifHHfQI0h6xlDcx6-0-7367ad18e9cd37557dd385d5a429783d)
图1-5 在残差结构中使用1×1的卷积进行降维和升维
当残差结构与主干之间的维度不一致时,在残差结构中使用1×1的卷积进行维度调整,如图1-6所示。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/19_01.jpg?sign=1739595398-3jCO1V6S3b88MF6gSDPSq1YO1kPY9qx1-0-4c85cec68f48558fc136fe70940f3e06)
图1-6 在残差结构中使用1×1的卷积进行维度调整
在基本残差块的基础上,还可以调整直连的位置,如图1-7所示。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/19_02.jpg?sign=1739595398-Mi8WkZ28F4Pn0UGgokViD9hFNjbeKXlS-0-fa4826a5f59a7949b9b3330114f9f689)
图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=1739595398-jQ1yH8RXSqPp7tl3UQUpBBdFNmbvxZOV-0-974bc91dc2118d858120b453cedc63b4)
图1-8 残差块的其他变形
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/21_01.jpg?sign=1739595398-9IU8ckaOgZE8QfAGqxUuGXBOD9MrkQpQ-0-38d757e836a7d97821f593e5a7572b0a)
图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=1739595398-vXs4RCFEOCyn0TaFTc1ib3lKBck6eU45-0-77726d8432332bd3302b3c9ff62795d2)
图1-9 第一版初端块的结构
在基本初端块的基础上,可以增加额外的层来达到降低计算量的目的,如图1-10所示。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/22_02.jpg?sign=1739595398-XkDOm65afXHmXJtgreBbJVh95KLBxnfR-0-836a8b6d874d449eb0955aba06dbe1f5)
图1-10 给初端块增加额外的层
为了进一步减少计算量和参数量,在第三版初端块GoogLeNet中,对卷积核的尺寸进行了调整,如图1-11、图1-12所示。
GoogleNet在后续版本中调整了初端块的具体实现细节,但是初端块的结构没有很大变化。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/23_01.jpg?sign=1739595398-3PBXH8l1yWhhiPV68FzlIN85w1XMQsdm-0-f239e9a0b309bf732109604a19acdf91)
图1-11 第三版初端块的更多变形
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/23_02.jpg?sign=1739595398-0ztuQQMunko5qYh3Ko4c7GYfgqrU45Fy-0-3359d25cc24dfb913b8c09212fda00cb)
图1-12 第三版初端块结构
3.残初块
残初块(inception_residual block)是将残差块和初端块结合在一起使用,以获得杂交优势。图1-13所示是在inception_resnet(在初端块中引入ResNet的残差结构的网络结构)中使用的残初块。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/24_01.jpg?sign=1739595398-TTN3Lom8LXpPiSKMJ5CBNmSxYuEpOZ2C-0-e199bdaaf05b494b959b0c168646ecf5)
图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=1739595398-A5nbI7rfbepwUGDMv9K0GFKVGxAvzs9x-0-36947e417dae4c243a10266e36ac46ee)
图1-14 跳块示意图
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/25_02.jpg?sign=1739595398-LWTdMF4PD6KWWiqDWTBs3XgGvnMP8Fsj-0-acf84dc784e8d49321cbfa0ef298b935)
图1-15 MobileNet中使用的组卷积块
6.融合块
融合块(feature cascade chaining)常用于网络中多个子网络数据的融合,融合一般通过对应元素的乘法、加法运算来实现。图1-16是Multipath中使用的融合块。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/26_01.jpg?sign=1739595398-ATf42idpJ6IL88i1v0OcxfqJFj8HqZZ2-0-8cc74bd77b1e165f5b17509eaf22b9fe)
图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=1739595398-nVrWDhCDqLjgNAzIRZkQ751f2yTzL0Qz-0-b6005993bb1ea2e234e08241d2fc70d6)
图1-17 Parallel FC中使用的多并行块
基于类似的思路,某些网络将少数服从多数的机制发扬光大,引入多个卷积层,甚至引入多个网络。图1-18是MultiStep Net中使用的多并行块。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/27_01.jpg?sign=1739595398-FbW0TLiiFA3AW0chogt5WAnsjjqqFAxN-0-d38b69c976f11b5bfc41cbd0375a97ea)
图1-18 MultiStep Net中使用的多并行块
除了以上介绍的基本块,还有很多奇异的网络中使用的奇异的结构。算法研究者为了提高检测精度,在深度学习拓荒时代进行硬件架构的设计时,要求架构师不仅把已有的算法理解透彻,还要判断未来的趋势。再加上芯片项目周期较长,如何保证芯片上市时仍然具有竞争力,对任何架构师都是不小的挑战。