本發(fā)明涉及人工神經(jīng)網(wǎng)絡(luò),更具體涉及用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的裝置和方法。
背景技術(shù):
人工神經(jīng)網(wǎng)絡(luò)(artificialneuralnetworks,ann)也簡稱為神經(jīng)網(wǎng)絡(luò)(nn),它是一種模仿動(dòng)物神經(jīng)網(wǎng)絡(luò)行為特征,進(jìn)行分布式并行信息處理的算法數(shù)學(xué)模型。近年來神經(jīng)網(wǎng)絡(luò)發(fā)展很快,被廣泛應(yīng)用于很多領(lǐng)域,包括圖像識(shí)別、語音識(shí)別,自然語言處理,天氣預(yù)報(bào),基因表達(dá),內(nèi)容推送等等。
圖1圖示說明了人工神經(jīng)網(wǎng)絡(luò)中的一個(gè)神經(jīng)元的計(jì)算原理圖。
神經(jīng)元的積累的刺激是由其他神經(jīng)元傳遞過來的刺激量和對(duì)應(yīng)的權(quán)重之和,用xj表示在第j個(gè)神經(jīng)元的這種積累,yi表示第i個(gè)神經(jīng)元傳遞過來的刺激量,wi表示鏈接第i個(gè)神經(jīng)元刺激的權(quán)重,得到公式:
xj=(y1*w1)+(y2*w2)+...+(yi*wi)+...+(yn*wn)
而當(dāng)xj完成積累后,完成積累的第j個(gè)神經(jīng)元本身對(duì)周圍的一些神經(jīng)元傳播刺激,將其表示為yj得到如下所示:
yj=f(xj)
第j個(gè)神經(jīng)元根據(jù)積累后xj的結(jié)果進(jìn)行處理后,對(duì)外傳遞刺激yj。用f函數(shù)映射來表示這種處理,將它稱之為激活函數(shù)。
卷積神經(jīng)網(wǎng)絡(luò)(convolutionalneuralnetworks,cnn)是人工神經(jīng)網(wǎng)絡(luò)的一種,已成為當(dāng)前語音分析和圖像識(shí)別領(lǐng)域的研究熱點(diǎn)。它的權(quán)值共享網(wǎng)絡(luò)結(jié)構(gòu)使之更類似于生物神經(jīng)網(wǎng)絡(luò),降低了網(wǎng)絡(luò)模型的復(fù)雜度,減少了權(quán)值的數(shù)量。該優(yōu)點(diǎn)在網(wǎng)絡(luò)的輸入是多維圖像時(shí)表現(xiàn)的更為明顯,使圖像可以直接作為網(wǎng)絡(luò)的輸入,避免了傳統(tǒng)識(shí)別算法中復(fù)雜的特征提取和數(shù)據(jù)重建過程。卷積網(wǎng)絡(luò)是為識(shí)別二維形狀而特殊設(shè)計(jì)的一個(gè)多層感知器,這種網(wǎng)絡(luò)結(jié)構(gòu)對(duì)平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。
圖2示出了卷積神經(jīng)網(wǎng)絡(luò)的處理結(jié)構(gòu)示意圖。
卷積神經(jīng)網(wǎng)絡(luò)是一個(gè)多層的神經(jīng)網(wǎng)絡(luò),每層由多個(gè)二維平面組成,而每個(gè)平面由多個(gè)獨(dú)立神經(jīng)元組成。卷積神經(jīng)網(wǎng)絡(luò)通常由卷積層(convolutionlayer)、下采樣層(或稱為池化層即poolinglayer)以及全連接層(fullconnectionlayer,fc)組成。
卷積層通過線性卷積核與非線性激活函數(shù)產(chǎn)生輸入數(shù)據(jù)的特征圖,卷積核重復(fù)與輸入數(shù)據(jù)的不同區(qū)域進(jìn)行內(nèi)積,之后通過非線性函數(shù)輸出,非線性函數(shù)通常為rectifier、sigmoid、tanh等。以rectifier為例,卷積層的計(jì)算可以表示為:
其中,(i,j)為特征圖中的像素索引,xi,j表示輸入域以(i,j)為中心,k表示特征圖的通道索引。特征圖計(jì)算過程中雖然卷積核與輸入圖像的不同區(qū)域進(jìn)行內(nèi)積,但卷積核不變。
池化層通常為平均池化或極大池化,該層只是計(jì)算或找出前一層特征圖某一區(qū)域的平均值或最大值。
全連接層與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)相似,輸入端的所有元素全都與輸出的神經(jīng)元連接,每個(gè)輸出元素都是所有輸入元素乘以各自權(quán)重后再求和得到。
在近幾年里,神經(jīng)網(wǎng)絡(luò)的規(guī)模不斷增長,公開的比較先進(jìn)的神經(jīng)網(wǎng)絡(luò)都有數(shù)億個(gè)鏈接,屬于計(jì)算和訪存密集型應(yīng)用現(xiàn)有技術(shù)方案中通常是采用通用處理器(cpu)或者圖形處理器(gpu)來實(shí)現(xiàn),隨著晶體管電路逐漸接近極限,摩爾定律也將會(huì)走到盡頭。
在神經(jīng)網(wǎng)絡(luò)逐漸變大的情況下,模型壓縮就變得極為重要。模型壓縮可以將稠密神經(jīng)網(wǎng)絡(luò)變成稀疏神經(jīng)網(wǎng)絡(luò),可以有效減少計(jì)算量、降低訪存量。然而,cpu與gpu無法充分享受到稀疏化后帶來的好處,取得的加速極其有限。而傳統(tǒng)稀疏矩陣計(jì)算架構(gòu)并不能夠完全適應(yīng)于神經(jīng)網(wǎng)絡(luò)的計(jì)算。已公開實(shí)驗(yàn)表明模型壓縮率較低時(shí)現(xiàn)有處理器加速比有限。因此專有定制電路可以解決上述問題,可使得處理器在較低壓縮率下獲得更好的加速比。
就卷積神經(jīng)網(wǎng)絡(luò)而言,由于卷積層的卷積核能夠共享參數(shù),因此卷積層的參數(shù)量相對(duì)較少,而且卷積核往往較小(1*1、3*3、5*5等),因此對(duì)卷積層的稀疏化效果不明顯。池化層的計(jì)算量也較少。但全連接層仍然有數(shù)量龐大的參數(shù),如果對(duì)全連接層進(jìn)行稀疏化處理將會(huì)極大減少計(jì)算量。
因此,希望提出一種針對(duì)稀疏cnn加速器的實(shí)現(xiàn)裝置和方法,以達(dá)到提高計(jì)算性能、降低響應(yīng)延時(shí)的目的。
技術(shù)實(shí)現(xiàn)要素:
基于以上的討論,本發(fā)明提出了一種專用電路,支持fc層稀疏化cnn網(wǎng)絡(luò),采用ping-pang緩存并行化設(shè)計(jì),有效平衡i/o帶寬和計(jì)算效率。
現(xiàn)有技術(shù)方案中稠密cnn網(wǎng)絡(luò)需要較大io帶寬、較多存儲(chǔ)和計(jì)算資源。為了適應(yīng)算法需求,模型壓縮技術(shù)變得越來越流行。模型壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)存儲(chǔ)需要編碼,計(jì)算需要解碼。本發(fā)明采用定制電路,流水線設(shè)計(jì),能夠獲得較好的性能功耗比。
本發(fā)明的目的在于提供一種稀疏cnn網(wǎng)絡(luò)加速器的實(shí)現(xiàn)裝置和方法,以便達(dá)到提高計(jì)算性能、降低響應(yīng)延時(shí)的目的。
根據(jù)本發(fā)明的第一方面,提供一種用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的裝置,包括:卷積與池化單元,用于根據(jù)卷積參數(shù)信息對(duì)輸入數(shù)據(jù)進(jìn)行第一迭代次數(shù)的卷積與池化操作,以最終得到稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量,其中,每個(gè)輸入數(shù)據(jù)被分割為多個(gè)子塊,由卷積與池化單元對(duì)多個(gè)子塊并行進(jìn)行卷積與池化操作;全連接單元,用于根據(jù)全連接層權(quán)值矩陣位置信息對(duì)輸入向量進(jìn)行第二迭代次數(shù)的全連接計(jì)算,以最終得到稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果,其中,每個(gè)輸入向量被分割為多個(gè)子塊,由全連接單元對(duì)多個(gè)子塊并行進(jìn)行全連接操作;控制單元,用于確定并且向所述卷積與池化單元和所述全連接單元分別發(fā)送所述卷積參數(shù)信息和所述全連接層權(quán)值矩陣位置信息,并且對(duì)上述單元中的各個(gè)迭代層級(jí)的輸入向量讀取與狀態(tài)機(jī)進(jìn)行控制。
在根據(jù)本發(fā)明的用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的裝置中,所述卷積與池化單元可以進(jìn)一步包括:卷積單元,用于進(jìn)行輸入數(shù)據(jù)與卷積參數(shù)的乘法運(yùn)算;累加樹單元,用于累加卷積單元的輸出結(jié)果,以完成卷積運(yùn)算;非線性單元,用于對(duì)卷積運(yùn)算結(jié)果進(jìn)行非線性處理;池化單元,用于對(duì)非線性處理后的運(yùn)算結(jié)果進(jìn)行池化操作,以得到下一迭代級(jí)的輸入數(shù)據(jù)或最終得到稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量。
優(yōu)選地,所述累加樹單元除了累加卷積單元的輸出結(jié)果以外,還根據(jù)卷積參數(shù)信息而加上偏置。
在根據(jù)本發(fā)明的用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的裝置中,所述全連接單元可以進(jìn)一步包括:輸入向量緩存單元,用于緩存稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量;指針信息緩存單元,用于根據(jù)全連接層權(quán)值矩陣位置信息,緩存壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的指針信息;權(quán)重信息緩存單元,用于根據(jù)壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的指針信息,緩存壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息;算術(shù)邏輯單元,用于根據(jù)壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息與輸入向量進(jìn)行乘累加計(jì)算;輸出緩存單元,用于緩存算術(shù)邏輯單元的中間計(jì)算結(jié)果以及最終計(jì)算結(jié)果;激活函數(shù)單元,用于對(duì)輸出緩存單元中的最終計(jì)算結(jié)果進(jìn)行激活函數(shù)運(yùn)算,以得到稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果。
優(yōu)選地,所述壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息可以包括位置索引值和權(quán)重值。所述算術(shù)邏輯單元可以被進(jìn)一步配置為:將權(quán)重值與輸入向量的對(duì)應(yīng)元素進(jìn)行乘法運(yùn)算;根據(jù)位置索引值,讀取所述輸出緩存單元中相應(yīng)位置的數(shù)據(jù),與上述乘法運(yùn)算的結(jié)果相加;根據(jù)位置索引值,將相加結(jié)果寫入到輸出緩存單元中相應(yīng)位置。
根據(jù)本發(fā)明的第二方面,提供一種用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的方法,包括:依據(jù)控制信息而讀取卷積參數(shù)信息與輸入數(shù)據(jù)與中間計(jì)算數(shù)據(jù),并且讀取全連接層權(quán)值矩陣位置信息;根據(jù)卷積參數(shù)信息對(duì)輸入數(shù)據(jù)進(jìn)行第一迭代次數(shù)的卷積與池化操作,以最終得到稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量,其中,每個(gè)輸入數(shù)據(jù)被分割為多個(gè)子塊,對(duì)多個(gè)子塊并行進(jìn)行卷積與池化操作;根據(jù)全連接層權(quán)值矩陣位置信息對(duì)輸入向量進(jìn)行第二迭代次數(shù)的全連接計(jì)算,以最終得到稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果,其中,每個(gè)輸入向量被分割為多個(gè)子塊,并行進(jìn)行全連接操作。
在根據(jù)本發(fā)明的用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的方法中,所述的根據(jù)卷積參數(shù)信息對(duì)輸入數(shù)據(jù)進(jìn)行第一迭代次數(shù)的卷積與池化操作,以最終得到稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量的步驟可以進(jìn)一步包括:進(jìn)行輸入數(shù)據(jù)與卷積參數(shù)的乘法運(yùn)算;累加乘法運(yùn)算的輸出結(jié)果,以完成卷積運(yùn)算;對(duì)卷積運(yùn)算結(jié)果進(jìn)行非線性處理;對(duì)非線性處理后的運(yùn)算結(jié)果進(jìn)行池化操作,以得到下一迭代級(jí)的輸入數(shù)據(jù)或最終得到稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量。
優(yōu)選地,所述的累加乘法運(yùn)算的輸出結(jié)果,以完成卷積運(yùn)算的步驟可以進(jìn)一步包括:根據(jù)卷積參數(shù)信息而加上偏置。
在根據(jù)本發(fā)明的用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的方法中,所述的根據(jù)全連接層權(quán)值矩陣位置信息對(duì)輸入向量進(jìn)行第二迭代次數(shù)的全連接計(jì)算,以最終得到稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果的步驟可以進(jìn)一步包括:緩存稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量;根據(jù)全連接層權(quán)值矩陣位置信息,緩存壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的指針信息;根據(jù)壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的指針信息,緩存壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息;根據(jù)壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息與輸入向量進(jìn)行乘累加計(jì)算;緩存乘累加計(jì)算的中間計(jì)算結(jié)果以及最終計(jì)算結(jié)果;對(duì)乘累加計(jì)算的最終計(jì)算結(jié)果進(jìn)行激活函數(shù)運(yùn)算,以得到稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果。
優(yōu)選地,所述壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息可以包括位置索引值和權(quán)重值。所述的根據(jù)壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息與輸入向量進(jìn)行乘累加計(jì)算的步驟可以進(jìn)一步包括:將權(quán)重值與輸入向量的對(duì)應(yīng)元素進(jìn)行乘法運(yùn)算;根據(jù)位置索引值,讀取所緩存的中間計(jì)算結(jié)果中相應(yīng)位置的數(shù)據(jù),與上述乘法運(yùn)算的結(jié)果相加;根據(jù)位置索引值,將相加結(jié)果寫入到所緩存的中間計(jì)算結(jié)果中相應(yīng)位置。
本發(fā)明的目的是采用高并發(fā)設(shè)計(jì),高效處理稀疏神經(jīng)網(wǎng)絡(luò),從而獲得更好的計(jì)算效率,更低的處理延時(shí)。
附圖說明
下面參考附圖結(jié)合實(shí)施例說明本發(fā)明。在附圖中:
圖1圖示說明了人工神經(jīng)網(wǎng)絡(luò)中的一個(gè)神經(jīng)元的計(jì)算原理圖。
圖2示出了卷積神經(jīng)網(wǎng)絡(luò)的處理結(jié)構(gòu)示意圖。
圖3是根據(jù)本發(fā)明的用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的裝置的示意圖。
圖4是根據(jù)本發(fā)明的卷積與池化單元的具體結(jié)構(gòu)示意圖。
圖5是根據(jù)本發(fā)明的全連接單元的具體結(jié)構(gòu)示意圖。
圖6是根據(jù)本發(fā)明的用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的方法的流程圖。
圖7是根據(jù)本發(fā)明的具體實(shí)現(xiàn)例1的計(jì)算層結(jié)構(gòu)的示意圖。
圖8是根據(jù)本發(fā)明的具體實(shí)現(xiàn)例2圖示說明稀疏矩陣與向量的乘法操作的示意圖。
圖9是根據(jù)本發(fā)明的具體實(shí)現(xiàn)例2圖示說明pe0對(duì)應(yīng)的權(quán)重信息的示意表格。
具體實(shí)施方式
下面將結(jié)合附圖來詳細(xì)解釋本發(fā)明的具體實(shí)施例。
圖3是根據(jù)本發(fā)明的用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的裝置的示意圖。
本發(fā)明提供了一種用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的裝置。如圖3所示,該裝置主要包含三大模塊:卷積與池化單元、全連接單元、控制單元。具體地說,卷積與池化單元,也可稱為convolution+pooling模塊,用于根據(jù)卷積參數(shù)信息對(duì)輸入數(shù)據(jù)進(jìn)行第一迭代次數(shù)的卷積與池化操作,以最終得到稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量,其中,每個(gè)輸入數(shù)據(jù)被分割為多個(gè)子塊,由卷積與池化單元對(duì)多個(gè)子塊并行進(jìn)行卷積與池化操作。全連接單元,也可稱為fullconnection模塊,用于根據(jù)全連接層權(quán)值矩陣位置信息對(duì)輸入向量進(jìn)行第二迭代次數(shù)的全連接計(jì)算,以最終得到稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果,其中,每個(gè)輸入向量被分割為多個(gè)子塊,由全連接單元對(duì)多個(gè)子塊并行進(jìn)行全連接操作。控制單元,也可稱為controller模塊,用于確定并且向所述卷積與池化單元和所述全連接單元分別發(fā)送所述卷積參數(shù)信息和所述全連接層權(quán)值矩陣位置信息,并且對(duì)上述單元中的各個(gè)迭代層級(jí)的輸入向量讀取與狀態(tài)機(jī)進(jìn)行控制。
下文中將結(jié)合附圖4、5,針對(duì)各個(gè)單元進(jìn)行進(jìn)一步的詳細(xì)描述。
圖4是根據(jù)本發(fā)明的卷積與池化單元的具體結(jié)構(gòu)示意圖。
本發(fā)明的卷積與池化單元用于cnn中實(shí)現(xiàn)卷積層與池化層的計(jì)算,該單元可以例化多個(gè)實(shí)現(xiàn)并行計(jì)算,也就是說,每個(gè)輸入數(shù)據(jù)被分割為多個(gè)子塊,由卷積與池化單元對(duì)多個(gè)子塊并行進(jìn)行卷積與池化操作。
應(yīng)該注意到,卷積與池化單元對(duì)輸入數(shù)據(jù)不僅進(jìn)行分塊化并行處理,而且對(duì)輸入數(shù)據(jù)進(jìn)行若干層級(jí)的迭代處理。至于具體的迭代層級(jí)數(shù)目,本領(lǐng)域技術(shù)人員可根據(jù)具體應(yīng)用而指定不同的數(shù)目。例如,針對(duì)不同類型的處理對(duì)象,諸如視頻或語音,迭代層級(jí)的數(shù)目可能需要不同的指定。
如圖4中所示,該單元包含但不僅限于如下幾個(gè)單元(又稱為模塊):
卷積單元,也可稱為convolver模塊:實(shí)現(xiàn)輸入數(shù)據(jù)與卷積核參數(shù)的乘法運(yùn)算。
累加樹單元,也可稱為addertree模塊:累加卷積單元的輸出結(jié)果,完成卷積運(yùn)算,有偏置輸入的情況下還加上偏置。
非線性單元,也可稱為nonlinear模塊:實(shí)現(xiàn)非線性激活函數(shù),根據(jù)需要可以為rectifier、sigmoid、tanh等函數(shù)。
池化單元,也可稱為pooling模塊,用于對(duì)非線性處理后的運(yùn)算結(jié)果進(jìn)行池化操作,以得到下一迭代級(jí)的輸入數(shù)據(jù)或最終得到稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量。這里的池化操作,根據(jù)需要可以為最大池化或平均池化。
圖5是根據(jù)本發(fā)明的全連接單元的具體結(jié)構(gòu)示意圖。
本發(fā)明的全連接單元用于實(shí)現(xiàn)稀疏化全連接層的計(jì)算。與卷積與池化單元相類似,應(yīng)該注意到,全連接單元對(duì)輸入向量不僅進(jìn)行分塊化并行處理,而且對(duì)輸入向量進(jìn)行若干層級(jí)的迭代處理。至于具體的迭代層級(jí)數(shù)目,本領(lǐng)域技術(shù)人員可根據(jù)具體應(yīng)用而指定不同的數(shù)目。例如,針對(duì)不同類型的處理對(duì)象,諸如視頻或語音,迭代層級(jí)的數(shù)目可能需要不同的指定。此外,全連接單元的迭代層級(jí)的數(shù)目可以與卷積與池化層的迭代層級(jí)的數(shù)目相同或不同,這完全取決于具體的應(yīng)用與本領(lǐng)域技術(shù)人員對(duì)計(jì)算結(jié)果的不同控制需求。
如圖5所示,該單元包含但不僅限于如下幾個(gè)單元(又稱為子模塊):
輸入向量緩存單元,也可稱為actqueue模塊:用于存儲(chǔ)稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量。多計(jì)算單元(pe,processelement)可共享輸入向量。該模塊包含先進(jìn)先出緩存(fifo),每個(gè)計(jì)算單元pe對(duì)應(yīng)一個(gè)fifo,相同輸入元素下能有效平衡多個(gè)計(jì)算單元間計(jì)算量的差異。fifo深度的設(shè)置可以取經(jīng)驗(yàn)值,過深會(huì)浪費(fèi)資源,過小又不能有效平衡不同pe間的計(jì)算差異。
指針信息緩存單元,也可稱為ptrread模塊:用于根據(jù)全連接層權(quán)值矩陣位置信息,緩存壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的指針信息。如稀疏矩陣采用列存儲(chǔ)(ccs)的存儲(chǔ)格式,ptrread模塊存儲(chǔ)列指針向量,向量中的pj+1-pj值表示第j列中非零元素的個(gè)數(shù)。設(shè)計(jì)中有兩個(gè)緩存,采用ping-pang設(shè)計(jì)。
權(quán)重信息緩存單元,也可稱為spmatread模塊:用于根據(jù)壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的指針信息,緩存壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息。這里所述的權(quán)重信息包括位置索引值和權(quán)重值等。通過ptrread模塊輸出的pj+1和pj值可獲得該模塊對(duì)應(yīng)的權(quán)重值。該模塊緩存也是采用ping-pang設(shè)計(jì)。
算術(shù)邏輯單元,即alu模塊:用于根據(jù)壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息與輸入向量進(jìn)行乘累加計(jì)算。具體地說,根據(jù)spmatread模塊送來的位置索引以及權(quán)重值,主要做三步計(jì)算:第一步,讀取神經(jīng)元的輸入向量和權(quán)重進(jìn)行對(duì)應(yīng)乘法計(jì)算;第二步,根據(jù)索引值讀取下一單元(actbuffer模塊,或輸出緩存單元)中對(duì)應(yīng)位置歷史累加結(jié)果,再與第一步結(jié)果進(jìn)行加法運(yùn)算;第三步,根據(jù)位置索引值,將相加結(jié)果再寫入到輸出緩存單元中相應(yīng)位置。為了提高并發(fā)度,本模塊采用多個(gè)乘法和加法樹來完成一列中的非零元素的乘累加運(yùn)算。
輸出緩存單元,也稱為actbuffer模塊:用于緩存算術(shù)邏輯單元的矩陣運(yùn)算的中間計(jì)算結(jié)果以及最終計(jì)算結(jié)果。為提高下一級(jí)的計(jì)算效率,存儲(chǔ)也采用ping-pang設(shè)計(jì),流水線操作。
激活函數(shù)單元,也稱為function模塊:用于對(duì)輸出緩存單元中的最終計(jì)算結(jié)果進(jìn)行激活函數(shù)運(yùn)算。常見的激活函數(shù)諸如sigmoid/tanh/rectifier等。當(dāng)加法樹模塊完成了各組權(quán)重與向量的疊加運(yùn)算后,經(jīng)該函數(shù)后可獲得稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果。
本發(fā)明的控制單元負(fù)責(zé)全局控制,卷積與池化層的數(shù)據(jù)輸入選擇額,卷積參數(shù)與輸入數(shù)據(jù)的讀取,全連接層中稀疏矩陣與輸入向量的讀取,計(jì)算過程中的狀態(tài)機(jī)控制等。
根據(jù)以上參考描述,并參考圖3至圖5的圖示說明,本發(fā)明還提供一種用于實(shí)現(xiàn)稀疏cnn網(wǎng)絡(luò)加速器的方法,具體步驟包括:
步驟1:初始化依據(jù)全局控制信息讀取cnn卷積層的參數(shù)與輸入數(shù)據(jù),讀取全連接層權(quán)值矩陣的位置信息。
步驟2:convolver模塊進(jìn)行輸入數(shù)據(jù)與參數(shù)的乘法操作,多個(gè)convolver模塊軻同時(shí)計(jì)算實(shí)現(xiàn)并行化。
步驟3:addertree模塊將前一步驟的結(jié)果相加并在有偏置(bias)的情況下與偏置求和。
步驟4:nonlinear模塊對(duì)前一步結(jié)果進(jìn)行非線性處理。
步驟5;pooling模塊對(duì)前一步結(jié)果進(jìn)行池化處理。
其中步驟2、3、4、5流水進(jìn)行以提高效率。
步驟6:根據(jù)卷積層的迭代層級(jí)數(shù)目重復(fù)進(jìn)行步驟2、3、4、5。在此期間,controller模塊控制將上一次卷積和池化的結(jié)果連接至卷積層的輸入端,直到所有層都計(jì)算完成。
步驟7:根據(jù)步驟1的權(quán)值矩陣位置信息讀取稀疏神經(jīng)網(wǎng)絡(luò)的位置索引、權(quán)重值。
步驟8:根據(jù)全局控制信息,把輸入向量廣播給多個(gè)計(jì)算單元pe。
步驟9:計(jì)算單元把spmatread模塊送來的權(quán)重值跟actqueue模塊送來的輸入向量對(duì)應(yīng)元素做乘法計(jì)算。
步驟10,計(jì)算模塊根據(jù)步驟7的位置索引值讀取輸出緩存actbuffer模塊中相應(yīng)位置的數(shù)據(jù),然后跟步驟9的乘法結(jié)果做加法計(jì)算。
步驟11:根據(jù)步驟7的索引值把步驟10的加法結(jié)果寫入輸出緩存actbuffer模塊中。
步驟12:控制模塊讀取步驟11中輸出的結(jié)果經(jīng)激活函數(shù)模塊后得到cnnfc層的計(jì)算結(jié)果。
步驟7-12也可以根據(jù)指定的迭代層級(jí)數(shù)目而重復(fù)進(jìn)行,從而得到最終的稀疏cnn的計(jì)算結(jié)果。
可以將上述的步驟1-12概括為一個(gè)方法流程圖。
圖6是根據(jù)本發(fā)明的用于實(shí)現(xiàn)稀疏卷積神經(jīng)網(wǎng)絡(luò)加速器的方法的流程圖。
圖6所示的方法流程圖s600開始于步驟s601。在此步驟,依據(jù)控制信息而讀取卷積參數(shù)信息與輸入數(shù)據(jù)與中間計(jì)算數(shù)據(jù),并且讀取全連接層權(quán)值矩陣位置信息。這一步驟對(duì)應(yīng)于根據(jù)本發(fā)明的裝置中的控制單元的操作。
接下來,在步驟s603,根據(jù)卷積參數(shù)信息對(duì)輸入數(shù)據(jù)進(jìn)行第一迭代次數(shù)的卷積與池化操作,以最終得到稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量,其中,每個(gè)輸入數(shù)據(jù)被分割為多個(gè)子塊,對(duì)多個(gè)子塊并行進(jìn)行卷積與池化操作。這一步驟對(duì)應(yīng)于根據(jù)本發(fā)明的裝置中的卷積與池化單元的操作。
更具體地說,步驟s603的操作進(jìn)一步包括:
1、進(jìn)行輸入數(shù)據(jù)與卷積參數(shù)的乘法運(yùn)算,對(duì)應(yīng)于卷積單元的操作;
2、累加乘法運(yùn)算的輸出結(jié)果,以完成卷積運(yùn)算,對(duì)應(yīng)于累加樹單元的操作;這里,如果卷積參數(shù)信息指出偏置的存在,再還需要加上偏置;
3、對(duì)卷積運(yùn)算結(jié)果進(jìn)行非線性處理,對(duì)應(yīng)于非線性單元的操作;
4、對(duì)非線性處理后的運(yùn)算結(jié)果進(jìn)行池化操作,以得下一迭代級(jí)的輸入數(shù)據(jù)或最終得到稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量,對(duì)應(yīng)于池化單元的操作。
接下來,在步驟s605,根據(jù)全連接層權(quán)值矩陣位置信息對(duì)輸入向量進(jìn)行第二迭代次數(shù)的全連接計(jì)算,以最終得到稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果,其中,每個(gè)輸入向量被分割為多個(gè)子塊,并行進(jìn)行全連接操作。這一步驟對(duì)應(yīng)于根據(jù)本發(fā)明的裝置中的全連接單元的操作。
更具體地說,步驟s605的操作進(jìn)一步包括:
1、緩存稀疏神經(jīng)網(wǎng)絡(luò)的輸入向量,對(duì)應(yīng)于輸入向量緩存單元的操作;
2、根據(jù)全連接層權(quán)值矩陣位置信息,緩存壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的指針信息,對(duì)應(yīng)于指針信息緩存單元的操作;
3、根據(jù)壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的指針信息,緩存壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息,對(duì)應(yīng)于權(quán)重信息緩存單元的操作;
4、根據(jù)壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息與輸入向量進(jìn)行乘累加計(jì)算,對(duì)應(yīng)于算術(shù)邏輯單元的操作;
5、緩存乘累加計(jì)算的中間計(jì)算結(jié)果以及最終計(jì)算結(jié)果,對(duì)應(yīng)于輸出緩存單元的操作;
6、對(duì)乘累加計(jì)算的最終計(jì)算結(jié)果進(jìn)行激活函數(shù)運(yùn)算,以得到稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果,對(duì)應(yīng)于激活函數(shù)單元的操作。
在步驟s605中,所述壓縮后的稀疏神經(jīng)網(wǎng)絡(luò)的權(quán)重信息包括位置索引值和權(quán)重值。因此,其中的子步驟4進(jìn)一步包括:
4.1、將權(quán)重值與輸入向量的對(duì)應(yīng)元素進(jìn)行乘法運(yùn)算,
4.2、根據(jù)位置索引值,讀取所緩存的中間計(jì)算結(jié)果中相應(yīng)位置的數(shù)據(jù),與上述乘法運(yùn)算的結(jié)果相加,
4.3、根據(jù)位置索引值,將相加結(jié)果寫入到所緩存的中間計(jì)算結(jié)果中相應(yīng)位置。
在執(zhí)行完步驟s605之后,就得到了稀疏卷積神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果。由此,方法流程圖s600結(jié)束。
非專利文獻(xiàn)songhanetal.,eie:efficientinferenceengineoncompresseddeepneuralnetwork,isca2016:243-254中提出了一種加速器硬件實(shí)現(xiàn)eie,旨在利用cnn的信息冗余度比較高的特點(diǎn),使得壓縮后得到的神經(jīng)網(wǎng)絡(luò)參數(shù)可以完全分配到sram上,從而極大地減少了dram的訪問次數(shù),由此可以取得很好的性能和性能功耗比。與沒有壓縮的神經(jīng)網(wǎng)絡(luò)加速器dadiannao相比,eie的吞吐率提高了2.9倍,性能能耗比提高了19倍,而面積只有dadiannao的1/3。在此,將該非專利文獻(xiàn)的內(nèi)容通過援引全部加入到本申請(qǐng)的說明書中。
本發(fā)明提議的稀疏cnn加速器的實(shí)現(xiàn)裝置和方法與eie論文的區(qū)別在于:eie設(shè)計(jì)中有一個(gè)計(jì)算單元,一個(gè)周期僅能實(shí)現(xiàn)一個(gè)乘加計(jì)算,而一個(gè)計(jì)算核前后模塊卻需要較多的存儲(chǔ)和邏輯單元。無論是專用集成電路(asic)還是可編程芯片都會(huì)帶來資源的相對(duì)不均衡。實(shí)現(xiàn)過程中并發(fā)度越高,需要的片上存儲(chǔ)以及邏輯資源相對(duì)越多,芯片中需要的計(jì)算資源dsp與上述兩者越不均衡。本發(fā)明計(jì)算單元采用高并發(fā)設(shè)計(jì),在增加了dsp資源的同時(shí),沒有使得其他的邏輯電路相應(yīng)的增加,達(dá)到了平衡計(jì)算、片上存儲(chǔ)、邏輯資源之間的關(guān)系等目的。
下面結(jié)合圖7至圖9來看本發(fā)明的兩個(gè)具體實(shí)現(xiàn)例。
具體實(shí)現(xiàn)例1:
圖7是根據(jù)本發(fā)明的具體實(shí)現(xiàn)例1的計(jì)算層結(jié)構(gòu)的示意圖。
如圖7所示,以alexnet為例,該網(wǎng)絡(luò)除輸入輸出外,包含八層,五個(gè)卷積層與三個(gè)全連接層。第一層為卷積+池化,第二層為卷積+池化,第三層為卷積,第四層為卷積,第五層為卷積+池化,第六層為全連接,第七層為全連接,第八層為全連接。
該cnn結(jié)構(gòu)可用本發(fā)明的專用電路實(shí)現(xiàn),第1-5層由convolution+pooling模塊(卷積與池化單元)按順序分時(shí)實(shí)現(xiàn),由controller模塊(控制單元)控制convolution+pooling模塊的數(shù)據(jù)輸入,參數(shù)配置以及內(nèi)部電路連接,例如當(dāng)不需要池化時(shí),可由controller模塊控制數(shù)據(jù)流直接跳過pooling模塊。該網(wǎng)絡(luò)的第6-8層由本發(fā)明的fullconnection模塊按順序分時(shí)實(shí)現(xiàn),由controller模塊控制fullconnection模塊的數(shù)據(jù)輸入、參數(shù)配置以及內(nèi)部電路連接等。
具體實(shí)現(xiàn)例2:
圖8是根據(jù)本發(fā)明的具體實(shí)現(xiàn)例2圖示說明稀疏矩陣與向量的乘法操作的示意圖。
對(duì)于fc層的稀疏矩陣與向量的乘法操作,以4個(gè)計(jì)算單元(processelement,pe)計(jì)算一個(gè)矩陣向量乘,采用列存儲(chǔ)(ccs)為例進(jìn)行詳細(xì)說明。
如圖8所示,第1、5行元素由pe0完成,第2、6行元素由pe1完成,第3、7行元素由pe2完成,第4、8行元素由pe3完成,計(jì)算結(jié)果分別對(duì)應(yīng)輸出向量的第1、5個(gè)元素,第2、6個(gè)元素,第3、7個(gè)元素,第4、8個(gè)元素。輸入向量會(huì)廣播給4個(gè)計(jì)算單元。
圖9是根據(jù)本發(fā)明的具體實(shí)現(xiàn)例2圖示說明pe0對(duì)應(yīng)的權(quán)重信息的示意表格。
如圖9所示,該表格示出了pe0對(duì)應(yīng)的權(quán)重信息。
以下介紹在pe0的各個(gè)模塊中的作用。
ptrread模塊0(指針):存儲(chǔ)1、5行非零元素的列位置信息,其中p(j+1)-p(j)為第j列中非零元素的個(gè)數(shù)。
spmatread模塊0:存儲(chǔ)1、5行非零元素的權(quán)重值和相對(duì)行索引。
actqueue模塊:存儲(chǔ)輸入向量x,該模塊把輸入向量廣播給4個(gè)計(jì)算單元pe0、pe1、pe2、pe3,為了平衡計(jì)算單元間元素稀疏度的差異,每個(gè)計(jì)算單元的入口都添加先進(jìn)先出緩存(fifo)來提高計(jì)算效率。
controller模塊:控制系統(tǒng)狀態(tài)機(jī)的跳轉(zhuǎn),實(shí)現(xiàn)計(jì)算控制,使得各模塊間信號(hào)同步,從而實(shí)現(xiàn)權(quán)值與對(duì)應(yīng)輸入向量的元素做乘,對(duì)應(yīng)行值做累加。
alu模塊:完成權(quán)值矩陣奇數(shù)行元素與輸入向量x對(duì)應(yīng)元素的乘累加。
actbuffer模塊:存放中間計(jì)算結(jié)果以及最終y的第1、5個(gè)元素。
與上類似,另一個(gè)計(jì)算單元pe1,計(jì)算y的2、6個(gè)元素,其他pe以此類推。
上面已經(jīng)描述了本發(fā)明的各種實(shí)施例和實(shí)施情形。但是,本發(fā)明的精神和范圍不限于此。本領(lǐng)域技術(shù)人員將能夠根據(jù)本發(fā)明的教導(dǎo)而做出更多的應(yīng)用,而這些應(yīng)用都在本發(fā)明的范圍之內(nèi)。