![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=1739407484-nypGIZoIjUqbLa6B2uyH81FS4Bd9rXZD-0-08e549627faaa2ca2beaa281fca8932e)
下面简要介绍其中几种基本块。
1.残差块
如图1-4所示,残差块(residual block)是残差网络的基本组成单元,是为了缓解随着网络层数增加导致的梯度消失问题而引入的。
在实际网络中,为了解决特定的问题,残差块出现了很多变种。如图1-5所示,在残差结构中使用1×1的卷积进行降维和升维。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/18_01.jpg?sign=1739407484-X1mJZdnQrhpCKmH7x9T7IX1rmSDYBSzp-0-48a4afd9fbb77b2fb9dc9a3c9ee75383)
图1-4 残差块
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/18_02.jpg?sign=1739407484-MmpRaHk7aRYRKrTcxl9IM8oXZfYIgWju-0-fd8e1775d735075b0fd82d0062b7902f)
图1-5 在残差结构中使用1×1的卷积进行降维和升维
当残差结构与主干之间的维度不一致时,在残差结构中使用1×1的卷积进行维度调整,如图1-6所示。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/19_01.jpg?sign=1739407484-HF9wWjOffCRT8QT4Owsq5fOojm4RyKfi-0-b1bd74317cfc536368e6eb99a4bd1a20)
图1-6 在残差结构中使用1×1的卷积进行维度调整
在基本残差块的基础上,还可以调整直连的位置,如图1-7所示。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/19_02.jpg?sign=1739407484-G6odqQ9XHu5mHfI9ZgRmfTCokFVen52A-0-9c03390e20d8fed415eba7f004526171)
图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=1739407484-0QCOuNqkquiV7dt2NWmoSLEHvT6xwjAT-0-c3ea9c663e4006ab74fc994be1caee60)
图1-8 残差块的其他变形
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/21_01.jpg?sign=1739407484-UGxFnNteY0fmfrTpWNgsPah2NZS1R9cJ-0-3ac7d255cee610ead34c2e462c8f57aa)
图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=1739407484-xF0pcv1FxAYbNzYQoC3fhycDd76b9LOg-0-ead10d3067defcb8785fc4a2a20f9817)
图1-9 第一版初端块的结构
在基本初端块的基础上,可以增加额外的层来达到降低计算量的目的,如图1-10所示。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/22_02.jpg?sign=1739407484-1ZoPbctGkd9csFgrpBI7ySTB9J6gakVP-0-6b9eda280eb4eda2c404ad6ff3521a8a)
图1-10 给初端块增加额外的层
为了进一步减少计算量和参数量,在第三版初端块GoogLeNet中,对卷积核的尺寸进行了调整,如图1-11、图1-12所示。
GoogleNet在后续版本中调整了初端块的具体实现细节,但是初端块的结构没有很大变化。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/23_01.jpg?sign=1739407484-zLFRDZ17tUgQ0FamVaddrinEqOAnt5IY-0-182f58a8ac7de41f52a987319190c299)
图1-11 第三版初端块的更多变形
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/23_02.jpg?sign=1739407484-7xoC7j59iGX2RioE0y99knsZb3LnNJrU-0-24c1c99afd3bae2b036553767e5c17f2)
图1-12 第三版初端块结构
3.残初块
残初块(inception_residual block)是将残差块和初端块结合在一起使用,以获得杂交优势。图1-13所示是在inception_resnet(在初端块中引入ResNet的残差结构的网络结构)中使用的残初块。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/24_01.jpg?sign=1739407484-0yGZ8zsaoGVqSO1siQ9Uh8AbLN6E9NDp-0-c69024b13d2fd5bbcba9b50cc46bfb41)
图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=1739407484-QwVY8xT4xFRfkwzDYR9ksgCDztdzGwcG-0-31b7aededb7618eeb767758e64281891)
图1-14 跳块示意图
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/25_02.jpg?sign=1739407484-yGEjqi5nN4CjNCh2xCpqxK8BsvKsP2LY-0-ea45506820b29a27ca4c84fadb2f9b49)
图1-15 MobileNet中使用的组卷积块
6.融合块
融合块(feature cascade chaining)常用于网络中多个子网络数据的融合,融合一般通过对应元素的乘法、加法运算来实现。图1-16是Multipath中使用的融合块。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/26_01.jpg?sign=1739407484-3SqzLInm8zXbb4oOAEeAyf2FOvCqyht8-0-43a2b73a2250457edc2ddd34c1a69ed5)
图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=1739407484-J6L0hmdP5zjrIP4bh8PrV8ZIQZkXPuy8-0-d14a17b352ad618bed5c6e3144b824b1)
图1-17 Parallel FC中使用的多并行块
基于类似的思路,某些网络将少数服从多数的机制发扬光大,引入多个卷积层,甚至引入多个网络。图1-18是MultiStep Net中使用的多并行块。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/27_01.jpg?sign=1739407484-3iyZZw4ts9uDfIfee8XMQWo0Aqsa8YBD-0-241bba752e4a3d5763eb14b53bb8ca84)
图1-18 MultiStep Net中使用的多并行块
除了以上介绍的基本块,还有很多奇异的网络中使用的奇异的结构。算法研究者为了提高检测精度,在深度学习拓荒时代进行硬件架构的设计时,要求架构师不仅把已有的算法理解透彻,还要判断未来的趋势。再加上芯片项目周期较长,如何保证芯片上市时仍然具有竞争力,对任何架构师都是不小的挑战。