本文轉載自機器之心,本文由機器之心編譯出品,原文來自arxiv,作者:Joel Emer,來源:
深度神經網路(DNN)所代表的人工智慧技術被認為是這一次技術變革的基石(之一)。近日,由 IEEE Fellow Joel Emer 領導的一個團隊發布了一篇題為《深度神經網路的有效處理:教程和調研(Efficient Processing of Deep Neural Networks: A Tutorial and Survey)》的綜述論文,從演算法、模型、硬體和架構等多個角度對深度神經網路進行了較為全面的梳理和總結。鑒於該論文的篇幅較長,機器之心在此文中提煉了原論文的主幹和部分重要內容,更多內容請點擊文末「閱讀原文」下載原論文了解。
論文地址:
目前,包括計算機視覺、語音識別和機器人在內的諸多人工智慧應用已廣泛使用了深度神經網路(deep neural networks,DNN)。DNN 在很多人工智慧任務之中表現出了當前最佳的準確度,但同時也存在著計算複雜度高的問題。因此,那些能幫助 DNN 高效處理並提升效率和吞吐量,同時又無損於表現準確度或不會增加硬體成本的技術是在人工智慧系統之中廣泛部署 DNN 的關鍵。
本文旨在提供一個關於實現 DNN 的有效處理(efficient processing)的目標的最新進展的全面性教程和調查。特別地,本文還給出了一個 DNN 綜述——討論了支持 DNN 的多種平台和架構,並強調了最新的有效處理的技術的關鍵趨勢,這些技術或者只是通過改善硬體設計或者同時改善硬體設計和網路演算法以降低 DNN 計算成本。本文也會對幫助研究者和從業者快速上手 DNN 設計的開發資源做一個總結,並凸顯重要的基準指標和設計考量以評估數量快速增長的 DNN 硬體設計,還包括學界和產業界共同推薦的演算法聯合設計。
讀者將從本文中了解到以下概念:理解 DNN 的關鍵設計考量;通過基準和對比指標評估不同的 DNN 硬體實現;理解不同架構和平台之間的權衡;評估不同 DNN 有效處理技術的設計有效性;理解最新的實現趨勢和機遇。
I. 導語
深度神經網路(DNN)目前是許多人工智慧應用的基礎 [1]。由於 DNN 在語音識別 [2] 和圖像識別 [3] 上的突破性應用,使用 DNN 的應用量有了爆炸性的增長。這些 DNN 被部署到了從自動駕駛汽車 [4]、癌症檢測 [5] 到複雜遊戲 [6] 等各種應用中。在這許多領域中,DNN 能夠超越人類的準確率。而 DNN 的出眾表現源於它能使用統計學習方法從原始感官數據中提取高層特徵,在大量的數據中獲得輸入空間的有效表徵。這與之前使用手動提取特徵或專家設計規則的方法不同。
然而 DNN 獲得出眾準確率的代價是高計算複雜性成本。雖然通用計算引擎(尤其是 GPU),已經成為許多 DNN 處理的砥柱,但提供對 DNN 計算更專門化的加速方法也越來越熱門。本文的目標是提供對 DNN、理解 DNN 行為的各種工具、有效加速計算的各項技術的概述。
該論文的結構如下:
Section II 給出了 DNN 為什麼很重要的背景、歷史和應用。
Section III 給出了 DNN 基礎組件的概述,還有目前流行使用的 DNN 模型。
Section IV 描述了 DNN 研發所能用到的各種資源。
Section V 描述了處理 DNN 用到的各種硬體平台,以及在不影響準確率的情況下改進吞吐量(thoughtput)和能量的各種優化方法(即產生 bit-wise identical 結果)。
Section VI 討論了混合信號迴路和新的存儲技術如何被用於近數據處理(near-data processing),從而解決 DNN 中數據流通時面臨的吞吐量和能量消耗難題。
Section VII 描述了各種用來改進 DNN 吞吐量和能耗的聯合演算法和硬體優化,同時最小化對準確率的影響。
Section VIII 描述了對比 DNN 設計時應該考慮的關鍵標準。
II. 深度神經網路(DNN)的背景
在這一部分,我們將描述深度神經網路(DNN)在人工智慧這個大框架下的位置,以及一些促進其發展的的概念。我們還將對其主要的發展歷程和現階段主要的應用領域做一個簡單的介紹。
A. 人工智慧和深度神經網路
根據 John McCarthy 的論述,深度神經網路(也稱為深度學習)是人工智慧(AI)大框架下的一部分。而人工智慧(AI)是利用科學與工程學創造具有如同人類那樣能實現目標的智能機器。人工智慧這個詞就是這位計算機科學家在上個世紀 50 年代所創造出的。深度學習和整個人工智慧的關係就如下圖所示。
圖 1:深度學習在人工智慧大框架下的位置
B. 神經網路和深度神經網路(DNN)
神經網路從神經元涉及對輸入值求加權和進行計算這一概念而獲得靈感。這些加權和對應於突觸完成值的縮放以及其和神經元值間的組合。此外,因為計算與神經元級聯相關聯,並且其為簡單線性代數的運算,所以神經元不會僅僅輸出加權和。相反,在神經元中有函數執行組合輸入的運算,而這種函數應該是非線性運算。在非線性運算的過程中,神經元只有在輸入超過一定閥值時才生成輸出。因此通過類比,神經網路將非線性函數運用到輸入值的加權和中。我們等一下會描述一些非線性函數。
圖 2:簡單的神經網路例子。(a) 神經元和突觸,(b) 為每一層計算加權和,(c) 前向和反向(循環)網路,(d) 全連接與稀疏
(a)中展示了計算神經網路的示意圖。圖的前端是輸入層,該層會接受輸入數據值。這些數據值前向傳播到神經網路中間層的神經元中,中間層也常稱為神經網路的隱藏層。一個或多個隱藏層的加權和最終前向傳播到輸出層,該輸出層會最終向用戶呈現神經網路的輸出結果。為了將腦啟發的術語和神經網路相匹配,神經元的輸出通常稱為激活(activation),並且突觸如(a)所示通常稱為權重(weight)。
在上方表達式中,W_ij 代表著權重、x_i 為輸入激活、y_i 是輸出激活,而 f(·) 就代表著在 III-2 中描述的非線性激活函數。
在神經網路的領域內,有一門稱為深度學習的研究。普通神經網路基本上層級不會很多,而在深度學習里,神經網路的層級數量十分巨大,現如今基本上神經網路可以達到 5 到 1000 多層。
C. 推理 vs 訓練
這一節中,如圖 4 所示,我們將把圖像分類用作訓練 DNN 的一個強勁的實例。評估 DNN 時,我們輸入一個圖像,DNN 為每一個對象分類輸出分值向量;分值最高的分類將成為圖像中最有可能的對象分類。訓練 DNN 的總體目標是決定如何設置權重以最大化正確分類(來自標註的訓練數據)的分值並最小化其他不正確分類的分值。理想的正確分值與 DNN 基於其當前權重計算的分值之間的差被稱為損失值(L)。因此訓練 DNN 的目標是找到一組權重以最小化大型數據集中的平均損失值。
圖 4:圖像分類任務
D. 開發歷史
1940 年代 - 神經網路被提出
1960 年代 - 深度神經網路被提出
1989 年 - 識別數字的神經網(LeNet)出現
1990 年代 - 淺層神經網硬體出現(Intel ETANN)
2011 年 - DNN 語音識別取得突破性進展(Microsoft)
2012 年 - 用於視覺的 DNN 開始替代人工放大(AlexNet)
2014 年+ - DNN 加速器研究興起(Neuflow、DianNao 等等)
圖 5 的表柱是這些年來 ImageNet 競賽中每屆冠軍的表現。你可以看到最初演算法精確度的錯誤率在 25% 或更多。2012 年,多倫多大學的 AlexNet 團隊通過 GPU 來提升其計算能力並採用深度神經網路方法,把錯誤率降低了近 10% [3]。他們的成功帶來了深度學習風格的演算法的井噴,以及圖像識別技術的持續進步。
圖 5:ImageNet 競賽 [10] 結果
E. DNN 的應用
從多媒體到醫療,DNN 對很多應用大有裨益。在這一節中,我們將展示 DNN 正在發揮影響的領域,並凸顯 DNN 有望在未來發揮作用的新興領域。
圖像和視頻
語音和語言
醫療
遊戲
機器人
F. 嵌入 vs 雲
執行 DNN 推斷處理的嵌入平台有著嚴格的能耗、計算和存儲成本限制。當 DNN 推斷在雲中執行時,語音識別等應用經常有強烈的延遲需求。因此,在本文中,我們將聚焦於推斷處理而不是訓練的計算需求。
III. 深度神經網路概述
根據應用情況不同,深度神經網路的形態和大小也各異。流行的形態和大小正快速演化以提升模型準確性和效率。所有深度神經網路的輸入是一套表徵網路將加以分析處理的信息的值。這些值可以是一張圖片的像素,或者一段音頻的樣本振幅或者某系統或者遊戲狀態的數字化表示。
處理輸入的網路有兩種主要形式:前饋以及循環(圖 2c)。前饋網路中,所有計算都是在前一層輸出基礎上進行的一系列運作。最終一組運行就是網路的輸出,比如,這張圖片包括某個特定物體的概率是多少,某段音頻出現某個單詞的概率是多少,或者下一步行動的建議等。在這類深度神經網路中,網路並無記憶,輸出也總是與之前網路輸入順序無關。
相反,循環網路(LSTM 是一個很受歡迎的變種)是有內在記憶的,允許長期依存關係影響輸出。在這些網路中,一些中間運行生成的值會被存儲於網路中,也被用作與處理后一輸入有關的其他運算的輸入。在這篇文章中,我們關注的是前饋網路,因為到目前為止,少有人關注硬體加速,特別是循環網路的。
深度神經網路也可以是全連接的(FC,也指多層感知器),如圖 2(d)最左部分所示。在一個全連接層中,所有輸出與所有輸入都是相連接的。這需要相當數量的存儲和計算空間。謝天謝地,在許多應用中,我們可以移除激活(activations)之間的一些連接,方法就是將權重設置為零而不影響準確性。結果會產生一個稀疏連接層。圖 2(d)最右端的層就是一個稀疏連接層。
通過限制對結果有影響的權重數量,我們也可以實現更高效的計算。如果每個輸出僅僅是一個固定大小輸入窗口的函數,就會出現這類結構化稀疏性。如果這套權重被用於每一個輸入計算,就會進一步提高效率。這一權重共享能顯著降低權重的存儲要求。
通過將計算構建為卷積,一種非常流行的窗口式的權重共享的網路誕生了,如圖 6(a) 所示,其僅使用少量臨近的激活來計算加權和的輸出(即,該過濾器有一個有限的接受域,與輸入的距離超過特定值的所有權重都將被設置為 0),而且這一套權重能被每個輸入共享來計算(即,濾波器是空間不變的)。這種結構稀疏性的形式正交於源自網路(修改情況如本文部分 VII-B2 所述)的稀疏性。所以,卷積神經網路就是一種受歡迎的深度神經網路形式 [35]。
1) 卷積神經網路(CNN)
圖 6:卷積的維度。(a) 傳統圖像處理中的二維卷積,(b) CNN 中的高維卷積
圖 7:卷積神經網路
表 1:CONV/FC 層的形狀參數
給定表 I 中的形狀參數(shape parameters),卷積層的計算可以定義為:
2)非線性(Non-Linearity)
圖 8:多種形式的非線性激活函數(來自 Caffe Tutorial [43])
3)池化(Pooling)
圖 9:多種形式的池化(來自 Caffe Tutorial [43])
4)歸一化(Normalization)
控制輸入在層級中的分佈能顯著地加快訓練速度並提升準確度。因此,輸入激活在層級上的分佈(σ, µ)需要歸一化處理,使其變換為均值為 0、標準差為 1 的分佈。在批量歸一化(batch normalization)中,歸一化值如方程(2)所示將進一步縮放和平移,參數(γ, β)是從訓練 [44] 中學到的兩個小常數,它們能避免數值問題。
A. 流行的 DNN 模型
在過去的二十多年裡出現了很多種 DNN 模型。每一種都稱其擁有不同的「網路架構」,因為他們依據不同層級數量、濾波器形狀(如過濾尺寸,濾波器和通道的數量)、層級類型以及連接方式而劃分。正確地理解這些不同的方法和它們發展的趨勢對於提高 DNN 引擎的效率至關重要。
其中包括:
LeNet [9] 於 1989 年提出,是最早的 CNN 方式之一。其中最為人熟知的是第八版的 LeNet-5,其中包含兩個卷積層和兩個全連接層 [45]。
AlexNet[3] 是第一次贏得 ImageNet 挑戰賽的 CNN 網路(2012 年)。它由五個卷積層和三個全連接層組成。
Overfeat [46] 與 AlexNet 具有非常相似的架構:五個卷積層和三個全連接層。
VGG-16 [47] 更進一步,使用了 16 層的深度神經網路,其中包含 13 個卷積層,3 個全連接層。
GoogLeNet[48] 更深,有 22 個層,它首次引入了起始模塊(見下圖)。
ResNet [11],即殘差網路(Residual Net),使用殘差連接可以讓層級更加深入(34 層以上)。該網路第一次讓 DNN 在 ImageNet 挑戰賽中的表現超過了人類,top-5 錯誤率在 5% 以下。
圖 11:GoogleNet[48] 的起始模塊(Inception module)通道長度實例,其中每個 CONV 層在 ReLU 層之後(圖中未顯示)。
圖 12:ResNet[11] 中的快捷模塊。其中最後一個 CONV 層之後的 ReLU 層被快捷連接。
表 2:目前流行的 DNN [3, 11, 45, 47, 48] 模型,其中正確率都基於在 ImageNet [10] 中 TOP-5 誤差。
IV. DNN 開發資源
DNN 得以快速發展的一個關鍵因素是研究社區與產業界使得一系列開發資源變得可用。這些資源對 DNN 加速器的開發也很關鍵,提供工作負載的特性、在模型複雜性和準確率上促進權衡性的探索。這一章節將描述了對此領域感興趣的人能快速上手的一些資源。
A. 框架(Frameworks)
為了 DNN 開發的簡便以及讓訓練網路可共享,不同的團隊開發出了不同的深度學習框架。這些開源庫包含了面向 DNN 的軟體庫。Caffe 在 2014 年由 UC 伯克利大學開源,它支持 C、C++、Python 和 MATLAB。TensorFlow 由谷歌團隊 2015 年開源,支持 C++和 Python,也支持多 CPU 和 GPU。它要比 Caffe 更靈活,計算表達是數據流圖到張量管理(多維度陣列)。另一個流行的框架是 Torch,由 Facebook 和 NYU 開發,它支持 C、C++和 Lua。當然,還有其他的一些框架,比如 Theano、MXNet、CNTK,這在 [57] 中有所描述。
這些框架的存在不只是方便了 DNN 研究人員和應用設計者,它們對編程高性能或更高效的 DNN 計算引擎也是無價的。例如,大部分框架可以使用英偉達的 cuDNN 庫在 GPU 上進行快速運算。這一加速對框架的使用者而言是很明顯的。類似地,硬體加速器這種如此易懂的結合也能在 Eyeriss 這樣的晶元上獲得 [58]。
最終,這些框架對硬體研究人員來說也是無價的資源(工作負載),它們可被用於設計不同工作負載的實驗、性能分析(profiling)不同的工作負載、探索硬體與軟體之間的權衡。
B. 模型(Model)
C. 流行的分類數據集
在許多公開的數據集中有許多人工智慧任務可用來評估 DNN 的準確率。公開數據集對對比不同方法的準確率而言非常的重要。最簡單也最常見的任務是圖像分類。圖像分類涉及到在給定的完整圖像中,選擇出 N 類物體中的 1 類,它不需要進行定位於檢測。
其中包括:
MNIST:它包含手寫數字的 28×28 像素的灰度圖像,裡面有 10 大類別(10 個數字)、6 萬張訓練圖像和 1 萬張測試圖像。
CIFAR:這是一個包含不同物體 32×32 像素的彩色圖像數據集。
ImageNet:它包含的圖像是 256×256 彩色像素,有 1000 多類。
圖:13 MNIST 數據集(10 類、6 萬張訓練圖像、1 萬張測試圖像)[59] vs. ImageNet 數據集 (1000 多類、130 萬張訓練圖像、10 萬張測試圖像)[10]
D. 用於其它任務的數據集
V. 用於 DNN 處理的硬體
在這部分里,我們將討論在不同的硬體平台中進行高效處理而不降低準確性的策略(所有在本節中的方法都要輸出完全相同的結果)。
對於 CPU 與 GPU 這樣的時間敏感架構,我們將討論在它們的運行中如何減少乘法次數以增加吞吐量。
對於加速器這樣的空間敏感架構,我們討論數據流如何能低成本地從存儲器中被調用,以減少能耗。
圖 14:高度并行的計算範式
A. 在 CPU 和 GPU 平台上加速核(kernel)計算
圖 15:映射到全連接層(a)的矩陣乘法,當從單個輸入特徵圖計算單個輸出特徵圖時,使用矩陣向量乘法。(b)當從 N 個輸入特徵圖計算 N 個輸出特徵圖時,使用矩陣乘法。
圖 16:映射到卷積層的矩陣乘法(a)將卷積映射到 Toeplitz 矩陣。(b)將 Toeplitz 矩陣擴展到多個通道和濾波器。
圖 17:用於加速 DNN 的 FFT。
B. 為加速器設計的 Energy-Efficient Dataflow
圖 18:每個 MAC 的存取
圖 19:存儲層級和數據移動能量
圖 20:DNN 中的數據復用機會
圖 22:DNN 的數據流。(a) 權重固定(WS),(b) 輸出固定(OS),(c) 沒有局部復用(NLR)
VI. 近場數據處理
在上一章節中,我們強調了數據流通主導了能源的消耗。雖然空間架構儘可能將儲存器安放在離計算很近的位置(如放入 PE),但同時我們也在努力將高密度存儲器安置在近計算的位置,或者直接將計算集成到存儲器本身中。在嵌入式系統中,我們還努力將計算放入到感測器(最先收集數據的元件)中。在本論文的這個章節中,我們將討論如何通過使用混合信號迴路(mixed-signal circuit)設計和高級存儲技術將處理儘可能放置在離數據近的地方以減少數據流通。
A. DRAM
B. SRAM
C. 非易失性電阻式存儲(Non-volatile Resistive Memories)
D. 感測器
圖 33。通過 (a) SRAM bit-cell 和 (b) 非易失性電阻式存儲進行模擬計算
VII. DNN 模型和硬體的聯合設計(CO-DESIGN)
對 DNN 模型和 DNN 硬體進行聯合設計可以為處理效率帶來進一步的提升。在傳統上,DNN 模型的設計目標是最大化準確度,而不會考慮太多實現的複雜性。但是,這可能會使得設計很難實現。DNN 模型和硬體和聯合設計可以有效地聯合最大化準確度和吞吐量,同時最小化能耗和成本,這能增加採用的可能性。這種方法已經在其它重要的且廣泛應用的多媒體應用(比如視頻壓縮)中得到了證明。之前的時候,視頻標準大多關注演算法開發。從 MPEG-2 到 H.264/AVC,在編碼效率上實現了 2 倍的提升,而解碼器複雜性卻增加了 4 倍 [110]。最近,最新的視頻編碼標準 H.265/HEVC [111] 使用了演算法和硬體的聯合設計;結果其相對於 H.264/AVC 在編碼效率上實現了又 2 倍的提升 [112],而解碼器複雜性也只增加了 2 倍。在這一節,我們將重點介紹幾個 DNN 模型和硬體聯合設計方面的研究。注意和第 V 節不同,這一節所提出的技術可能會改變準確度;儘管其目標是在最小化準確度改變的同時顯著減少能耗並提高吞吐量。
這些方法可以大致分為以下幾類:
降低運算和操作數的精度。這包括將浮點數改為定點數、減少位寬、移到對數域和權重共享。
降低運算的數量和模型的大小。其中的技術包括:壓縮、剪枝和設計緊湊的網路架構。
表 3:為 AlexNet 降低數值精度的方法。這裡的準確度是在 ImageNet 上測得的 top-5 error。* 表示不適用於第一層和/或最後的層
VIII. 用於 DNN 評估和比較的基準指標
A. DNN 模型的指標
為了評估一個給定模型的屬性,我們應該考慮以下元素:
在 ImageNet 這樣的數據集上的 top-5 error 方面的模型準確度。另外,使用了哪種類型的數據增強(比如,多次裁剪、集成模型)。
對於該 DNN 模型,要麼應該使用眾所周知的模型,要麼就應該報告模型的參數,包括層的數量、濾波器大小、濾波器的數量和通道的數量。
權重的數量會影響該模型的存儲需求,應該報告。如果可能,也應該報告非零權重的數量,因為這能反映理論上的最小存儲需求。
需要執行的 MAC 的量應被報告,因為其或多或少指示了給定 DNN 的運算量和吞吐量。如果可能,也應該報告非零 MAC 的量,因為這能反映理論上的最小計算需求。
表 4:流行的 DNN 指標。稀疏性(sparsity)根據報告的非零(NZ)權重和 MAC 得到
B. DNN 硬體的指標
為了測量 DNN 硬體的有效性,我們要考慮這些指標:
硬體設計的能量效率,包括每非零 MAC(非零權重和激活)的能量和 MAC 的位寬(bitwidth)。
片外(off-chip)帶寬(如,DRAM 帶寬)應該報告的包括片外的每非零 MAC(非零權重和激活)的訪問和 MAC 的位寬
區域效率(area efficiency)衡量的是晶元的成本,要考慮內存(寄存器或 SRAM)的尺寸和類型和控制邏輯的量。
吞吐量(throughput)應該基於多種 DNN 的運行時間來報告,以考慮映射和內存帶寬的影響,這能提供比峰值吞吐量更有用和信息更豐富的指標。
表 5:Eyeriss 基準指標示例 [90]
IX. 總結(略)
致謝和參考文獻(略)