官术网_书友最值得收藏!

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 神經網絡中的部分算子

(續)

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

主站蜘蛛池模板: 寿光市| 普洱| 蒲城县| 金川县| 明光市| 莱州市| 南昌市| 宜良县| 水城县| 成都市| 永福县| 颍上县| 留坝县| 德钦县| 枣阳市| 清苑县| 凤冈县| 曲沃县| 沙坪坝区| 大英县| 斗六市| 石门县| 互助| 平江县| 白河县| 旌德县| 桦川县| 高陵县| 华安县| 武宣县| 灵武市| 武强县| 霞浦县| 崇文区| 鄂托克前旗| 南华县| 临湘市| 庆安县| 宁蒗| 正镶白旗| 东海县|