![AI加速器架构设计与实现](https://wfqqreader-1252317822.image.myqcloud.com/cover/311/48213311/b_48213311.jpg)
1.4 网络的算子
了解了网络的基本块之后,我们还需要对网络中的具体运算进行深入的分析和理解,将重要的、常用的运算进行分类总结,提取相应的算子。表1-2是从图像处理相关领域的神经网络中提取的算子,我们选择一些重要的算子进行说明。
表1-2 神经网络中的算子
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/28_01.jpg?sign=1738900379-N21KcZ3MOIKqieLFYlXS3Qr3U4tjnzwo-0-f3ac5a57e34d4c0633bcd27401f5c0f1)
(续)
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/29_01.jpg?sign=1738900379-MpKu7PGUIGozz3jxF3bzWAKTtuCWxRU1-0-ed679889fe6f6cb1c3e4e421403f052b)
1.卷积
卷积(Convolution)是卷积神经网络中最重要的运算方式,这可能也是CNN被称作卷积神经网络的原因。无论从运算量还是参数量来看,卷积运算所占的比例都很高,进行硬件架构设计前的首要任务就是把卷积理解透彻。
卷积按照运算特点可分为Norm Conv、group Conv、3D Conv、de-Conv、dilate Conv等。Conv是基础,后面几种都是在Conv的基础上进行的变化。由于卷积运算中一般含有对偏置(bias)的加法操作,这个加法操作在硬件实现上具有独立性,因此本书中描述的卷积不包括对偏置的加法操作。对于输入为W×H×C的特征图,对应的权重为S×R×C×K,输出特征图为W'×H'×K,其卷积运算过程如下。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/29_02.jpg?sign=1738900379-dUOYfNmMeK4pDY8Xr4cEqlDlELYkkFs9-0-4b270b008cd4e3c4862d6fd80417fc73)
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/30_01.jpg?sign=1738900379-I6lrz6yQ2ZIbsU7slrdbvuCzjTZQqbLm-0-ef6fc2fc94e61bfaafa4c7bdb95c5171)
式中,W表示输入宽度(Width),H表示输入高度(Height),C表示输入通道数(Channel),S表示权重宽度(Weight Width),R表示权重高度(Weight Height),K表示输出通道数(Kernel)。DX表示水平方向的空洞卷积步长(Dilate X),DY表示垂直方向的空洞卷积步长(Dilate Y),LP表示向左填补(Left Pad),RP表示向右填补(Right Pad),SX表示水平方向步长(Stride X),SY表示垂直方向步长(Stride Y),TP表示向上填补(Top Pad),BP表示向下填充(Bottom Pad)。本书后续公式参数含义同此处一致。
图1-19是一个S×R=3×3的例子。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/30_02.jpg?sign=1738900379-LRq5m1S7UkqP1g1Sbxl2lEK8bD4AeL1g-0-2ce7f752cda3b75e11fe93da05e1a380)
图1-19 S×R=3×3的卷积运算
对于不同的输出通道,使用的权重也是不同的,图1-19只画出了第一个输出通道使用的权重。对于普通卷积运算来说,权重R、S的尺寸也不相同,常见的卷积核尺寸如表1-3所示。
表1-3 常见卷积核尺寸
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/31_01.jpg?sign=1738900379-obBZtwKCRlJiMzX62Hpqf4Gt6WUH1aOK-0-3c80fa6cc095e054bbe94222d346a80e)
卷积核尺寸类似时,步长(stride)的尺寸如表1-4所示。
表1-4 常见卷积步长
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/31_02.jpg?sign=1738900379-oAUqc1ngYd8sQaixQqVL5GM0JzhaEVqq-0-62031171ebeb49c82bc4213b97cd8ba4)
需要注意的是,在ResNet中有可能出现步长比卷积核尺寸大的情况,在硬件实现时要考虑对这种情况的支持。
2.池化
池化(Pooling)运算是仅次于卷积的常用算子之一。池化可分为最大池化、平均池化、全局平均池化、上采样池化等,其中最大池化最常见。如图1-20是一个基于最大池化的掩码池化。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/31_03.jpg?sign=1738900379-c8CX4krMxnGWirPsjSOwPOA7IN5Vztm5-0-51139bbbe6ed5b76c007058e09e6893e)
图1-20 最大池化的掩码池化
被掩码的元素不参与池化操作,具体哪个元素会被掩码,需要通过参数来控制,这样就会使掩码池化变得有点奇怪。掩码池化仅有个别网络在使用,对于这种会大大增加硬件复杂度,又不太通用的算法,我们在架构设计时可以将其舍弃。如果硬件开销不大,可以考虑从硬件方面给予支持。最大池化运算使用的滤波器尺寸如表1-5所示。
表1-5 最大池化运算使用的滤波器尺寸
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/32_01.jpg?sign=1738900379-2NMgqLaCv4F8NoYGLuRvemhjG1L9gubC-0-d3259121b764f604f99721bb538e1985)
需要说明的是,表1-5仅针对最大池化运算,进行其他池化操作时,滤波器尺寸可能会比较大,甚至超过3×3,在硬件实现时需要注意。此外多数情况下,池化操作的步长是2或者3,也有出现其他情况的可能。
如图1-21是一个在注意力网络(Attention Net)中使用通道池化的例子。
从硬件角度来看,相对于卷积操作,池化的运算量不大,硬件实现也相对简单。需要注意的是,池化操作的种类繁多,并且在神经网络中池化层跟卷积层交替排列,如果池化架构有问题,就会影响整个加速器的性能。
3.全连接
从硬件实现的角度来看,全连接运算是卷积核尺寸和输入特征图尺寸相同的卷积运算的特例。如图1-22所示是两种常见的全连接算子运算过程。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/33_01.jpg?sign=1738900379-HuUFahazFCRP6tAesRja1nnem6eghW39-0-74aa22c10143236e38949f2ba50ae665)
图1-21 通道池化示例
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/33_02.jpg?sign=1738900379-FgEa9ojrWsak734P20JX8gK7BhfRpfMF-0-02b04684e0645487b12c85cb32dc3680)
图1-22 两种全连接算子运算
4.激活函数
目前大部分神经网络引入了激活函数(Activation),从图像处理相关神经网络中提取出来的激活函数一般包括ReLU系列、Sigmoid、Tanh等。下面整理了ReLU系列的激活函数。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/34_01.jpg?sign=1738900379-pz3MnIWSNdZ5GbRarxBCVG5skjs15Qi7-0-c96ef202cee13763d0dd840a69b15ccc)
图1-23是几种ReLU函数曲线。
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/34_02.jpg?sign=1738900379-b0VpBxsqGJsSVfGAwHBCRmVKK9xF99UV-0-28841050f939646bad1f15b10a6b9161)
图1-23 几种ReLU函数曲线
Sigmoid函数的定义如表1-6所示,函数曲线如图1-24所示。
Tanh函数的定义如表1-7所示,函数曲线如图1-25所示。
表1-6 Sigmoid函数定义
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/34_03.jpg?sign=1738900379-AtmnxyXL9QP7WE2z99vamrxgaxhwAJ3T-0-60058a959061a2c8272c35b415fec988)
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/35_01.jpg?sign=1738900379-A9Hj9Z7s99hn3KHtDd0Z4tBpG8fFqd6e-0-774126f5738c3260c6b577b5ed975bb1)
图1-24 Sigmoid函数曲线
表1-7 Tanh函数定义
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/35_02.jpg?sign=1738900379-bvSYNbx7IueAwLA8MYYvuNr5SmCaST1P-0-db79cad75260b8cd8d462e1cb874e3df)
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/35_03.jpg?sign=1738900379-hgyKYSyGiyhEVAcJjinfTpx8tScy7MrU-0-4ee459f0ed77f88ee688b43b509d277c)
图1-25 Tanh函数曲线
从硬件角度来看,除了ReLU函数外,其他激活函数如果直接用硬件实现,代价会比较高,可以考虑用LUT(Look Up Table,查找表)实现这些非线性函数。
5.归一化
为了解决某些问题,算法研究者引入了一些归一化操作,例如BatchNorm、LRN、L2 Norm等。BatchNorm的定义如表1-8所示。
表1-8 BatchNorm的定义
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/36_01.jpg?sign=1738900379-KgmxHurZNM6okmI5uNKBnKJl2Ufp4CLR-0-5ff2352d1c5b39010f2c279985ef0dd1)
乍一看BatchNorm很复杂,其实可以化简成表1-9的形式。
表1-9 BatchNorm的化简
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/36_02.jpg?sign=1738900379-8TN7Vjeo6hBtT5x06YDsGmATCY3cCjPf-0-cf75dc65c6c54c1d76c1f77fbf39c84c)
LRN的定义如表1-10所示。
表1-10 LRN的定义
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/36_03.jpg?sign=1738900379-jd9RfmJyryY8XoCjojykAzTaVabjIaa2-0-81df9bd67577379ea9aea38466724b45)
LRN包括通道内操作和跨通道操作,如表1-11所示,示意图如图1-26、图1-27所示。
表1-11 LRN的操作
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/36_04.jpg?sign=1738900379-ky78XOmdtQrr0ZgvUnJnqVFwCfS5OVeC-0-d1da11e73bdf66245a9b25bfe4913d0f)
(续)
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/37_01.jpg?sign=1738900379-Q68cEXWLVY0B21BQwcR16YttwgkB95Tz-0-0c3ac448f0ef6a06ec77e2d9e7fe8754)
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/37_02.jpg?sign=1738900379-YfFK7e2GM2NhandgOz1kGFC9zYwsVJ0N-0-d900fe94dafdb9bc1c8be92ebff7b872)
图1-26 通道内操作示意图
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/37_03.jpg?sign=1738900379-ISrQMSrMopsHc29WLBAQuDwjqKyEXesX-0-94b1e1988a2f16303925c179f91414c2)
图1-27 跨通道操作示意图
L2_Normalization(L2_Norm)也包括通道内操作和跨通道操作两类,如表1-12、表1-13所示。
表1-12 L2_Normalization的定义
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/37_04.jpg?sign=1738900379-PdrVaiCpx4CSbjnJ70UgCUaeFMrUSUhp-0-90b1b1375e1ed74c8cb6b8e344620f36)
表1-13 L2_Normalization的操作
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/38_01.jpg?sign=1738900379-g7WjJA1nayZLlyMC61cw26rA5uNPp7oP-0-6f5cda1125780aa01c19cf63567850c9)
6.Softmax
对于目前大多数神经网络,在最后会包含一个Softmax层,定义如表1-14所示。
表1-14 Softmax的定义
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/38_02.jpg?sign=1738900379-bdxSX1ViVbwdxJzxg2lPHUXBcJlKyN1l-0-6e3928b25b26bcb0d606b77a1e8a2fdc)
7.其他
目前的神经网络种类很多,其中使用的算子也很多,如表1-15所示。从硬件角度来看,可能不需要实现所有的算子,但最好都了解一下,以防出现严重的功能性缺陷。
表1-15 神经网络中的部分算子
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/38_03.jpg?sign=1738900379-zvDEPfkO1iGOiPexYdRukSEFQYYX7Gml-0-74feae7c2b9fae6cc80b5380e5f85f74)
(续)
![](https://epubservercos.yuewen.com/37A34B/27732794007146006/epubprivate/OEBPS/Images/39_01.jpg?sign=1738900379-5sy3UQEfKTcj0aHdKePAfFJrZzTzhzjs-0-3c7df33c6fc057b043f3a22e9c74a901)
算法不止,架构更新不止。目前神经网络算法还在快速演进中,硬件架构师要紧跟算法潮流,弄清目标领域的需求。根据众多影响因素下进行取舍,正是架构设计中最重要的任务所在。