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