“夫因樸生文,因拙生巧,相因相生,以至今日?!痹?a href="http://ttokpm.com/v/tag/150/" target="_blank">人工智能領(lǐng)域,機(jī)器學(xué)習(xí)研究與芯片行業(yè)的發(fā)展,即是一個(gè)相因相生的過(guò)程。自第一個(gè)深度網(wǎng)絡(luò)提出,深度學(xué)習(xí)歷經(jīng)幾次寒冬,直至近年,才真正帶來(lái)一波AI應(yīng)用的浪潮,這很大程度上歸功于GPU處理芯片的發(fā)展。與此同時(shí),由于AI應(yīng)用場(chǎng)景的多元化,深度學(xué)習(xí)在端側(cè)的應(yīng)用需求日益迫切,也促使芯片行業(yè)開展面向深度學(xué)習(xí)的專用芯片設(shè)計(jì)。如果能夠?qū)⑸疃?a href="http://ttokpm.com/v/tag/2562/" target="_blank">算法與芯片設(shè)計(jì)相結(jié)合,將大大拓展AI的應(yīng)用邊界,真正將智能從云端落地。本文中,來(lái)自中科院自動(dòng)化所的程健研究員,將帶著大家一方面探索如何將深度學(xué)習(xí)高效化,另一方面討論如何針對(duì)深度算法來(lái)設(shè)計(jì)專用處理芯片。文末,提供文中提到參考文獻(xiàn)的下載鏈接。
上圖是本次匯報(bào)的大綱,主要從深度學(xué)習(xí)發(fā)展現(xiàn)狀、面臨的挑戰(zhàn)、神經(jīng)網(wǎng)絡(luò)加速算法設(shè)計(jì)、深度學(xué)習(xí)芯片設(shè)計(jì)和對(duì)未來(lái)的展望五個(gè)方面來(lái)展開。
首先我們來(lái)看一下深度學(xué)習(xí)的發(fā)展現(xiàn)狀。毋庸置疑的是深度學(xué)習(xí)目前在各個(gè)領(lǐng)域都取得了一些突破性的進(jìn)展,上圖展示了深度學(xué)習(xí)目前廣泛應(yīng)用的領(lǐng)域。
深度學(xué)習(xí)近年來(lái)取得的長(zhǎng)足發(fā)展離不開三個(gè)方面,上圖展示了其不可或缺的三個(gè)要素。一是隨著互聯(lián)網(wǎng)的發(fā)展產(chǎn)生的大數(shù)據(jù),二是游戲行業(yè)的發(fā)展促使的如GPU計(jì)算資源的迅速發(fā)展,三是近年來(lái)研究者們對(duì)于深度學(xué)習(xí)模型的研究。在目前的情況下,給定一個(gè)應(yīng)用場(chǎng)景,我們可以使用大量的數(shù)據(jù)和計(jì)算資源搭建非常深的網(wǎng)絡(luò)模型來(lái)達(dá)到比較高的性能。然而在實(shí)際應(yīng)用中,這些復(fù)雜網(wǎng)絡(luò)由于需要很高的計(jì)算量難以很好地部署到設(shè)備上以滿足實(shí)際應(yīng)用的需求,所以如何減少深度神經(jīng)網(wǎng)絡(luò)計(jì)算量,成為深度學(xué)習(xí)領(lǐng)域中的研究熱點(diǎn)。
另一方面,面向深度學(xué)習(xí)設(shè)計(jì)的芯片也受到了越來(lái)越多的關(guān)注。目前一些通用的芯片如CPU不能很好地適應(yīng)神經(jīng)網(wǎng)絡(luò)這種計(jì)算量非常密集的操作,而計(jì)算能力強(qiáng)大的GPU由于其價(jià)格和功耗因素很難在大量終端設(shè)備上部署。所以如何設(shè)計(jì)一個(gè)面向深度學(xué)習(xí)的專用芯片達(dá)到速度和功耗的要求是目前比較火熱的研究方向。
雖然現(xiàn)在對(duì)神經(jīng)網(wǎng)絡(luò)模型設(shè)計(jì)和深度學(xué)習(xí)芯片設(shè)計(jì)的研究很多,但依舊面臨很多挑戰(zhàn)。
面臨的挑戰(zhàn)之一是越來(lái)越復(fù)雜的網(wǎng)絡(luò)模型,上圖展示了近年來(lái)主流網(wǎng)絡(luò)模型的參數(shù)和計(jì)算量等信息??梢钥闯鲭S著網(wǎng)絡(luò)規(guī)模越來(lái)越大,網(wǎng)絡(luò)結(jié)構(gòu)越來(lái)越復(fù)雜,由此帶來(lái)的越來(lái)越大的計(jì)算量會(huì)是一個(gè)挑戰(zhàn)。
面臨的挑戰(zhàn)之二是深度學(xué)習(xí)復(fù)雜多變的應(yīng)用場(chǎng)景,主要包括在移動(dòng)設(shè)備上算不好、穿戴設(shè)備上算不了、數(shù)據(jù)中心算不起三個(gè)方面。由于移動(dòng)設(shè)備和可穿戴設(shè)備本身硬件比較小,允許運(yùn)行的計(jì)算量非常有限,在面臨非常復(fù)雜多變的應(yīng)用場(chǎng)景的時(shí)候,往往不能滿足實(shí)際需求。而目前存在的一些移動(dòng)中心的計(jì)算由于其代價(jià)昂貴使得大多數(shù)人只能望而卻步。
面臨的挑戰(zhàn)之三是近年來(lái)摩爾定理隨著時(shí)間推移的失效,不能像以前一樣僅僅依靠在硬件上堆疊晶體管來(lái)實(shí)現(xiàn)物理層面的性能提升。
目前深度學(xué)習(xí)面臨的三個(gè)挑戰(zhàn)促使我們從兩個(gè)方面去思考,一是網(wǎng)絡(luò)模型本身優(yōu)化的問(wèn)題,二是設(shè)計(jì)面向深度學(xué)習(xí)專用芯片來(lái)實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的高效計(jì)算。下面分別從這兩個(gè)方面進(jìn)行闡述。
在深度學(xué)習(xí)模型的優(yōu)化計(jì)算方面,包括一些最近幾年研究的工作,上圖展示了三種方式,下面主要列出了一些比較適合芯片的神經(jīng)網(wǎng)絡(luò)加速計(jì)算的方法。
首先對(duì)于神經(jīng)網(wǎng)絡(luò)大部分的計(jì)算,無(wú)論是卷積層還是全連接層都可以轉(zhuǎn)換成矩陣乘的基礎(chǔ)操作,上圖展示了這個(gè)過(guò)程,所以對(duì)矩陣乘進(jìn)行加速的方法都可以引入到神經(jīng)網(wǎng)絡(luò)的加速中來(lái),包括低秩分解、網(wǎng)絡(luò)稀疏化、低精度表示等方法。
上圖展示了低秩分解的基本思想,將原來(lái)大的權(quán)重矩陣分解成多個(gè)小的矩陣,右邊的小矩陣的計(jì)算量都比原來(lái)大矩陣的計(jì)算量要小,這是低秩分解的基本出發(fā)點(diǎn)。
低秩分解有很多方法,最基本的是奇異值分解SVD。上圖是微軟在2016年的工作,將卷積核矩陣先做成一個(gè)二維的矩陣,再做SVD分解。上圖右側(cè)相當(dāng)于用一個(gè)R的卷積核做卷積,再對(duì)R的特征映射做深入的操作。從上面可以看到,雖然這個(gè)R的秩非常小,但是輸入的通道S還是非常大的。
為了解決SVD分解過(guò)程中通道S比較大的問(wèn)題,我們從另一個(gè)角度出發(fā),沿著輸入的方向?qū)做降維操作,這就是上圖展示的Tucker分解的思想。具體操作過(guò)程是:將原來(lái)的卷積,首先在S維度上做一個(gè)低維的表達(dá),再做一個(gè)正常的3×3的卷積,最后再做一個(gè)升維的操作。
在SVD分解和Tucker分解之后的一些工作主要是做了更進(jìn)一步的分解。上圖展示了使用微調(diào)的CP分解加速神經(jīng)網(wǎng)絡(luò)的方法。在原來(lái)的四維張量上,在每個(gè)維度上都做類似1×1的卷積,轉(zhuǎn)化為第二行的形式,在每一個(gè)維度上都用很小的卷積核去做卷積。在空間維度上,大部分都是3×3的卷積,所以空間的維度很小,可以轉(zhuǎn)化成第三行的形式,在輸入和輸出通道上做低維分解,但是在空間維度上不做分解,類似于MobileNet。
上圖展示了我們?cè)?016年的工作,結(jié)合了上述兩種分解方法各自的優(yōu)勢(shì)。首先把輸入?yún)?shù)做降維,然后在第二個(gè)卷積的時(shí)候,做分組操作,這樣可以降低第二個(gè)3×3卷積的計(jì)算量,最后再做升維操作。另一方面由于分組是分塊卷積,它是有結(jié)構(gòu)的稀疏,所以在實(shí)際中可以達(dá)到非常高的加速,我們使用VGG網(wǎng)絡(luò)在手機(jī)上的實(shí)驗(yàn)可以達(dá)到5-6倍的實(shí)際加速效果。
第二個(gè)方面是網(wǎng)絡(luò)的剪枝,基本思想是刪除卷積層中一些不重要的連接。
上圖展示了在NIP2015上提出的非常經(jīng)典的三階段剪枝的方法。首先訓(xùn)練一個(gè)全精度網(wǎng)絡(luò),隨后刪除一些不重要的節(jié)點(diǎn),后面再去訓(xùn)練權(quán)重。這種非結(jié)構(gòu)化的剪枝的方法,雖然它的理論計(jì)算量可以壓縮到很低,但是收益是非常低的,比如在現(xiàn)在的CPU或者GPU框架下很難達(dá)到非常高的加速效果。所以下面這種結(jié)構(gòu)化的剪枝技術(shù)越來(lái)越多。
從去年的ICCV就有大量基于channel sparsity的工作。上面是其中的一個(gè)示意圖,相當(dāng)于對(duì)每一個(gè)feature map定義其重要性,把不重要的給刪除掉,這樣產(chǎn)生的稀疏就是有規(guī)則的,我們可以達(dá)到非常高的實(shí)際加速效果。
第三個(gè)方面是低比特量化,上圖展示了具體操作方法。目前的低比特量化方法和上面提到的低秩分解、網(wǎng)絡(luò)剪枝這兩種方法是可結(jié)合的。左側(cè)是不同的比特?cái)?shù)在計(jì)算機(jī)上的存儲(chǔ)方式,右側(cè)是不同操作的功耗??梢钥闯鰜?lái)低比特的功耗遠(yuǎn)遠(yuǎn)小于高比特浮點(diǎn)數(shù)操作的功耗。
上圖是在定點(diǎn)表示里面最基本的方法:BNN和BWN。在網(wǎng)絡(luò)進(jìn)行計(jì)算的過(guò)程中,可以使用定點(diǎn)的數(shù)據(jù)進(jìn)行計(jì)算,由于是定點(diǎn)計(jì)算,實(shí)際上是不可導(dǎo)的,于是提出使用straight-through方法將輸出的估計(jì)值直接傳給輸入層做梯度估計(jì)。在網(wǎng)絡(luò)訓(xùn)練過(guò)程中會(huì)保存兩份權(quán)值,用定點(diǎn)的權(quán)值做網(wǎng)絡(luò)前向后向的計(jì)算,整個(gè)梯度累積到浮點(diǎn)的權(quán)值上,整個(gè)網(wǎng)絡(luò)就可以很好地訓(xùn)練,后面幾乎所有的量化方法都會(huì)沿用這種訓(xùn)練的策略。前面包括BNN這種網(wǎng)絡(luò)在小數(shù)據(jù)集上可以達(dá)到跟全精度網(wǎng)絡(luò)持平的精度,但是在ImageNet這種大數(shù)據(jù)集上還是表現(xiàn)比較差。
上圖展示了ECCV2016上一篇名為XNOR-Net的工作,其思想相當(dāng)于在做量化的基礎(chǔ)上,乘了一個(gè)尺度因子,這樣大大降低了量化誤差。他們提出的BWN,在ImageNet上可以達(dá)到接近全精度的一個(gè)性能,這也是首次在ImageNet數(shù)據(jù)集上達(dá)到這么高精度的網(wǎng)絡(luò)。
上圖展示了阿里巴巴冷聰?shù)热俗龅耐ㄟ^(guò)ADMM算法求解binary約束的低比特量化工作。從凸優(yōu)化的角度,在第一個(gè)優(yōu)化公式中,f(w)是網(wǎng)絡(luò)的損失函數(shù),后面會(huì)加入一項(xiàng)W在集合C上的loss來(lái)轉(zhuǎn)化為一個(gè)優(yōu)化問(wèn)題。這個(gè)集合C取值只有正負(fù)1,如果W在滿足約束C的時(shí)候,它的loss就是0;W在不滿足約束C的時(shí)候它的loss就是正無(wú)窮。為了方便求解還引進(jìn)了一個(gè)增廣變量,保證W是等于G的,這樣的話就可以用ADMM的方法去求解。
他們?cè)贏lexNet和ResNet上達(dá)到了比BWN更高的精度,已經(jīng)很接近全精度網(wǎng)絡(luò)的水平。
上圖是我們今年通過(guò)Hashing方法做的網(wǎng)絡(luò)權(quán)值二值化工作。第一個(gè)公式是我們最常用的哈希算法的公式,其中S表示相似性,后面是兩個(gè)哈希函數(shù)之間的內(nèi)積。我們?cè)谏窠?jīng)網(wǎng)絡(luò)做權(quán)值量化的時(shí)候采用第二個(gè)公式,第一項(xiàng)表示輸出的feature map,其中X代表輸入的feature map,W表示量化前的權(quán)值,第二項(xiàng)表示量化后輸出的feature map,其中B相當(dāng)于量化后的權(quán)值,通過(guò)第二個(gè)公式就將網(wǎng)絡(luò)的量化轉(zhuǎn)化成類似第一個(gè)公式的Hashing方式。通過(guò)最后一行的定義,就可以用Hashing的方法來(lái)求解Binary約束。
我們做了實(shí)驗(yàn),達(dá)到了比之前任何一個(gè)網(wǎng)絡(luò)都高的精度,非常接近全精度網(wǎng)絡(luò)的性能。
上圖是我們?cè)贑VPR2017上的工作。實(shí)際中借助了矩陣分解和定點(diǎn)變換的優(yōu)勢(shì),對(duì)原始權(quán)值矩陣直接做一個(gè)定點(diǎn)分解,限制分解后的權(quán)值只有+1、-1、0三個(gè)值。將網(wǎng)絡(luò)變成三層的網(wǎng)絡(luò),首先是正常的3×3的卷積,對(duì)feature map做一個(gè)尺度的縮放,最后是1×1的卷積,所有的卷積的操作都有+1、-1、0。
上圖是我們?cè)贗mageNet數(shù)據(jù)集上與流行的網(wǎng)絡(luò)模型做的對(duì)比實(shí)驗(yàn),可以看出我們提出的FFN與一些網(wǎng)絡(luò)相比已經(jīng)達(dá)到甚至超過(guò)全精度網(wǎng)絡(luò)的性能;雖然與ResNet-50相比還存在一些性能上的損失,但是相比之前的方法損失已經(jīng)小了很多。
下面講述一些專門針對(duì)深度學(xué)習(xí)芯片設(shè)計(jì)的工作。
上圖是2017年芯片設(shè)計(jì)兩個(gè)頂會(huì)ISCA和ISSCC上與deep learning相關(guān)session情況,這兩個(gè)會(huì)議上都有專門針對(duì)深度學(xué)習(xí)的討論可以看出深度學(xué)習(xí)對(duì)芯片設(shè)計(jì)產(chǎn)生了巨大影響。
首先是上圖中谷歌在2017年推出的的TPU,設(shè)計(jì)了矩陣基本乘法的單元,使用int8來(lái)表示,還專門針對(duì)芯片上包括權(quán)值的所有數(shù)據(jù)設(shè)計(jì)了一些緩沖區(qū)域。
上圖是中科院計(jì)算所研發(fā)的寒武紀(jì)。它在思想上實(shí)際和TPU有一點(diǎn)相似,實(shí)際中專門針對(duì)CNN設(shè)計(jì)了一些計(jì)算單元,還對(duì)常用的一些卷積神經(jīng)網(wǎng)絡(luò)中的操作專門設(shè)計(jì)了一些指令,這樣芯片可以達(dá)到452GOP/s的高速度和485Mw的低功耗。
上圖是清華大學(xué)2016年在FPGA平臺(tái)上使用了VGG16所做的早期工作,采用類似正常網(wǎng)絡(luò)的計(jì)算思路,在FPGA上實(shí)現(xiàn)了VGG16,可以達(dá)到4.5幀每秒的速度。
上圖是MIT發(fā)布的一款名為Eyeriss的芯片,把正常的3×3卷積核操作做差分運(yùn)算,將每一行做一個(gè)類似的處理,在卷積核進(jìn)來(lái)以后,對(duì)整個(gè)feature map掃描以后,再把數(shù)據(jù)給拋掉。
上面對(duì)3×3的卷積核的處理只是針對(duì)一行,如果并行處理三行,就是上面這張圖。將三行都保存在片上,藍(lán)色的部分相當(dāng)于特征,對(duì)其使用類似于一個(gè)流水線的方式進(jìn)行處理,最左邊的圖表示一二三,中間是三三四,右邊是三四五,用這種方式把feature map在芯片上所有位置的響應(yīng)都計(jì)算出來(lái)。
上面是我們2018年在DATE上的工作,我們和清華大學(xué)使用相同的板子做了VGG16。我們的出發(fā)點(diǎn)是這樣的,由于VGG16的feature map非常大,所以在計(jì)算過(guò)程中我們不可避免地需要在內(nèi)存和板子上搬數(shù)據(jù),這會(huì)帶來(lái)非常大的功耗。如果我們一次要搬這個(gè)數(shù)據(jù)的話,無(wú)論是從功耗還是速度的角度都有很大的損失。我們從算法和硬件結(jié)合的角度考慮,首先從算法上對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行分塊的操作,將上面正常的卷積,分成2×2的四塊,本來(lái)從A1計(jì)算B1的時(shí)候需要A2和A3的信息,現(xiàn)在在算法的層面把這些依賴都去掉,就可以轉(zhuǎn)化成下面的這種方式。所有對(duì)B1的計(jì)算只依賴于A1,得到B1以后不需要等B2和B3的計(jì)算結(jié)果,就可以直接使用B1去計(jì)算C1,而且還可以把A1、B1、C1的操作做層之間的合并,這樣計(jì)算時(shí)延非常低,并且我們?cè)谡麄€(gè)網(wǎng)絡(luò)的運(yùn)算過(guò)程中不需要大量的內(nèi)存,從而大幅提高了神經(jīng)網(wǎng)絡(luò)的計(jì)算速度。
下面談一談我們能看到的對(duì)神經(jīng)網(wǎng)絡(luò)未來(lái)的展望。
1. 首先前面提到的二值化方法大多都是針對(duì)權(quán)值的二值化,對(duì)這些網(wǎng)絡(luò)的feature map做8比特的量化,很容易達(dá)到類似于feature map是浮點(diǎn)數(shù)的性能。如果我們能夠把feature map也做成binary的話,無(wú)論是在現(xiàn)有的硬件還是在專用的硬件上都可以達(dá)到更好的性能。但是性能上還有很大損失。所以如何更高效地二值化網(wǎng)絡(luò)也是未來(lái)研究的熱點(diǎn)。
2. 目前在訓(xùn)練階段的一些量化操作都是針對(duì)測(cè)試階段的。如果我們要設(shè)計(jì)一款有自主學(xué)習(xí)能力的芯片,則需要在訓(xùn)練的階段實(shí)現(xiàn)量化,我們可以在芯片實(shí)際使用的時(shí)候在線更新權(quán)值,這是未來(lái)發(fā)展的一個(gè)趨勢(shì)。
3. 另一個(gè)方面是不需要重新訓(xùn)練,或者只需要無(wú)監(jiān)督訓(xùn)練的網(wǎng)絡(luò)加速與壓縮方法?,F(xiàn)在的網(wǎng)絡(luò)加速方法都是做了一些網(wǎng)絡(luò)壓縮以后還要做大量的fine-tuning操作,但是實(shí)際使用中用戶給定一個(gè)網(wǎng)絡(luò),如果我們可以使用不需要重新訓(xùn)練,或者我們只是用一部分不帶標(biāo)簽的數(shù)據(jù)就可以對(duì)這個(gè)網(wǎng)絡(luò)進(jìn)行壓縮的話,這是一個(gè)非常有實(shí)用價(jià)值的研究方向。
4. 面向不同的任務(wù),現(xiàn)在進(jìn)行加速的方法,包括面向深度學(xué)習(xí)的芯片,大部分都是針對(duì)分類任務(wù)去做的。但是在實(shí)際應(yīng)用中,分類是一個(gè)最基礎(chǔ)的工作,而像目標(biāo)檢測(cè)、圖像分割的應(yīng)用也非常的廣泛,對(duì)這些任務(wù)進(jìn)行加速也是非常重要的問(wèn)題。
5. 單獨(dú)做神經(jīng)網(wǎng)絡(luò)或芯片架構(gòu)的優(yōu)化都很難做得非常好,兩個(gè)方面結(jié)合起來(lái)協(xié)同優(yōu)化會(huì)更好。這些就是我們能看到的一些未來(lái)的發(fā)展。
-
人工智能
+關(guān)注
關(guān)注
1789文章
46652瀏覽量
237090 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5463瀏覽量
120891
原文標(biāo)題:深度學(xué)習(xí)高效計(jì)算與處理器設(shè)計(jì)
文章出處:【微信號(hào):deeplearningclass,微信公眾號(hào):深度學(xué)習(xí)大講堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論