一種遞歸神經(jīng)網(wǎng)絡(luò)在FPGA平臺(tái)上的實(shí)現(xiàn)方案詳解
近十年來(lái),人工智能又到了一個(gè)快速發(fā)展的階段。深度學(xué)習(xí)在其發(fā)展中起到了中流砥柱的作用,盡管擁有強(qiáng)大的模擬預(yù)測(cè)能力,深度學(xué)習(xí)還面臨著超大計(jì)算量的問(wèn)題。在硬件層面上,GPU,ASIC,F(xiàn)PGA都是解決龐大計(jì)算量的方案。本文將闡釋深度學(xué)習(xí)和FPGA各自的結(jié)構(gòu)特點(diǎn)以及為什么用FPGA加速深度學(xué)習(xí)是有效的,并且將介紹一種遞歸神經(jīng)網(wǎng)絡(luò)(RNN)在FPGA平臺(tái)上的實(shí)現(xiàn)方案。
揭開(kāi)深度學(xué)習(xí)的面紗
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)領(lǐng)域,都屬于人工智能的范疇。深度學(xué)習(xí)主要研究的是人工神經(jīng)網(wǎng)絡(luò)的算法、理論、應(yīng)用。自從2006年Hinton等人提出來(lái)之后,深度學(xué)習(xí)高速發(fā)展,在自然語(yǔ)言處理、圖像處理、語(yǔ)音處理等領(lǐng)域都取得了非凡的成就,受到了巨大的關(guān)注。在互聯(lián)網(wǎng)概念被人們普遍關(guān)注的時(shí)代,深度學(xué)習(xí)給人工智能帶來(lái)的影響是巨大的,人們會(huì)為它隱含的巨大潛能以及廣泛的應(yīng)用價(jià)值感到不可思議。
事實(shí)上,人工智能是上世紀(jì)就提出來(lái)的概念。1957年,Rosenblatt提出了感知機(jī)模型(Perception),即兩層的線性網(wǎng)絡(luò);1986年,Rumelhart等人提出了后向傳播算法(Back PropagaTIon),用于三層的神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,使得訓(xùn)練優(yōu)化參數(shù)龐大的神經(jīng)網(wǎng)絡(luò)成為可能;1995年,Vapnik等人發(fā)明了支持向量機(jī)(Support Vector Machines),在分類(lèi)問(wèn)題中展現(xiàn)了其強(qiáng)大的能力。以上都是人工智能歷史上比較有代表性的事件,然而受限于當(dāng)時(shí)計(jì)算能力,AI總是在一段高光之后便要陷入灰暗時(shí)光——稱(chēng)為:“AI寒冬”。
然而,隨著計(jì)算機(jī)硬件能力和存儲(chǔ)能力的提升,加上龐大的數(shù)據(jù)集,現(xiàn)在正是人AI發(fā)展的最好時(shí)機(jī)。自Hinton提出DBN(深度置信網(wǎng)絡(luò))以來(lái),人工智能就在不斷的高速發(fā)展。在圖像處理領(lǐng)域,CNN(卷積神經(jīng)網(wǎng)絡(luò))發(fā)揮了不可替代的作用,在語(yǔ)音識(shí)別領(lǐng)域,RNN(遞歸神經(jīng)網(wǎng)絡(luò))也表現(xiàn)的可圈可點(diǎn)。而科技巨頭也在加緊自己的腳步,谷歌的領(lǐng)軍人物是Hinton,其重頭戲是Google brain,并且在去年還收購(gòu)了利用AI在游戲中擊敗人類(lèi)的DeepMind;Facebook的領(lǐng)軍人物是Yann LeCun,另外還組建了Facebook的AI實(shí)驗(yàn)室,Deepface在人臉識(shí)別的準(zhǔn)確率更達(dá)到了驚人的97.35%;而國(guó)內(nèi)的巨頭當(dāng)屬百度,在挖來(lái)了斯坦福大學(xué)教授Andrew Ng(Coursera的聯(lián)合創(chuàng)始人)并成立了百度大腦項(xiàng)目之后,百度在語(yǔ)音識(shí)別領(lǐng)域的表現(xiàn)一直十分強(qiáng)勢(shì)。
一覽深度學(xué)習(xí)
簡(jiǎn)單來(lái)說(shuō),深度學(xué)習(xí)與傳統(tǒng)的機(jī)器學(xué)習(xí)算法的分類(lèi)是一致的,主要分為監(jiān)督學(xué)習(xí)(supervised learning)和非監(jiān)督學(xué)習(xí)(unsupervised learning)。所謂監(jiān)督學(xué)習(xí),就是輸出是有標(biāo)記的學(xué)習(xí),讓模型通過(guò)訓(xùn)練,迭代收斂到目標(biāo)值;而非監(jiān)督學(xué)習(xí)不需要人為輸入標(biāo)簽,模型通過(guò)學(xué)習(xí)發(fā)現(xiàn)數(shù)據(jù)的結(jié)構(gòu)特征。比較常見(jiàn)的監(jiān)督學(xué)習(xí)方法有邏輯回歸、多層感知機(jī)、卷積神經(jīng)網(wǎng)絡(luò)登;而非監(jiān)督學(xué)習(xí)主要有稀疏編碼器、受限玻爾茲曼機(jī)、深度置信網(wǎng)絡(luò)等。所有的這些都是通過(guò)神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)的,他們通常來(lái)說(shuō)都是非常復(fù)雜的結(jié)構(gòu),需要學(xué)習(xí)的參數(shù)也非常多。但是神經(jīng)網(wǎng)絡(luò)也可以做簡(jiǎn)單的事情,比如XNOR門(mén),如圖。
在圖1(a)中,兩個(gè)輸入x_1和x_2都是分別由一個(gè)神經(jīng)元表示,在輸入中還加入了一個(gè)作為偏置(bias)的神經(jīng)元,通過(guò)訓(xùn)練學(xué)習(xí)參數(shù),最終整個(gè)模型的參數(shù)收斂,功能和圖1(b)真值表一模一樣。圖1(c)分類(lèi)結(jié)果。
而通常來(lái)說(shuō),模型都是比較復(fù)雜的。比如ILSVRC2012年圖像識(shí)別大賽中Krizhevsky等人構(gòu)建出來(lái)的 Alex Net。他們一共構(gòu)建了11層的神經(jīng)網(wǎng)絡(luò)(5個(gè)卷積層,3個(gè)全連接層,3個(gè)池化層),一共有65萬(wàn)個(gè)神經(jīng)元,6千萬(wàn)個(gè)參數(shù),最終達(dá)到了15.2%的識(shí)別錯(cuò)誤率,大大領(lǐng)先于第二名的26.2%。
當(dāng)前深度學(xué)習(xí)得以流行,是得益于大數(shù)據(jù)和計(jì)算性能的提升。但其仍然遭受計(jì)算能力和數(shù)據(jù)量的瓶頸。針對(duì)數(shù)據(jù)量的需求,專(zhuān)家們可以通過(guò)模型的調(diào)整、變更來(lái)緩解,但計(jì)算力的挑戰(zhàn)沒(méi)有捷徑??拼笥嶏w、百度、阿里、360在深度學(xué)習(xí)方面也面臨著計(jì)算力的困擾??拼笥嶏w的深度學(xué)習(xí)平臺(tái)屬于計(jì)算密集型的平臺(tái),集群幾百臺(tái)機(jī)器之間要實(shí)現(xiàn)高速互聯(lián),是類(lèi)似超算的結(jié)構(gòu),但它又不是一個(gè)非常典型的超算??拼笥嶏w最開(kāi)始探索傳統(tǒng)的方式,用大量CPU來(lái)支持大規(guī)模數(shù)據(jù)預(yù)處理,運(yùn)行GMM-HMM等經(jīng)典模型的訓(xùn)練,在千小時(shí)的數(shù)據(jù)量下,效果很不好。而360每天處理的數(shù)據(jù)有上億條,參數(shù)50萬(wàn)以上,如果用CPU,每次模型訓(xùn)練就要花幾天,這對(duì)于崇尚快速迭代的互聯(lián)網(wǎng)公司運(yùn)營(yíng)來(lái)說(shuō)簡(jiǎn)直是不可接受的。
為什么選擇FPGA
FPGA(Field Programmable Gate Array)是在PAL、GAL、CPLD等可編程邏輯器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專(zhuān)用集成電路領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了全定制電路的不足,又克服了原有可編程邏輯器件門(mén)電路數(shù)有限的缺點(diǎn)。FPGA的開(kāi)發(fā)相對(duì)于傳統(tǒng)PC、單片機(jī)的開(kāi)發(fā)有很大不同。FPGA以并行運(yùn)算為主,以硬件描述語(yǔ)言來(lái)實(shí)現(xiàn);相比于PC或單片機(jī)(無(wú)論是馮諾依曼結(jié)構(gòu)還是哈佛結(jié)構(gòu))的順序操作有很大區(qū)別。FPGA開(kāi)發(fā)需要從頂層設(shè)計(jì)、模塊分層、邏輯實(shí)現(xiàn)、軟硬件調(diào)試等多方面著手。FPGA可以通過(guò)燒寫(xiě)位流文件對(duì)其進(jìn)行反復(fù)編程,目前,絕大多數(shù) FPGA 都采用基于 SRAM(StaTIc Random Access Memory 靜態(tài)隨機(jī)存儲(chǔ)器)工藝的查找表結(jié)構(gòu),通過(guò)燒寫(xiě)位流文件改變查找表內(nèi)容實(shí)現(xiàn)配置。
使用CPU。在2006年的時(shí)候,人們還是用串行處理器處理機(jī)器學(xué)習(xí)的問(wèn)題,當(dāng)時(shí)Mutch 和 Lowe開(kāi)發(fā)了一個(gè)工具FHLib(feature hierarchy library)用來(lái)處理hierarchical 模型。對(duì)于CPU來(lái)說(shuō),它所要求的編程量是比較少的并且有可遷移性的好處,但是串行處理的特點(diǎn)變成了它在深度學(xué)習(xí)領(lǐng)域的缺點(diǎn),而這個(gè)缺點(diǎn)是致命的。時(shí)至今日,據(jù)2006年已經(jīng)過(guò)去了十年,過(guò)去的十年集成電路的發(fā)展還是遵循著摩爾定律,CPU的性能得到了極大的提升,然而,這并沒(méi)有讓CPU再次走入深度學(xué)習(xí)研究者的視野。盡管在小數(shù)據(jù)集上CPU能有一定的計(jì)算能力表現(xiàn),多核使得它能夠并行處理,然而這對(duì)深度學(xué)習(xí)來(lái)說(shuō)還是遠(yuǎn)遠(yuǎn)不夠的。
使用GPU。GPU走進(jìn)了研究者的視線,相比于CPU,GPU的核心數(shù)大大提高了,這也讓它有更強(qiáng)大的并行處理能力,它還有更加強(qiáng)大的控制數(shù)據(jù)流和儲(chǔ)存數(shù)據(jù)的能力。Chikkerur進(jìn)行了CPU和GPU在處理目標(biāo)識(shí)別能力上的差別,最終GPU的處理速度是CPU的3-10倍。
使用ASIC。專(zhuān)用集成電路芯片(ASIC)由于其定制化的特點(diǎn),是一種比GPU更高效的方法。但是其定制化也決定了它的可遷移性低,一旦專(zhuān)用于一個(gè)設(shè)計(jì)好的系統(tǒng)中,要遷移到其它的系統(tǒng)是不可能的。并且,其造價(jià)高昂,生產(chǎn)周期長(zhǎng),使得它在目前的研究中是不被考慮的。當(dāng)然,其優(yōu)越的性能還是能在一些領(lǐng)域勝任。用的就是ASIC 的方案,在640×480pixel的圖像中識(shí)別速率能達(dá)到 60幀/秒。
使用FPGA。FPGA在GPU和ASIC中取得了權(quán)衡,很好的兼顧了處理速度和控制能力。一方面,F(xiàn)PGA是可編程重構(gòu)的硬件,因此相比GPU有更強(qiáng)大的可調(diào)控能力;另一方面,與日增長(zhǎng)的門(mén)資源和內(nèi)存帶寬使得它有更大的設(shè)計(jì)空間。更方便的是,F(xiàn)PGA還省去了ASIC方案中所需要的流片過(guò)程。FPGA的一個(gè)缺點(diǎn)是其要求使用者能使用硬件描述語(yǔ)言對(duì)其進(jìn)行編程。但是,已經(jīng)有科技公司和研究機(jī)構(gòu)開(kāi)發(fā)了更加容易使用的語(yǔ)言比如Impulse Accelerated Technologies Inc. 開(kāi)發(fā)了C-to-FPGA編譯器使得FPGA更加貼合用戶(hù)的使用,耶魯?shù)腅-Lab 開(kāi)發(fā)了Lua腳本語(yǔ)言。這些工具在一定程度上縮短了研究者的開(kāi)發(fā)時(shí)限,使研究更加簡(jiǎn)單易行。
在FPGA上運(yùn)行LSTM神經(jīng)網(wǎng)絡(luò)
LSTM簡(jiǎn)介
傳統(tǒng)的RNN由一個(gè)三層的網(wǎng)絡(luò):輸入層it,隱藏層ht,輸出層yt;其中ht的信息作用到下一時(shí)刻的輸入,這樣的結(jié)構(gòu)簡(jiǎn)單的模仿了人腦的記憶功能,圖3是其拓?fù)鋱D:
只有一個(gè)隱藏層方程:
其中 Wx和 Wh分別是輸入和隱藏層的權(quán)重,b 是偏置。
LSTM 是RNN(遞歸神經(jīng)網(wǎng)絡(luò))的一種,在處理時(shí)序數(shù)據(jù)得到了最廣泛的應(yīng)用,它由門(mén)控制信息一共有三個(gè)個(gè)門(mén):輸入門(mén)it,遺忘門(mén)ft,輸出門(mén)ot,另外還有隱藏層ht和記憶細(xì)胞ct。圖4是其拓?fù)鋱D:
輸入門(mén)控制了某一時(shí)刻的輸入;遺忘門(mén)通過(guò)作用到上一時(shí)刻記憶細(xì)胞上,控制了上一時(shí)刻的數(shù)據(jù)流要流多少進(jìn)入下一時(shí)刻;記憶細(xì)胞是由上一時(shí)刻的輸入和這一時(shí)刻的候選輸入共同決定的;輸出門(mén)作用到記憶細(xì)胞上,決定了這一時(shí)刻的隱藏層信息,并且送到下一層神經(jīng)網(wǎng)絡(luò)上。全部方程如下:
其中W 代表各自的權(quán)重,b 代表各自的偏置, σ 是logisTIc sigmoid 函數(shù):
設(shè)計(jì)FPGA模塊
一種遞歸神經(jīng)網(wǎng)絡(luò)在FPGA平臺(tái)上的實(shí)現(xiàn)方案詳解
LSTM主要進(jìn)行的是矩陣的乘法和非線性函數(shù)的計(jì)算(tanh,sigmoid),因此,選擇了Q8.8定點(diǎn)。
矩陣乘法由MAC單元進(jìn)行(MulTIply Accumulate),一共有兩個(gè)數(shù)據(jù)流:向量和權(quán)重矩陣流,如圖6(a)。在迭代完一次之后MAC就會(huì)重置以防止之前的數(shù)據(jù)混入下一時(shí)刻的數(shù)據(jù)。兩個(gè)MAC單元的數(shù)據(jù)相加之后進(jìn)行非線性函數(shù)計(jì)算。同時(shí)用一個(gè)rescale模塊將32位的數(shù)據(jù)轉(zhuǎn)變?yōu)?6位的數(shù)據(jù)。
標(biāo)量計(jì)算的模塊,是為了計(jì)算ct和ht,最終傳入下一時(shí)刻的計(jì)算。如圖6(b)。
整個(gè)模型一共用了三個(gè)圖6(a)和一個(gè)圖6(b)的模塊,如圖6(c)。數(shù)據(jù)的流入流出用了DMA(Direct Memory Access)串口控制。由于DMA串口是獨(dú)立的,因此,還需要一個(gè)時(shí)鐘模塊對(duì)其進(jìn)行時(shí)序控制。時(shí)鐘模塊主要是一個(gè)緩沖存儲(chǔ)器組成并暫存了一些數(shù)據(jù)直到數(shù)據(jù)都到達(dá)。當(dāng)最后的一個(gè)端口數(shù)據(jù)流入時(shí)鐘模塊才開(kāi)始傳送數(shù)據(jù),這保證了輸入跟權(quán)重矩陣是同個(gè)時(shí)刻相關(guān)的。
通過(guò)在不同平臺(tái)上訓(xùn)練LSTM網(wǎng)絡(luò),我們得到了不同模型的對(duì)比。表1是平臺(tái)的參數(shù),運(yùn)行結(jié)果如圖7,可以發(fā)現(xiàn):即使在142MHz的時(shí)鐘頻率下,F(xiàn)PGA平臺(tái)下的運(yùn)行時(shí)間遠(yuǎn)遠(yuǎn)小于其他平臺(tái),并行八個(gè)LSTM 記憶細(xì)胞的處理取得了比 Exynos5422 快16倍的結(jié)果。
深度學(xué)習(xí)采用包含多個(gè)隱藏層的深層神經(jīng)網(wǎng)絡(luò)(DeepNeural Networks,DNN)模型。DNN內(nèi)在的并行性,使得具備大規(guī)模并行體系結(jié)構(gòu)的GPU和FPGA成為加速深度學(xué)習(xí)的主流硬件平臺(tái),其突出優(yōu)勢(shì)是能夠根據(jù)應(yīng)用的特征來(lái)定制計(jì)算和存儲(chǔ)結(jié)構(gòu),達(dá)到硬件結(jié)構(gòu)與深度學(xué)習(xí)算法的最優(yōu)匹配,獲得更高的性能功耗比;并且,F(xiàn)PGA靈活的重構(gòu)功能也方便了算法的微調(diào)和優(yōu)化,能夠大大縮短開(kāi)發(fā)周期。毫無(wú)疑問(wèn),F(xiàn)PGA在深度學(xué)習(xí)的未來(lái)是十分值得期待的。