![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=1739162961-fRUKjpNWWfFjfdGJK9EnFB5jiSsAiFSI-0-fc4e275ac730c0b70e4f4ac04e611ad9)
下面简要介绍其中几种基本块。
1.残差块
如图1-4所示,残差块(residual block)是残差网络的基本组成单元,是为了缓解随着网络层数增加导致的梯度消失问题而引入的。
在实际网络中,为了解决特定的问题,残差块出现了很多变种。如图1-5所示,在残差结构中使用1×1的卷积进行降维和升维。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/18_01.jpg?sign=1739162961-ab2kSNEotdbPw6ajh5IUEbklsr2bcx6B-0-f57054a06405d37940482a0779f4df2d)
图1-4 残差块
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/18_02.jpg?sign=1739162961-pamJPkFLUQYaFPd2Q8Hhfa0mEoyPm40t-0-b3d63365150109510f6610dc77f792f4)
图1-5 在残差结构中使用1×1的卷积进行降维和升维
当残差结构与主干之间的维度不一致时,在残差结构中使用1×1的卷积进行维度调整,如图1-6所示。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/19_01.jpg?sign=1739162961-83bTX0H5u8DftwQC6A9zkQ6s7qYdvP0g-0-be824c49b9470ad1769c549c61e221cf)
图1-6 在残差结构中使用1×1的卷积进行维度调整
在基本残差块的基础上,还可以调整直连的位置,如图1-7所示。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/19_02.jpg?sign=1739162961-NgyVGNPVdHnvzN4cMgTC5jqMZXiT44jO-0-0d7ddf43f94c9a2c259c6048e860d255)
图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=1739162961-oqly8KhvQGPci4g744FBh3ze4cBsAg3M-0-0d8bc27ced9302c1e891e5e0f46d4ee6)
图1-8 残差块的其他变形
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/21_01.jpg?sign=1739162961-B6jQgetvoJR7kk7yzOJuLGcynuXLv7Pr-0-d04bed4a6eb9453f067a1e45a55275e3)
图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=1739162961-kECnN8XBdIsZodLdmlgLYkVkluhRA9KB-0-76cf1d75af6c8cd7a33cb292fee69ce9)
图1-9 第一版初端块的结构
在基本初端块的基础上,可以增加额外的层来达到降低计算量的目的,如图1-10所示。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/22_02.jpg?sign=1739162961-WOzdugrcPyNXorVUinXAikaRYYgI1jrC-0-cff050ce46da57b9d66f5ca8f2904037)
图1-10 给初端块增加额外的层
为了进一步减少计算量和参数量,在第三版初端块GoogLeNet中,对卷积核的尺寸进行了调整,如图1-11、图1-12所示。
GoogleNet在后续版本中调整了初端块的具体实现细节,但是初端块的结构没有很大变化。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/23_01.jpg?sign=1739162961-M9KUaLmE02yVAQEefcruy9R9rF6wbCB0-0-f556f57c3c6a072a9da0147956be1e12)
图1-11 第三版初端块的更多变形
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/23_02.jpg?sign=1739162961-cEKk8SVBzuvEIl65vE0CBCyThPWVSwWf-0-8f2bcf178e9c12c28bac379178677988)
图1-12 第三版初端块结构
3.残初块
残初块(inception_residual block)是将残差块和初端块结合在一起使用,以获得杂交优势。图1-13所示是在inception_resnet(在初端块中引入ResNet的残差结构的网络结构)中使用的残初块。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/24_01.jpg?sign=1739162961-vMAlZ8UzAKgZNvMvkYyB4HvIovb2n9sz-0-534272a8ff26686b9b6d252404f22390)
图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=1739162961-bJN3FqgKsPMCr8QkN3FZ3RSLw8FAvzs8-0-aba941b4852e38e0da5d03ce33eb1e97)
图1-14 跳块示意图
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/25_02.jpg?sign=1739162961-gcTplG81NgbYazfPFVqiBIqsDXFQzSXI-0-09232177766eaf52b1b5ab342dba12fd)
图1-15 MobileNet中使用的组卷积块
6.融合块
融合块(feature cascade chaining)常用于网络中多个子网络数据的融合,融合一般通过对应元素的乘法、加法运算来实现。图1-16是Multipath中使用的融合块。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/26_01.jpg?sign=1739162961-3GN7DJilzjqbnqCU6oWYblThInKxEk1H-0-930f12d16e86abdfeea7e1f341479274)
图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=1739162961-J3jKJQ2ZvXFQUPpfV7UfGt08VFsJaGSp-0-789d4e090b20b862621f503f520a932b)
图1-17 Parallel FC中使用的多并行块
基于类似的思路,某些网络将少数服从多数的机制发扬光大,引入多个卷积层,甚至引入多个网络。图1-18是MultiStep Net中使用的多并行块。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/27_01.jpg?sign=1739162961-OfA7FLMEuwXeOGODZP6iGHs1VjGEx8Go-0-baf92b74f4ee1a455443b8d3c8c3f5e3)
图1-18 MultiStep Net中使用的多并行块
除了以上介绍的基本块,还有很多奇异的网络中使用的奇异的结构。算法研究者为了提高检测精度,在深度学习拓荒时代进行硬件架构的设计时,要求架构师不仅把已有的算法理解透彻,还要判断未来的趋势。再加上芯片项目周期较长,如何保证芯片上市时仍然具有竞争力,对任何架构师都是不小的挑战。