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