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