<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

FPGA也能做RNN

作者: 時(shí)間:2018-07-25 來(lái)源:網(wǎng)絡(luò ) 收藏

導言:循環(huán)神經(jīng)網(wǎng)絡(luò )(RNNs)具有保留記憶和學(xué)習數據序列的能力。由于RNN的循環(huán)性質(zhì),難以將其所有計算在傳統硬件上實(shí)現并行化。當前CPU不具有大規模并行性,而由于RNN模型的順序組件,GPU只能提供有限的并行性。針對這個(gè)問(wèn)題,普渡大學(xué)的研究人員提出了一種LSTM在Zynq 7020 的硬件實(shí)現方案,該方案在中實(shí)現了2層128個(gè)隱藏單元的RNN,并且使用字符級語(yǔ)言模型進(jìn)行了測試。該實(shí)現比嵌入在Zynq 7020 上的ARM Cortex-A9 CPU快了21倍。

本文引用地址:http://dyxdggzs.com/article/201807/383934.htm

LSTM是一種特殊的RNN,由于獨特的設計結構,LSTM適合于處理和預測時(shí)間序列中間隔和延遲非常長(cháng)的重要事件。標準的RNN可以保留和使用最近的過(guò)去信息,但是不能學(xué)習長(cháng)期的依賴(lài)關(guān)系。并且由于存在梯度消失和爆炸的問(wèn)題,傳統的RNN無(wú)法訓練較長(cháng)的序列。為了解決上述問(wèn)題,LSTM添加了記憶控制單元來(lái)決定何時(shí)記住、遺忘和輸出。LSTM的單元結構如圖1所示。其中⊙代表element-wise的乘法。

圖1

用數學(xué)表達式表示圖1如圖2所示。其中表示Sigmoid函數,是層的輸入向量,是模型參數,是記憶單元激活值,是候選記憶單元門(mén),是層的輸出向量。下標表示前一時(shí)刻,就是相應的輸入、遺忘和輸出門(mén)。這些門(mén)決定何時(shí)記住或遺忘一個(gè)輸入序列,以及何時(shí)輸出。人們需要對模型進(jìn)行訓練,從而得到所需的輸出參數。簡(jiǎn)單來(lái)說(shuō),模型訓練是一個(gè)迭代過(guò)程,其中訓練數據被輸入,然后將得到的輸出與目標進(jìn)行比較。模型通過(guò)BP算法進(jìn)行訓練。由于添加了更多的層和更多的不同的功能,模型可以變得相當復雜。 對于LSTM,每個(gè)模塊有四個(gè)門(mén)和一些element-wise的操作。 深層LSTM網(wǎng)絡(luò )具有多個(gè)LSTM模塊級聯(lián),使得一層的輸出是下一層的輸入。

圖2

了解完了LSTM的特性后,如何設計LSTM在FPGA上的實(shí)現呢?下面我們來(lái)看一下實(shí)現方案。

1)硬件

硬件實(shí)現的主要操作就是矩陣向量乘法和非線(xiàn)性函數。

矩陣向量乘法由MAC單元計算, MAC單元需要兩個(gè)流:輸入向量流和加權矩陣的行向量流。將相同的矢量流與每個(gè)權重矩陣行相乘并累加,以產(chǎn)生與權重矩陣的高相同尺寸的輸出向量。在計算每個(gè)輸出元素之后,MAC被重置以避免累積先前的矩陣行計算??梢酝ㄟ^(guò)向權重矩陣的最后一列添加偏置向量來(lái)將偏置b添加到乘法累加中,同時(shí)為輸入向量增加一個(gè)額外的單位值。這樣就不需要為偏置添加額外的輸入端口,也可以向MAC單元添加額外的預配置步驟。 將MAC單元的結果加在一起。加法器的輸出是一個(gè)元素的非線(xiàn)性函數,它是用線(xiàn)性映射來(lái)實(shí)現的。

非線(xiàn)性函數被分割成線(xiàn)性y = ax + b,其中x限于特定范圍。在配置階段,a,b和x范圍的值存儲在配置寄存器中。每個(gè)線(xiàn)性函數段用MAC單元和比較器實(shí)現。輸入值與線(xiàn)性范圍之間的比較決定是處理輸入還是將其傳遞給下一個(gè)線(xiàn)性函數段模塊。非線(xiàn)性函數分為13個(gè)線(xiàn)段,因此非線(xiàn)性模塊包含13個(gè)流水線(xiàn)段模塊。 實(shí)施設計的主要組成部分是如圖3所示的門(mén)模塊。

