深度神經網絡(DNN)目前是許多現代AI應用的基礎。自從DNN在語音識別和圖像識別任務中展現出突破性的成果,使用DNN的應用數量呈爆炸式增加。這些DNN方法被大量應用在無人駕駛汽車,癌癥檢測,游戲AI等方面。在許多領域中,DNN目前的準確性已經超過人類。與早期的專家手動提取特征或制定規則不同,DNN的優越性能來自于在大量數據上使用統計學習方法,從原始數據中提取高級特征的能力,從而對輸入空間進行有效的表示。
然而,DNN超高的準確性是以超高的計算復雜度為代價的。通常意義下的計算引擎,尤其是GPU,是DNN的基礎。因此,能夠在不犧牲準確性和增加硬件成本的前提下,提高深度神經網絡的能量效率和吞吐量的方法,對于DNN在AI系統中更廣泛的應用是至關重要的。研究人員目前已經更多的將關注點放在針對DNN計算開發專用的加速方法。
近日,一篇名為《Efficient Processing of Deep Neural Networks: A Tutorial and Survey》的論文橫空出世,這篇來自MIT的論文詳細介紹了DNN高效運算的最新進展,提供了DNN的綜述,以及加速DNN計算的方法。
鑒于篇幅,本文主要針對論文中的如下幾部分詳細介紹:
DNN的背景,歷史和應用
DNN的組成部分,以及常見的DNN模型
簡介如何使用硬件加速DNN運算
DNN的背景 人工智能與深度神經網絡
深度神經網絡,也被稱為深度學習,是人工智能領域的重要分支,根據麥卡錫(人工智能之父)的定義,人工智能是創造像人一樣的智能機械的科學工程。深度學習與人工智能的關系如圖1所示:
圖1:深度神經網絡與人工智能的關系
人工智能領域內,一個大的子領域是機器學習,由Arthur Samuel在1959年定義為:讓計算機擁有不需要明確編程即可學習的能力。這意味著創建一個程序,這個程序可以被訓練去學習如何去做一些智能的行為,然后這個程序就可以自己完成任務。而傳統的人工啟發式方法,需要對每個新問題重新設計程序。
高效的機器學習算法的優點是顯而易見的。一個機器學習算法,只需通過訓練,就可以解決某一領域中每一個新問題,而不是對每個新問題特定地進行編程。
在機器學習領域,有一個部分被稱作brain-inspired computation。因為人類大腦是目前學習和解決問題最好的“機器”,很自然的,人們會從中尋找機器學習的方法。盡管科學家們仍在探索大腦工作的細節,但是有一點被公認的是:神經元是大腦的主要計算單元。人類大腦平均有860億個神經元。神經元相互連接,通過樹突接受其他神經元的信號,對這些信號進行計算之后,通過軸突將信號傳遞給下一個神經元。一個神經元的軸突分支出來并連接到許多其他神經元的樹突上,軸突分支和樹突之間的連接被稱為突觸。據估計,人類大腦平均有1014-1015個突觸。
突觸的一個關鍵特性是它可以縮放通過它的信號大小。這個比例因子可以被稱為權重(weight),普遍認為,大腦學習的方式是通過改變突觸的權重實現的。因此,不同的權重導致對輸入產生不同的響應。注意,學習過程是學習刺激導致的權重調整,而大腦組織(可以被認為是程序)并不改變。大腦的這個特征對機器學習算法有很好的啟示。
神經網絡與深度神經網絡
神經元的計算是輸入值的加權和這個概念啟發了神經網絡的研究。這些加權和對應于突觸的縮放值以及神經元所接收的值的組合。此外,神經元并不僅僅是輸入信號的加權和,如果是這樣的話,級聯的神經元的計算將是一種簡單的線性代數運算。相反的是,神經元組合輸入的操作似乎是一種非線性函數,只有輸入達到某個閾值的時候,神經元才會生成輸出。因此,通過類比,我們可以知道神經網絡在輸入值的加權和的基礎上應用了非線性函數。
圖2(a)展示了計算神經網絡的示意圖,圖的最左邊是接受數值的“輸入層”。這些值被傳播到中間層神經元,通常也叫做網絡的“隱藏層”。通過一個或更多隱藏層的加權和最終被傳播到“輸出層”,將神經網絡的最終結果輸出給用戶。
圖2:神經網絡示意圖
在神經網絡領域,一個子領域被稱為深度學習。最初的神經網絡通常只有幾層的網絡。而深度網絡通常有更多的層數,今天的網絡一般在五層以上,甚至達到一千多層。
目前在視覺應用中使用深度神經網絡的解釋是:將圖像所有像素輸入到網絡的第一層之后,該層的加權和可以被解釋為表示圖像不同的低階特征。隨著層數的加深,這些特征被組合,從而代表更高階的圖像特征。例如,線可以被組合成形狀,再進一步,可以被組合成一系列形狀的集合。最后,再訓練好這些信息之后,針對各個圖像類別,網絡給出由這些高階特征組成各個對象的概率,即分類結果。
推理(Inference)與訓練(Training)
既然DNN是機器學習算法中的一員,那么它的基本編程思想仍然是學習。DNN的學習即確定網絡的權重值。通常,學習過程被稱為訓練網絡(training)。一旦訓練完成,程序可以使用由訓練確定的權值進行計算,這個使用網絡完成任務的操作被被稱為推斷(inference)。
接下來,如圖3所示,我們用圖像分類作為例子來展示如何訓練一個深度神經網絡。當我們使用一個DNN的時候,我們輸入一幅圖片,DNN輸出一個得分向量,每一個分數對應一個物體分類;得到最高分數的分類意味著這幅圖片最有可能屬于這個分類。訓練DNN的首要目標就是確定如何設置權重,使得正確分類的得分最高(圖片所對應的正確分類在訓練數據集中標出),而使其他不正確分類的得分盡可能低。理想的正確分類得分與目前的權重所計算出的得分之間的差距被稱為損失函數(loss)。因此訓練DNN的目標即找到一組權重,使得對一個較大規模數據集的loss最小。
圖3:圖像分類
權重(weight)的優化過程類似爬山的過程,這種方法被稱為梯度下降(gradient decent)。損失函數對每個權值的梯度,即損失函數對每個權值求偏導數,被用來更新權值(例:第t到t+1次迭代:,其中α被稱為學習率(Learning rate)。梯度值表明權值應該如何變化以減小loss。這個減小loss值的過程是重復迭代進行的。
梯度可以通過反向傳播(Back-Propagation)過程很高效地進行計算,loss的影響反向通過網絡來計算loss是如何被每個權重影響的。
訓練權重有很多種方法。前面提到的是最常見的方法,被稱為監督學習,其中所有的訓練樣本是有標簽的。無監督學習是另一種方法,其中所有訓練樣本都沒有標簽,最終目標是在數據中查找結構或聚類。半監督學習結合了兩種方法,只有訓練數據的一小部分被標記(例如,使用未標記的數據來定義集群邊界,并使用少量的標記數據來標記集群)。最后,強化學習可以用來訓練一個DNN作為一個策略網絡,對策略網絡給出一個輸入,它可以做出一個決定,使得下一步的行動得到相應的獎勵;訓練這個網絡的過程是使網絡能夠做出使獎勵(即獎勵函數)最大化的決策,并且訓練過程必須平衡嘗試新行為(Exploration)和使用已知能給予高回報的行為(Exploitation)兩種方法。
用于確定權重的另一種常用方法是fine-tune,使用預先訓練好的模型的權重用作初始化,然后針對新的數據集(例如,傳遞學習)或新的約束(例如,降低的精度)調整權重。與從隨機初始化開始相比,能夠更快的訓練,并且有時會有更好的準確性。
DNN發展簡史
1940s 神經網絡被提出
1960s 深度神經網絡被提出
1989 識別手寫數字的神經網絡(LeNet)
1990s 針對淺層網絡的專用硬件被開發出(Intel ETANN)
2011 基于DNN的語音識別突破(Microsoft)
2012 在視覺方面,DNN代替了傳統的人工提取特征的方法(AlexNet)
2014+ 用于DNN加速的硬件興起(Neuflow,DianNao)
盡管神經網絡在20世紀40年代就被提出了,但一直到80年代末期才有了第一個實際應用,識別手寫數字的LeNet。這個系統廣泛地應用在支票地數字識別上。而自2010年之后,基于DNN的應用爆炸式增長。
深度學習在2010年前后得到巨大成功主要是由三個因素導致的。首先是訓練網絡所需的海量信息。學習一個有效的表示需要大量的訓練數據。目前Facebook每天收到超過3.5億張圖片,沃爾瑪每小時產生2.5Pb的用戶數據,YouTube每分鐘有300小時的視頻被上傳。因此,云服務商和許多公司有海量的數據來訓練算法。其次是充足的計算資源。半導體和計算機架構的進步提供了充足的計算能力,使得在合理的時間內訓練算法成為可能。最后,算法技術的進化極大地提高了準確性并拓寬了DNN的應用范圍。早期的DNN應用打開了算法發展的大門。它激發了許多深度學習框架的發展(大多數都是開源的),這使得眾多研究者和從業者能夠很容易的使用DNN網絡。
ImageNet挑戰是機器學習成功的一個很好的例子。這個挑戰是涉及幾個不同方向的比賽。第一個方向是圖像分類,其中給定圖像的算法必須識別圖像中的內容,如下圖所示。訓練集由120萬張圖像組成,每張圖片標有圖像所含的1000個對象類別之一。然后,該算法必須準確地識別測試集中圖像。
圖4顯示了多年來ImageNet挑戰中各年最佳參賽者的表現。可以看出算法的準確性最初錯誤率25%以上。 2012年,多倫多大學的一個團隊使用圖GPU的高計算能力和深層神經網絡方法,即AlexNet,將錯誤率降低了約10%。他們的成就導致了深度學習風格算法的流行,并不斷的改進。
圖4:Imagenet歷年準確率變化
ImageNet挑戰中使用深度學習方法的隊伍,和使用GPU計算的參與者數量都在相應增加。2012年時,只有四位參賽隊使用了GPU,而到了2014年,幾乎所有參賽者都使用了GPU。這反映了從傳統的計算機視覺方法到于深度學習的研究方式的完全的轉變。
在2015年,ImageNet獲獎作品ResNet 超過人類水平準確率(top-5錯誤率低于5%),將錯誤率降到3%以下。而目前的重點也不過多的放在準確率的提升上,而是放在其他一些更具挑戰性的方向上,如對象檢測和定位。這些成功顯然是DNNs應用范圍廣泛的一個原因。
DNN的應用
目前DNN已經廣泛應用到各個領域,下面列舉一些DNN已經深遠影響的領域,和一些未來可能產生巨大影響的領域。
圖像和視頻視頻可能是大數據時代中最多的資源。它占據了當今互聯網70%的流量。例如,世界范圍內每天都會產生80億小時的監控視頻。計算機視覺需要從視頻中抽取有意義的信息。DNN極大地提高了許多計算機視覺任務地準確性,例如圖像分類,物體定位和檢測,圖像分割,和動作識別。
語音和語言DNN也極大地提高了語音識別和許多其他相關任務地準確率,例如機器翻譯,自然語言處理和音頻生成。
醫藥DNN在基因學中扮演了重要的角色,它探究了許多疾病的基因層面的原因,例如孤獨癥,癌癥,和脊髓性肌萎縮。它同樣也被應用在醫學圖像檢測中,用來檢測皮膚癌,腦癌以及乳腺癌等等。
游戲近期,許多困難的AI挑戰包括游戲都被使用DNN的方法解決了。這些成功需要訓練技術上的創新,以及強化學習(網絡通過自身輸出的結果進行反饋訓練)。DNN在Atari(一種流行的家用游戲機)和圍棋上,已經有了超過人類的準確度。
機器人DNN在一些機器人學的任務上同樣取得了成功,例如機械臂抓取,運動規劃,視覺導航,四旋翼飛行器穩定性控制以及無人駕駛汽車駕駛策略。
DNN目前已經有了很廣泛的應用。我們將目光放向未來,DNN會在醫藥和機器人領域扮演更重要的角色。同時,也會在金融(例如交易,能源預測和風險評估),基礎設施建設(例如結構安全性,交通控制),天氣預報和事件檢測中有更多的應用。
嵌入式與云
不同的DNN應用和過程(training vs inference)有不同的計算需求。尤其是訓練過程,需要一個較大的數據集和大量計算資源來進行迭代,因此需要在云端進行計算。而推理過程可以在云端或者終端進行(例如物聯網設備或移動終端)。
在DNN的許多應用中,需要推理過程在傳感器附近。例如無人駕駛汽車或者無人機導航或者機器人,處理過程就必須在本地進行,因為延遲和傳輸的不穩定性造成的安全風險過高。然而對視頻進行處理計算相當復雜。因此,能夠高效分析視頻的低成本硬件仍然是制約DNN應用的重要因素。能夠執行DNN推理過程的嵌入式平臺要有嚴格的能量消耗,計算和存儲成本限制。這篇論文在推理過程中的計算需求方面進行了詳細的介紹,感興趣的讀者可以參考文末連接進一步深入了解。
DNN組成部分與常見模型
DNN針對不同的應用有很多種形式,而流行的形式也在快速地進化,以改善準確性和高效性。所有DNN的輸入都是一系列需要被網絡分析的值。這些值可以是一幅圖片的像素,音頻波形的幅值采樣值,或者一些表示系統或游戲狀態的數值。
處理輸入的網絡主要有兩種形式:前饋(Feed Forward)或者循環(Recurrent),如圖2(c)所示。在前饋網絡中,所有的計算都是對前面層輸出的一系列運算。最后的運算生成網絡的輸出,例如一個圖片包含某個物體的概率值,一段音頻序列包含某個單詞的概率值。在這樣的DNN中,網絡是無記憶性的,針對同一段輸入,輸出總是相同的,而與網絡先前的輸入是無關的。
相反,循環神經網絡(RNN),擁有內部記憶,允許長期的依賴影響輸出。其中LSTM(Long Short Term Memory network)是RNN中很流行的一個變體。在這些網絡中,一些內部中間操作生成的值會被存儲在網絡中,并在后面的操作中與其他輸入結合,共同作為輸入。
如圖2(d)左部分網絡,DNN可以由全連接層組成(Fully-Connected Layer,也叫做多層感知機)。在全連接層中,輸出激活是所有輸入激活的加權和(前后兩層的神經元是全部連接在一起的)。由于臨近兩層的所有神經元都是相互連接的,這會導致權重參數過多,需要大量的存儲空間和計算資源。不過幸運的是,在許多應用中,我們可以通過設置某些激活之間連接的權值為0來減少參數的數量,而不影響準確性。這種叫做稀疏連接層(Sparsely-Connected Layer),如圖2(d)右部分網絡。
為了減少權重參數,提高計算效率,我們可以更進一步,限制對輸出有貢獻的權值的數量。如果輸出值是輸入中一個固定窗口大小的函數,就可以實現結構上的稀疏性。如果每個計算每個輸出時的權重都是相同的,那么就可以進一步提升效率。權值共享(weight sharing)可以極大地降低權重對存儲空間的需求。
一個最流行的窗口化,權值共享的網絡就是卷積神經網絡(convolution neural network)。如圖5(a)所示,每個輸出僅僅由一小個鄰域的激活的加權和計算得到。每個濾波器擁有有限的感知野(receptive field),輸入中超過一定距離的值的權重都被設置為零。同時,對于每個輸出,同樣的權值是被共享的,也就是說濾波器有空間不變性。
圖5:卷積
DNN組成部分
卷積神經網絡:如圖6所示,由多個卷積層組成(CONV),每個卷積層對各自的輸入進行高階抽象,這種高階抽象被稱為特征圖(feature map,fmap)。CNN可以通過非常深的層級實現極高的性能。卷積神經網絡被廣泛應用在圖像理解,語音識別,游戲,以及機器人學等。圖5(b)介紹了CNN卷積的過程,CNN中的每個卷積層主要由高維卷積構成。輸入為一系列二維特征圖(input feature map),特征圖的個數被稱為通道,這里有C個通道。卷積層輸出的每個點都是所有通道卷積之和。卷積層輸出的通道數取決于濾波器的個數,本例中有M個濾波器,因此輸出特征圖為M通道。
圖6:卷積神經網絡
非線性函數:在每個卷積或全連接計算之后,都會使用一個非線性激活函數。如圖7所示,不同種類的非線性函數向DNN中引入非線性。起初DNN經常使用Sigmoid或tanh函數,目前ReLU和它的一些變種函數被證明可以更簡單,更易訓練,同時也能達到更高的準確性,因此變得越來越流行。
圖7:常用非線性激活函數
池化(Pooling):池化可以使網絡魯棒性更強。通常池化都是不重疊的,這樣能降低表示的維數,減小參數量。
圖8:池化
標準化(Normalization):控制各層輸入的分布可以極大的加速訓練過程并提高準確度。常有的如批標準化(batch normalization)(如下公式),它更進一步的進行縮放和平移,其中γ和β為參數,需要在訓練中學習。
常見DNN模型
LeNet:1989年第一個CNN方法,為了解決手寫數字識別而設計的。
AlexNet:它在2012年贏得了ImageNet挑戰,是第一個使用CNN方法贏得ImageNet的網絡。它擁有5個卷積層和3個全連接層。
Overfeat:它與AlexNet結構很相似,同樣擁有5個卷積層和3個全連接層,區別是Overfeat的濾波器數量更多,所以準確度略有提升。
VGG-16:網絡深度大大加深,達到16層,其中包含13個卷積層和3個全連接層。為了平衡網絡層數加深而導致的成本增加,一個大的濾波器被分解為多個小的濾波器,來減小參數數量,并具有相同的感知野。VGG有兩個模型,還有一個VGG-19的模型,比VGG-16的Top-5錯誤率低0.1%。
圖9:為了減少參數,為了使感知野大小不變,使用兩個較小的濾波器代替大的濾波器
GoogLeNet:網絡深度達到22層,同時引入了Inception模型,如圖10所示。之前的模型通常是級聯的,而Inception模型是并行連接的。可以看到,它使用了多種大小的濾波器對輸入進行處理,這是為了能夠在不同尺度上處理輸入。22層網絡包括了三個卷積層,接下來使9個inceptioin層(每層相當于兩個卷積層),以及一個全連接層。
圖10:Inception模型
ResNet:也叫做殘差網絡(Residual Net)。使用了殘差連接使得網絡變得更深(34層,或更多甚至千層)。它是ImageNet挑戰中第一個top-5錯誤率低于人類的。當網絡層次變得更深時,訓練時的一個難點就是梯度消失(Vanishing Gradient)。由于沿著網絡進行反向傳播時,梯度會越來越小,導致對于很深的網絡,最初幾層網絡的權重基本不會更新。殘差網絡引入了“短接”模型,包含了全等連接,使得梯度傳播可以跳過卷積層,即使網絡層數達到一千層仍可以訓練。
圖11:殘差模型
DNN處理的硬件
由于DNN的流行,許多硬件平臺都針對DNN處理的特性進行針對性的開發。無論是服務器級別的還是嵌入式的SoC硬件都在快速發展。因此,了解各種平臺如何加速計算,是十分重要的。
CONV和FC層的基本組成都是乘加操作(Multiply-and-Accumulate,MAC),可以很容易的并行化。為了實現高性能,如圖12所示,包括時間和空間的架構的經典模型經常被使用。時間架構(也稱作SIMD或SIMT)主要出現在CPU或GPU中。它對大量ALU使用集中控制。這些ALU智能從存儲器層次結構中獲取數據,并且彼此不能通信數據。相比之下,空間架構使用數據流處理,即ALU形成處理鏈,使得它們能直接將數據從一個傳遞到另一個。每個ALU有自己的控制邏輯和本地內存,稱為暫存器或注冊文件。空間架構主要使用在為DNN專門設計的ASIC中。
圖12:時間和空間架構
對于時間架構,可以使用核心中的計算轉換(Computational Transform)來減少乘法的數量,以增加吞吐量(Throughput)。
對于加速硬件中使用的空間架構,使用存儲器層次結構中的低成本內存,來增加數據重利用率,以降低能耗。
-
深度神經網絡
+關注
關注
0文章
61瀏覽量
4527 -
dnn
+關注
關注
0文章
60瀏覽量
9053
發布評論請先 登錄
相關推薦
評論