您的位置:首頁>手機>正文

深度神經網路發展歷程全回顧:如何加速DNN運算?

深度神經網路(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億個神經元。神經元相互連接,通過樹突接受其他神經元的信號,對這些信號進行計算之後,通過軸突將信號傳遞給下一個神經元。一個神經元的軸突分支出來並連接到許多其他神經元的樹突上,軸突分支和樹突之間的連接被稱為突觸。據估計,人類大腦平均有10

14

-10

15

個突觸。

突觸的一個關鍵特性是它可以縮放通過它的信號大小。這個比例因數可以被稱為權重(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使用集中控制。這些AL U智慧從記憶體層次結構中獲取資料,並且彼此不能通信資料。相比之下,空間架構使用資料流程處理,即ALU形成處理鏈,使得它們能直接將資料從一個傳遞到另一個。每個ALU有自己的控制邏輯和本地記憶體,稱為暫存器或註冊檔。空間架構主要使用在為DNN專門設計的ASIC中。

圖12:時間和空間架構

對於時間架構,可以使用核心中的計算轉換(Computational Transform)來減少乘法的數量,以增加輸送量(Throughput)。

對於加速硬體中使用的空間架構,使用記憶體層次結構中的低成本記憶體,來增加資料重利用率,以降低能耗。

論文很詳細的介紹了如何通過這兩種方法改進時間和空間架構,以加速DNN運算的,感興趣的讀者可以閱讀原論文深入瞭解:

Efficient Processing of Deep Neural Networks: A Tutorial and Survey

喜欢就按个赞吧!!!
点击关闭提示