圖3

實(shí)現模塊使用直接存儲訪(fǎng)問(wèn)(DMA)端口來(lái)進(jìn)行數據的讀入或寫(xiě)出。由于DMA端口是獨立的,因此即使模塊同時(shí)激活端口,輸入流也不會(huì )同步。因此,需要流同步模塊。該同步塊用來(lái)緩存一些流數據,直到所有端口都是流式傳輸。當最后一個(gè)端口開(kāi)始傳輸時(shí),同步塊開(kāi)始輸出同步流。這樣就能確保到MAC單元的向量和矩陣行元素對齊。另外,圖3中的門(mén)模塊還包含一個(gè)將32位值轉換為16位值的重分區塊。MAC單元執行16位乘法,產(chǎn)生32位值。然后使用32位值執行加法以保持精度。

圖2中的公式1,2,3,4都能用上述模塊實(shí)現,剩下的只是計算公式5和6的一些element-wise的運算。為此,方案引入了如圖4所示的包含額外的乘法器和加法器的模塊。

圖4

最終形成的實(shí)現LSTM的方案如圖5所示。該方案使用圖3中的三個(gè)模塊和圖4中的一個(gè)。門(mén)被預配置為具有非線(xiàn)性函數(tanh或S形)。內部模塊由狀態(tài)機控制以執行一系列操作。實(shí)現的設計使用四個(gè)32位DMA端口。由于操作以16位完成,每個(gè)DMA端口可以傳輸兩個(gè)16位流。權重和連接在主存儲器中以利用該特征。然后根據要執行的操作將流路由到不同的模塊。

圖5

2)驅動(dòng)軟件

控制和測試軟件用C代碼實(shí)現。該軟件將權重值和輸入向量放入主存儲器,并使用一組配置寄存器控制硬件模塊。權重矩陣的每行結尾是相應的偏置值。輸入向量包含一個(gè)額外的單位值,使得矩陣向量乘法僅添加矩陣行的最后一個(gè)元素。零填充用于匹配矩陣行尺寸和向量尺寸,這使流同步更容易。

由于LSTM的循環(huán)性質(zhì),每次循環(huán)c和h都被覆蓋。這樣做可以最大限度地減少CPU完成的內存復制次數。為了實(shí)現多層LSTM,將上一層的輸出復制到下一層的位置,以便在層之間保留以進(jìn)行錯誤度量。此外,控制軟件還需要通過(guò)在控制寄存器中設置不同的存儲位置來(lái)更改不同層的權重。

實(shí)驗和實(shí)驗結果

實(shí)驗實(shí)現了一個(gè)字符級語(yǔ)言模型,它預測了給定前一個(gè)字符的下一個(gè)字符。根據字符,模型生成一個(gè)看起來(lái)像訓練數據集的文本,它可以是一本書(shū)或大于2 MB字的大型互聯(lián)網(wǎng)語(yǔ)料庫。本實(shí)驗選取莎士比亞的一部分作品進(jìn)行了訓練。實(shí)驗實(shí)現了一個(gè)隱藏層大小為128的2層LSTM模型。

該方案在包含Zynq-7000 SOC XC7Z020的Zedboard上實(shí)現。它包含雙ARM Cortex-A9 MPCore,該實(shí)驗采用的C代碼LSTM的實(shí)現在Zedboard的雙ARM Cortex-A9處理器上運行,時(shí)鐘頻率為667 MHz。在FPGA上的實(shí)現運行的時(shí)鐘頻率為142 MHz的。芯片總功率為1.942 W,硬件利用率如表1所示。

表1

圖6展示了不同平臺上的前饋LSTM字符級語(yǔ)言模型的執行時(shí)間,時(shí)間越越好。我們看到,即使是在142MHz的時(shí)鐘頻率下,該實(shí)現依然比嵌入在Zynq 7020 FPGA上的ARM Cortex-A9 CPU的實(shí)現快了21倍。

圖6

圖7展示了不同平臺的單位功耗性能(值越大表示性能越好)。從圖中結果可以看出,FPGA的實(shí)現單位功耗性能遠超其他平臺,這進(jìn)一步說(shuō)明了FPGA實(shí)現的優(yōu)越性。

圖7



關(guān)鍵詞: 嵌入式 FPGA

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>