- AI加速器架構設計與實現
- 甄建勇 王路業
- 1401字
- 2023-11-13 15:21:15
1.3 網絡的基本塊
在對目標領域的網絡結構進行總結之后,我們需要對網絡進行抽象,得到多個更小的基本塊。圖像領域的神經網絡一般包括如表1-1所示的幾種基本塊。
表1-1 網絡基本塊

下面簡要介紹其中幾種基本塊。
1.殘差塊
如圖1-4所示,殘差塊(residual block)是殘差網絡的基本組成單元,是為了緩解隨著網絡層數增加導致的梯度消失問題而引入的。
在實際網絡中,為了解決特定的問題,殘差塊出現了很多變種。如圖1-5所示,在殘差結構中使用1×1的卷積進行降維和升維。

圖1-4 殘差塊

圖1-5 在殘差結構中使用1×1的卷積進行降維和升維
當殘差結構與主干之間的維度不一致時,在殘差結構中使用1×1的卷積進行維度調整,如圖1-6所示。

圖1-6 在殘差結構中使用1×1的卷積進行維度調整
在基本殘差塊的基礎上,還可以調整直連的位置,如圖1-7所示。

圖1-7 調整直連的位置
對于殘差分支,可以采用不同的操作,以滿足特定目的。如圖1-8所示,分別對應的操作是固定比例(constant scale)、專用通道(exclusive gating)、直連通道(shortcut-only gating)、丟棄直連(dropout shortcut)。

圖1-8 殘差塊的其他變形

圖1-8 殘差塊的其他變形(續)
2.初端塊
初端塊(inception block)是GoogLeNet的基本組成單元。GoogLeNet已經演進了好幾個版本,每個版本的初端塊結構不盡相同。第一版的初端塊由1×1、3×3、5×5的卷積層和3×3的池化層組成,目的是從一個相同的層中提取不同尺寸的特征,增強單層特征的提取能力,結構如圖1-9所示。

圖1-9 第一版初端塊的結構
在基本初端塊的基礎上,可以增加額外的層來達到降低計算量的目的,如圖1-10所示。

圖1-10 給初端塊增加額外的層
為了進一步減少計算量和參數量,在第三版初端塊GoogLeNet中,對卷積核的尺寸進行了調整,如圖1-11、圖1-12所示。
GoogleNet在后續版本中調整了初端塊的具體實現細節,但是初端塊的結構沒有很大變化。

圖1-11 第三版初端塊的更多變形

圖1-12 第三版初端塊結構
3.殘初塊
殘初塊(inception_residual block)是將殘差塊和初端塊結合在一起使用,以獲得雜交優勢。圖1-13所示是在inception_resnet(在初端塊中引入ResNet的殘差結構的網絡結構)中使用的殘初塊。

圖1-13 在inception_resnet中使用的殘初塊
4.跳塊
跳塊(skip block)是指在網絡中跳著對不同的層進行卷積運算,通過上池化和下池化操作得到相同尺寸的特征圖并拼接在一起。圖1-14是一個采用跳塊的網絡。
5.組卷積塊
組卷積塊(depthwise separable block)是為了降低參數量和運算量,將輸入特征圖分成多個組,卷積運算限制在對應的組內進行。在AlexNet中,特征圖被分成了兩組,而MobileNet將分組做到了極致,每組僅包含一個通道的特征圖。組卷積塊可以顯著降低參數量和運算量,使神經網絡部署在嵌入式設備上成為可能。圖1-15是MobileNet中使用的組卷積塊。

圖1-14 跳塊示意圖

圖1-15 MobileNet中使用的組卷積塊
6.融合塊
融合塊(feature cascade chaining)常用于網絡中多個子網絡數據的融合,融合一般通過對應元素的乘法、加法運算來實現。圖1-16是Multipath中使用的融合塊。

圖1-16 Multipath中使用的融合塊
7.多并行塊
多并行塊是某些網絡為了提高檢測精度,引入少數服從多數的投票機制,即最后由多個全連接層組成。圖1-17是Parallel FC中使用的多并行塊(multistep net path feature maxout block)。

圖1-17 Parallel FC中使用的多并行塊
基于類似的思路,某些網絡將少數服從多數的機制發揚光大,引入多個卷積層,甚至引入多個網絡。圖1-18是MultiStep Net中使用的多并行塊。

圖1-18 MultiStep Net中使用的多并行塊
除了以上介紹的基本塊,還有很多奇異的網絡中使用的奇異的結構。算法研究者為了提高檢測精度,在深度學習拓荒時代進行硬件架構的設計時,要求架構師不僅把已有的算法理解透徹,還要判斷未來的趨勢。再加上芯片項目周期較長,如何保證芯片上市時仍然具有競爭力,對任何架構師都是不小的挑戰。