- AI加速器架構設計與實現
- 甄建勇 王路業
- 1968字
- 2023-11-13 15:21:16
1.4 網絡的算子
了解了網絡的基本塊之后,我們還需要對網絡中的具體運算進行深入的分析和理解,將重要的、常用的運算進行分類總結,提取相應的算子。表1-2是從圖像處理相關領域的神經網絡中提取的算子,我們選擇一些重要的算子進行說明。
表1-2 神經網絡中的算子

(續)

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,其卷積運算過程如下。


式中,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的例子。

圖1-19 S×R=3×3的卷積運算
對于不同的輸出通道,使用的權重也是不同的,圖1-19只畫出了第一個輸出通道使用的權重。對于普通卷積運算來說,權重R、S的尺寸也不相同,常見的卷積核尺寸如表1-3所示。
表1-3 常見卷積核尺寸

卷積核尺寸類似時,步長(stride)的尺寸如表1-4所示。
表1-4 常見卷積步長

需要注意的是,在ResNet中有可能出現步長比卷積核尺寸大的情況,在硬件實現時要考慮對這種情況的支持。
2.池化
池化(Pooling)運算是僅次于卷積的常用算子之一。池化可分為最大池化、平均池化、全局平均池化、上采樣池化等,其中最大池化最常見。如圖1-20是一個基于最大池化的掩碼池化。

圖1-20 最大池化的掩碼池化
被掩碼的元素不參與池化操作,具體哪個元素會被掩碼,需要通過參數來控制,這樣就會使掩碼池化變得有點奇怪。掩碼池化僅有個別網絡在使用,對于這種會大大增加硬件復雜度,又不太通用的算法,我們在架構設計時可以將其舍棄。如果硬件開銷不大,可以考慮從硬件方面給予支持。最大池化運算使用的濾波器尺寸如表1-5所示。
表1-5 最大池化運算使用的濾波器尺寸

需要說明的是,表1-5僅針對最大池化運算,進行其他池化操作時,濾波器尺寸可能會比較大,甚至超過3×3,在硬件實現時需要注意。此外多數情況下,池化操作的步長是2或者3,也有出現其他情況的可能。
如圖1-21是一個在注意力網絡(Attention Net)中使用通道池化的例子。
從硬件角度來看,相對于卷積操作,池化的運算量不大,硬件實現也相對簡單。需要注意的是,池化操作的種類繁多,并且在神經網絡中池化層跟卷積層交替排列,如果池化架構有問題,就會影響整個加速器的性能。
3.全連接
從硬件實現的角度來看,全連接運算是卷積核尺寸和輸入特征圖尺寸相同的卷積運算的特例。如圖1-22所示是兩種常見的全連接算子運算過程。

圖1-21 通道池化示例

圖1-22 兩種全連接算子運算
4.激活函數
目前大部分神經網絡引入了激活函數(Activation),從圖像處理相關神經網絡中提取出來的激活函數一般包括ReLU系列、Sigmoid、Tanh等。下面整理了ReLU系列的激活函數。

圖1-23是幾種ReLU函數曲線。

圖1-23 幾種ReLU函數曲線
Sigmoid函數的定義如表1-6所示,函數曲線如圖1-24所示。
Tanh函數的定義如表1-7所示,函數曲線如圖1-25所示。
表1-6 Sigmoid函數定義


圖1-24 Sigmoid函數曲線
表1-7 Tanh函數定義


圖1-25 Tanh函數曲線
從硬件角度來看,除了ReLU函數外,其他激活函數如果直接用硬件實現,代價會比較高,可以考慮用LUT(Look Up Table,查找表)實現這些非線性函數。
5.歸一化
為了解決某些問題,算法研究者引入了一些歸一化操作,例如BatchNorm、LRN、L2 Norm等。BatchNorm的定義如表1-8所示。
表1-8 BatchNorm的定義

乍一看BatchNorm很復雜,其實可以化簡成表1-9的形式。
表1-9 BatchNorm的化簡

LRN的定義如表1-10所示。
表1-10 LRN的定義

LRN包括通道內操作和跨通道操作,如表1-11所示,示意圖如圖1-26、圖1-27所示。
表1-11 LRN的操作

(續)


圖1-26 通道內操作示意圖

圖1-27 跨通道操作示意圖
L2_Normalization(L2_Norm)也包括通道內操作和跨通道操作兩類,如表1-12、表1-13所示。
表1-12 L2_Normalization的定義

表1-13 L2_Normalization的操作

6.Softmax
對于目前大多數神經網絡,在最后會包含一個Softmax層,定義如表1-14所示。
表1-14 Softmax的定義

7.其他
目前的神經網絡種類很多,其中使用的算子也很多,如表1-15所示。從硬件角度來看,可能不需要實現所有的算子,但最好都了解一下,以防出現嚴重的功能性缺陷。
表1-15 神經網絡中的部分算子

(續)

算法不止,架構更新不止。目前神經網絡算法還在快速演進中,硬件架構師要緊跟算法潮流,弄清目標領域的需求。根據眾多影響因素下進行取舍,正是架構設計中最重要的任務所在。